Essayez d'extraire une chaîne de caractères d'une image avec Python3

En premier. Qu'est-ce que l'OCR?

OCR est une technologie permettant d'extraire des chaînes de caractères à partir d'images. Il existe une technologie qui traduit l'écran lu par votre smartphone avec Google Translate. C'est l'OCR. Il extrait le texte de l'image numérisée et effectue un traitement du langage naturel.

Alors, que pouvez-vous faire avec l'OCR? Est-ce pratique pour la vie quotidienne?

Je sais que je retire du texte de l'image, mais à quoi d'autre puis-je l'utiliser? Ce sera une histoire. Par exemple, vous pouvez lire les brochures que vous avez reçues, les impressions de votre entreprise ou école et les transformer en fichiers Word. De plus, vous pouvez convertir le contenu du tableau noir ou du tableau blanc en texte sans avoir à les écrire.

Préparation préalable

・ Installation de Python3 ・ Installation de pyocr ・ Installation d'oreiller ・ Installation de tesseract OCR

L'installation de Python3 est longue, je vais donc l'omettre Puisque je suis un utilisateur Mac, je n'expliquerai que ce côté.

Pour les utilisateurs de Windows, veuillez vous référer à l'auteur du lien ci-dessous.

https://qiita.com/henjiganai/items/7a5e871f652b32b41a18

Ensuite, pour Mac.


pip install Pillow

Ou

pip3 install pillow


pip install pyocr

Ou

pip3 install pyocr


brew install tesseract


Ci-dessus. Notez qu'il peut ne pas être possible d'exécuter sans sudo devant.

Entraine toi

Seules les images png sont ciblées. Je ne connais pas la prise en charge d'autres formats.


import glob
import pyocr.builders
from PIL import Image

#Lorsque vous recevez le nom de fichier de l'image,Renvoie txt

class OCRs:

    def __init__(self):

        self.tools = pyocr.get_available_tools()
        self.tool = self.tools[0]
        self.langs = self.tool.get_available_languages()
        self.lang = self.langs[0]
        self.res = False
        print(self.tools)

        if len(self.tools) != 0:

            self.res = True

    def read(self, file_name):

        if not self.res:

            return 'error'

        else:


            txt = self.tool.image_to_string(

                Image.open(file_name),
                lang=self.lang,
                builder=pyocr.builders.TextBuilder()
            )

            return txt

Je n'aime pas le nom bricolé OCR, alors allez au contenu. Déclaration du module à utiliser en premier.

glob est un module pour obtenir le chemin dans un fichier (répertoire). pyocr est un module qui relie Python à un moteur appelé tesseract pour effectuer l'OCR en Python. PIL est un module requis pour charger des images.

Et dans init, nous avons un ensemble de choses telles que tool et lang qui ne sont utilisées qu'une seule fois (pas besoin d'appeler). Si res n'a pas de moteur OCR, il doit avoir la valeur False, et si c'est le cas, il doit avoir la valeur True.

Oui, c'est la fonction de lecture principale. Ce que nous faisons, c'est recevoir le nom du fichier comme argument, OCR (extraire la chaîne de caractères) et le renvoyer sous forme de texte.

Tout d'abord, déterminez si vous disposez d'un moteur OCR. Sinon, l'erreur de chaîne de caractères est renvoyée. Après cela, définissez l'image et la langue, etc., recevez le texte en txt, puis renvoyez-le.

Oui, passons à la fonction principale.


if __name__ == '__main__':

    cl = OCRs()
    cl.__init__()

    file_names = glob.glob('/Users/sa/Desktop/la programmation/target_folder/*')

    for file_name in file_names:
        
        if cl.read(file_name) == 'error':
            
            print('Le logiciel OCR est introuvable.')
            break
        
        else:
        
            print(cl.read(file_name))    

Nous allons jeter un coup d'oeil. Tout d'abord, affectez la classe précédente à cl, puis appelez init. Le réglage initial est terminé. Ensuite, utilisez glob pour spécifier le dossier d'image que vous souhaitez définir (OCR). J'ai un peu modifié ma structure pour les gens car il est encore difficile de manipuler le répertoire. Ne dis pas stupide? ??

#Répertoire que vous souhaitez spécifier(dossier)Mettez dedans.
filenames = glob.glob('hogehoge/*')

