[Python] Versuchen Sie, Zeichen aus Bildern mit OpenCV und pyocr zu erkennen

Einführung

Als ich nach einem Artikel suchte, der Selen verwendet, fand ich einen Artikel über die Automatisierung von Sushi. Die Methode ist grundsätzlich wie folgt ・ Geben Sie nach dem Start des Spiels weiterhin alle Tasten ein ・ Wenn Sie das Spiel starten, drücken Sie und geben Sie die von OCR erhaltene Zeichenkette ein.

Diesmal habe ich eine einfache Bildverarbeitung mit OpenCV als OCR-Teil und Vorverarbeitung versucht

Vorbereitungen

Installation von Tesseract

Tesseract ist eine OCR-Engine. Dieses Mal werde ich diese OCR-Engine mit dem Pyocr-Modul von Python ausführen Die Installation wird mit dem folgenden Befehl abgeschlossen

$ brew install tesseract

Da es für Japanisch keine Testdaten gibt, laden Sie diese von der folgenden URL herunter https://github.com/tesseract-ocr/tessdata ↑ Laden Sie jpn.traineddata von dieser URL nach / usr / local / share / tessdata / herunter.

Installation von Pyocr und OpenCV

Führen Sie den folgenden Befehl im Terminal aus, um den Vorgang abzuschließen

$ pip3 install pyocr
$ pip3 install opencv-python

Ich werde OCR vorerst ausprobieren

Bildvorbereitung

Das Testbild ist unten sushida_ori.png ↓ Trimmen sushida_small.png

Speichern Sie die zugeschnittene Version als test.png

OCR mit Pyocr

import cv2
import pyocr
from PIL import Image
image = "test.png "

img = cv2.imread(image)
tools = pyocr.get_available_tools()
if len(tools) == 0:
    print("No OCR tool found")
    sys.exit(1)
tool = tools[0]
res = tool.image_to_string(
    Image.open("test.png ")
    ,lang="eng")

print(res)

Ausführungsergebnis res1.png Überhaupt nicht richtig erkannt ... Immerhin scheint eine Vorverarbeitung notwendig zu sein

Berühren Sie OpenCV

Ich möchte mit OpenCV vorverarbeiten, bin aber neu bei OpenCV, also werde ich damit spielen Versuchen Sie, Ihr eigenes Symbolbild zu verarbeiten

import sys
import cv2
import pyocr
import numpy as np
from PIL import Image
image = "test_1.png "
name = "test_1"

#original
img = cv2.imread(image)

#gray
img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
cv2.imwrite(f"1_{name}_gray.png ",img)

#goussian
img = cv2.GaussianBlur(img, (5, 5), 0)
cv2.imwrite(f"2_{name}_gaussian.png ",img)

#threshold
img = cv2.adaptiveThreshold(
    img
    , 255
    , cv2.ADAPTIVE_THRESH_GAUSSIAN_C
    , cv2.THRESH_BINARY
    , 11
    , 2
)
cv2.imwrite(f"3_{name}_threshold.png ",img)

Das Bild im Verarbeitungsprozess sieht so aus 画像処理.png

OpenCV + OCR Verarbeiten Sie das in OCR verwendete Bild mit OpenCV vor und versuchen Sie es erneut mit OCR Im Folgenden wird als Vorverarbeitung Graustufen → Schwellenwertverarbeitung → Farbinversion durchgeführt.

import sys
import cv2
import pyocr
import numpy as np
from PIL import Image
image = "test.png "
name = "test"

#original
img = cv2.imread(image)
cv2.imwrite(f"1_{name}_original.png ",img)

#gray
img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
cv2.imwrite(f"2_{name}_gray.png ",img)

#threshold
th = 140
img = cv2.threshold(
    img
    , th
    , 255
    , cv2.THRESH_BINARY
)[1]
cv2.imwrite(f"3_{name}_threshold_{th}.png ",img)

#bitwise
img = cv2.bitwise_not(img)
cv2.imwrite(f"4_{name}_bitwise.png ",img)

cv2.imwrite("target.png ",img)

tools = pyocr.get_available_tools()
if len(tools) == 0:
    print("No OCR tool found")
    sys.exit(1)
tool = tools[0]
res = tool.image_to_string(
    Image.open("target.png ")
    ,lang="eng")

print(res)

事前処理.png

Ausführungsergebnis res2.png

Es scheint, dass Sie es gut erkennen können! Diesmal ist es vorbei

Recommended Posts

