Quand je cherchais un article qui utilise Selenium, j'ai trouvé un article sur l'automatisation des sushis. La méthode est essentiellement la suivante ・ Continuez à saisir toutes les clés après le démarrage du jeu ・ Lorsque vous démarrez le jeu, prenez une pression et entrez la chaîne de caractères obtenue par OCR.
Cette fois, j'ai essayé un traitement d'image simple en utilisant OpenCV comme partie OCR et prétraitement
tesseract est un moteur OCR. Cette fois, je vais exécuter ce moteur OCR avec le module pyocr de python L'installation est terminée avec la commande suivante
$ brew install tesseract
Comme il n'y a pas de données de test pour le japonais tel quel, téléchargez-le à partir de l'URL suivante https://github.com/tesseract-ocr/tessdata ↑ Téléchargez jpn.traineddata depuis cette URL vers / usr / local / share / tessdata /
Exécutez la commande suivante dans le terminal pour terminer
$ pip3 install pyocr
$ pip3 install opencv-python
L'image de test est ci-dessous ↓ Découpage
Enregistrez la version découpée sous test.png
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)
Résultat d'exécution Pas du tout reconnu correctement ... Après tout, il semble que le prétraitement soit nécessaire
Je veux prétraiter avec OpenCV, mais je suis nouveau sur OpenCV donc je vais jouer avec Essayez de traiter votre propre image d'icône
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)
L'image dans le processus de traitement ressemble à ceci
OpenCV + OCR Prétraitez l'image utilisée dans l'OCR avec OpenCV et réessayez l'OCR Dans ce qui suit, l'échelle de gris → traitement du seuil → l'inversion des couleurs est effectuée en tant que prétraitement.
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)
Résultat d'exécution
Il semble que vous puissiez bien le reconnaître! Cette fois c'est fini
Recommended Posts