#Vous pouvez maintenant obtenir tous les noms de fichiers dans hogehoge.

Ensuite, à l'aide d'une instruction for répétitive, lancez tous les éléments dans la fonction précédente. Si une erreur est renvoyée, le logiciel OCR n'est pas inclus.

c'est tout. Si vous ne souhaitez spécifier qu'une seule image! !! Dans ce cas, appelez-le comme suit.

cl.read(filename)

Recommended Posts

Essayez d'extraire une chaîne de caractères d'une image avec Python3
# 5 [python3] Extraire des caractères d'une chaîne de caractères
Je souhaite extraire une URL arbitraire de la chaîne de caractères de la source html avec python
Convertir une chaîne en image
Essayez d'embellir avec Talking Head Anime à partir d'une seule image [préparation python]
J'ai essayé d'extraire le dessin au trait de l'image avec Deep Learning
[Python] Comment inverser une chaîne de caractères
Essayez de générer une image avec aliénation
[Introduction à Python] Comment fractionner une chaîne de caractères avec la fonction split
Comment extraire la chaîne de caractères souhaitée à partir d'une ligne 4 commandes
Essayez de dessiner une courbe de vie avec python
Comment recadrer une image avec Python + OpenCV
Essayez de créer un code de "décryptage" en Python
Essayez de créer un groupe de dièdre avec Python
Extraire des données d'une page Web avec Python
[Introduction à Python] Comment écrire une chaîne de caractères avec la fonction format
Utilisez BeautifulSoup pour extraire un lien contenant une chaîne d'un fichier HTML
Comment convertir / restaurer une chaîne avec [] en python
Comment récupérer des données d'image de Flickr avec Python
Faisons un outil de veille de commande avec python
[Python] Comment développer des variables dans une chaîne de caractères
De l'achat d'un ordinateur à l'exécution d'un programme sur python
Je veux diviser une chaîne de caractères avec hiragana
WEB grattage avec python et essayez de créer un nuage de mots à partir des critiques
Effectuez une recherche Twitter à partir de Python et essayez de générer des phrases avec la chaîne de Markov.
J'ai essayé de générer automatiquement la chaîne de caractères à entrer dans M. Adjustment avec Python
Comment convertir un tableau en dictionnaire avec Python [Application]
Essayez d'ouvrir une sous-fenêtre avec PyQt5 et Python
Les bases de l'apprentissage Python ~ Comment générer (afficher) une chaîne de caractères ~
Créer un message correspondant à la localisation avec la chaîne de traduction python
Extraire la valeur la plus proche d'une valeur à partir d'un élément de liste en Python
Découpez une image avec python
Essayez d'exploiter Facebook avec Python
[Débutant] Extraire des chaînes de caractères avec Python
Comment compter rapidement la fréquence d'apparition des caractères à partir d'une chaîne de caractères en Python?
Convertir en chaîne lors de la sortie de la sortie standard avec le sous-processus Python
Créer une instance d'une classe prédéfinie à partir d'une chaîne en Python
Comment transformer une chaîne en tableau ou un tableau en chaîne en Python
[Introduction à Python] Comment générer une chaîne de caractères dans une instruction Print
Essayez de créer un environnement python avec Visual Studio Code et WSL
Comment obtenir une chaîne à partir d'un argument de ligne de commande en python
[Python] J'ai créé une visionneuse d'images avec une fonction de tri simple.
[Remarque] Utilisation d'un écran LCD à 16 caractères à 2 chiffres (1602A) de Python avec Raspeye
Passer la liste de Python vers C ++ par référence dans pybind11
Essayez d'ajouter un mur à votre fichier IFC avec IfcOpenShell python
[Python] Essayez de reconnaître les caractères des images avec OpenCV et pyocr
J'ai essayé de créer une fonction de similitude d'image avec Python + OpenCV
Essayez de reproduire un film couleur avec Python
Essayez de vous connecter à qiita avec Python
mail html avec image à envoyer avec python
Créez une image factice avec Python + PIL.
J'ai fait un compteur de caractères avec Python
Acquisition d'images depuis une caméra avec Python + OpenCV
Essayez le scraping HTML avec la bibliothèque Python
Essayez d'appeler Python depuis Ruby avec une économie