[Python] Versuchen Sie, Zeichen aus Bildern mit OpenCV und pyocr zu erkennen
[Python] Umgang mit japanischen Zeichen mit openCV
Versuchen Sie, Fische mit Python + OpenCV2.4 (unvollendet) zu erkennen.
Versuchen Sie, die Bildkonvertierung mit OpenCV mit Python zu projizieren
Probieren Sie die DB-Operation mit Python aus und visualisieren Sie sie mit d3
WEB Scraping mit Python und versuchen, aus Bewertungen eine Wortwolke zu machen
Ich habe ein Programm erstellt, um Bilder mit Python und OpenCV in ASCII-Grafik umzuwandeln
Extrahieren Sie Bilder und Tabellen mit Python aus PDF, um die Berichtslast zu verringern
Konvertieren Sie Videos mit ffmpeg + python + opencv in Schwarzweiß
Leuchtendes Leben mit Python und OpenCV
Neuronales Netzwerk mit OpenCV 3 und Python 3
Versuchen Sie, Facebook mit Python zu betreiben
Poste ein Bild von Python auf Tumblr
Versuchen Sie die Gesichtserkennung mit Python + OpenCV
Laden Sie das GIF-Bild mit Python + OpenCV
Python OCR System Erhöhen Sie Zeichen aus Bildern, um die Arbeitseffizienz zu verbessern
Versuchen Sie, Shanimas-Charakterbilder mit YOLO v3 zu erkennen und zu unterscheiden
So erstellen Sie eine Überwachungskamera (Überwachungskamera) mit Opencv und Python
Versuchen Sie, mit Python3 eine Zeichenfolge aus einem Bild zu extrahieren
Extrahieren Sie Text aus [python] pdf und lesen Sie Zeichen mit Open-Jtalk vor
Versuchen Sie, Google Map und Geography Map mit Python anzuzeigen
Der schnellste Weg, um regelmäßig Kamerabilder mit Pythons OpenCV zu erhalten
Versuchen Sie, Farbfilme mit Python zu reproduzieren
Versuchen Sie, sich mit Python bei qiita anzumelden
Von Python bis zur Verwendung von MeCab (und CaboCha)
Geben Sie Farbzeichen mit Python zu hübsch aus
Fraktal zum Erstellen und Spielen mit Python
Bildaufnahme von der Kamera mit Python + OpenCV
Portieren und Ändern des Doublet-Solvers von Python2 auf Python3.
[python, openCV] base64 Gesichtserkennung in Bildern
[Python] Bilder mit OpenCV lesen (für Anfänger)
Versuchen Sie, Python von Ruby aus mit Sparsamkeit aufzurufen
Fügen Sie Bildern mit Python2.7 Gaußsches Rauschen hinzu
Importieren und Exportieren von GeoTiff-Bildern mit Python
Laden Sie Bilder mit Python auf Google Drive hoch
Füllen Sie die Zeichenfolge mit Nullen in Python und zählen Sie bestimmte Zeichen aus der Zeichenfolge
Setzen Sie Cabocha 0.68 in Windows ein und versuchen Sie, die Abhängigkeit mit Python zu analysieren
Versuchen Sie, Breiten- / Längen- und Weltkoordinaten mit Python ineinander umzuwandeln
Versuchen Sie, den Hintergrund und das sich bewegende Objekt des Videos mit OpenCV zu trennen
So fügen Sie OpenCV in Raspberry Pi ein und sammeln mit Python ganz einfach Bilder von Gesichtserkennungsergebnissen
MessagePack-Versuchen Sie, Java und Python mit RPC zu verbinden
Bildtext und Post to Slack (Python Slackbot)
Konvertieren Sie PDFs mit Python in Massenbilder
Versuchen Sie, Google Chrome mit Python und Selenium auszuführen
Versuchen Sie, das Mensch-Maschine-Diagramm mit Python zu lösen
Versuchen Sie, mit Python eine Lebenskurve zu zeichnen
So beschneiden Sie ein Bild mit Python + OpenCV
Installieren Sie OpenCV 4.0 und Python 3.7 unter Windows 10 mit Anaconda
[Python] Lesen von Daten aus CIFAR-10 und CIFAR-100
Versuche mit EV3 und PC zu kommunizieren! (MQTT)
Versuchen Sie, in Python einen "Entschlüsselungs" -Code zu erstellen
Stellen Sie OpenCV3 in Python3 zur Verfügung, das mit pyenv installiert wurde
Versuchen Sie, Python-Dokumente automatisch mit Sphinx zu generieren
Der einfachste Weg, OpenCV mit Python zu verwenden
Versuchen Sie, mit Python eine Diedergruppe zu bilden
Massen-Download-Bilder von einer bestimmten URL mit Python
Wavelet-Konvertierung von Bildern mit PyWavelets und OpenCV
Von der Python-Umgebungskonstruktion zur virtuellen Umgebungskonstruktion mit Anaconda