[Python] Essayez de reconnaître les caractères des images avec OpenCV et pyocr

introduction

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

Préparation préalable

Installation de tesseract

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 /

Installation de pyocr et OpenCV

Exécutez la commande suivante dans le terminal pour terminer

$ pip3 install pyocr
$ pip3 install opencv-python

Je vais essayer l'OCR pour le moment

Préparation de l'image

L'image de test est ci-dessous sushida_ori.png ↓ Découpage sushida_small.png

Enregistrez la version découpée sous test.png

OCR avec 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)

Résultat d'exécution res1.png Pas du tout reconnu correctement ... Après tout, il semble que le prétraitement soit nécessaire

Appuyez sur OpenCV

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 画像処理.png

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)

事前処理.png

Résultat d'exécution res2.png

Il semble que vous puissiez bien le reconnaître! Cette fois c'est fini

Recommended Posts

[Python] Essayez de reconnaître les caractères des images avec OpenCV et pyocr
[Python] Comment gérer les caractères japonais avec openCV
Essayez de détecter les poissons avec python + OpenCV2.4 (inachevé)
Essayez de projeter la conversion d'image en utilisant OpenCV avec Python
Essayez le fonctionnement de la base de données avec Python et visualisez avec d3
WEB grattage avec python et essayez de créer un nuage de mots à partir des critiques
J'ai créé un programme pour convertir des images en art ASCII avec Python et OpenCV
Extraire des images et des tableaux de pdf avec python pour réduire la charge de reporting
Convertir une vidéo en noir et blanc avec ffmpeg + python + opencv
Briller la vie avec Python et OpenCV
Réseau neuronal avec OpenCV 3 et Python 3
Essayez d'exploiter Facebook avec Python
Publier une image de Python sur Tumblr
Essayez la reconnaissance faciale avec python + OpenCV
Charger une image gif avec Python + OpenCV
Système Python OCR Augmentez les caractères des images pour améliorer l'efficacité du travail
Essayez de reconnaître et de discriminer les images de caractères Shanimas en utilisant YOLO v3
Comment créer une caméra de surveillance (caméra de sécurité) avec Opencv et Python
Essayez d'extraire une chaîne de caractères d'une image avec Python3
Extraire le texte du pdf [python] et lire les caractères à haute voix avec Open-Jtalk
Essayez d'afficher la carte google et la carte géographique avec python
Le moyen le plus rapide d'obtenir régulièrement des images de caméra avec opencv de python
Essayez de reproduire un film couleur avec Python
Essayez de vous connecter à qiita avec Python
De Python à l'utilisation de MeCab (et CaboCha)
Sortir les caractères de couleur en joli avec python
Fractal pour faire et jouer avec Python
Acquisition d'images depuis une caméra avec Python + OpenCV
Portage et modification du solveur de doublets de python2 vers python3.
[python, openCV] base64 Reconnaissance faciale dans les images
[Python] Lire des images avec OpenCV (pour les débutants)
Essayez d'appeler Python depuis Ruby avec une économie
Ajouter du bruit gaussien aux images avec python2.7
Importer et exporter des images GeoTiff avec Python
Télécharger des images sur Google Drive avec Python
Remplissez la chaîne avec des zéros en python et comptez certains caractères de la chaîne
Mettez Cabocha 0.68 dans Windows et essayez d'analyser la dépendance avec Python
Essayez de convertir les coordonnées de latitude / longitude et du monde entre elles avec python
Essayez de séparer l'arrière-plan et l'objet en mouvement de la vidéo avec OpenCV
Comment mettre OpenCV dans Raspberry Pi et collecter facilement des images des résultats de détection de visage avec Python
MessagePack-Try pour lier Java et Python avec RPC
Texte de l'image et publication sur slack (python slackbot)
Convertissez des PDF en images en masse avec Python
Essayez d'exécuter Google Chrome avec Python et Selenium
Essayez de résoudre le diagramme homme-machine avec Python
Essayez de dessiner une courbe de vie avec python
Comment recadrer une image avec Python + OpenCV
Installez OpenCV 4.0 et Python 3.7 sur Windows 10 avec Anaconda
[Python] Comment lire les données de CIFAR-10 et CIFAR-100
Essayez de communiquer avec EV3 et PC! (MQTT)
Essayez de créer un code de "décryptage" en Python
Rendre OpenCV3 disponible à partir de python3 installé avec pyenv
Essayez de générer automatiquement des documents Python avec Sphinx
Le moyen le plus simple d'utiliser OpenCV avec python
Essayez de créer un groupe de dièdre avec Python
Télécharger en masse des images à partir d'une URL spécifique avec python
Conversion en ondelettes d'images avec PyWavelets et OpenCV
De la construction d'environnement Python à la construction d'environnement virtuel avec anaconda