Versuchen Sie, mit Python3 eine Zeichenfolge aus einem Bild zu extrahieren

Zunaechst. Was ist OCR?

OCR ist eine Technologie zum Extrahieren von Zeichenketten aus Bildern. Es gibt eine Technologie, die den von Ihrem Smartphone gelesenen Bildschirm mit Google Translate übersetzt. Das ist OCR. Es extrahiert Text aus dem gescannten Bild und führt eine Verarbeitung in natürlicher Sprache durch.

Was können Sie mit OCR tun? Ist es bequem für den Alltag?

Ich weiß, dass ich Text aus dem Bild ziehe, aber wofür kann ich ihn sonst noch verwenden? Es wird eine Geschichte sein. Sie können beispielsweise die erhaltenen Broschüren lesen, von Ihrem Unternehmen oder Ihrer Schule drucken und sie in Word-Dateien umwandeln. Sie können den Inhalt der Tafel oder des Whiteboards auch in Text konvertieren, ohne ihn aufschreiben zu müssen.

Vorbereitungen

・ Installation von Python3 ・ Installation von Pyocr ・ Installation des Kissens ・ Installation von Tesseract OCR

Die Python3-Installation ist lang, daher werde ich sie weglassen Da ich ein Mac-Benutzer bin, werde ich nur diese Seite erklären.

Für Windows-Benutzer wenden Sie sich bitte an den Autor des unten stehenden Links.

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

Dann für Mac.


pip install Pillow

Oder

pip3 install pillow


pip install pyocr

Oder

pip3 install pyocr


brew install tesseract


Oben. Beachten Sie, dass eine Ausführung ohne sudo möglicherweise nicht möglich ist.

Trainieren

Es werden nur PNG-Bilder als Ziel ausgewählt. Ich weiß nichts über die Unterstützung für andere Formate.


import glob
import pyocr.builders
from PIL import Image

#Wenn Sie den Dateinamen des Bildes erhalten,Gibt txt zurück

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

Ich mag die bastelnden Namens-OCRs nicht, also gehe zum Inhalt. Erklärung des zuerst zu verwendenden Moduls.

glob ist ein Modul zum Abrufen des Pfads in einer Datei (einem Verzeichnis). pyocr ist ein Modul, das Python mit einer Engine namens tesseract verbindet, um OCR in Python durchzuführen. PIL ist ein Modul zum Laden von Bildern.

Und in init haben wir eine Reihe von Dingen wie tool und lang, die nur einmal verwendet werden (kein Aufruf erforderlich). Wenn res keine OCR-Engine hat, sollte es den Wert False haben, und wenn ja, sollte es den Wert True haben.

Ja, es ist die Hauptlesefunktion. Wir empfangen den Dateinamen als Argument, OCR (Extrahieren der Zeichenfolge) und geben ihn als Text zurück.

Stellen Sie zunächst fest, ob Sie eine OCR-Engine haben. Wenn nicht, wird der Zeichenfolgenfehler zurückgegeben. Stellen Sie danach das Bild und die Sprache usw. ein, empfangen Sie den Text in txt und geben Sie ihn zurück.

Ja, gehen wir zur Hauptfunktion.


if __name__ == '__main__':

    cl = OCRs()
    cl.__init__()

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

    for file_name in file_names:
        
        if cl.read(file_name) == 'error':
            
            print('OCR-Software wurde nicht gefunden.')
            break
        
        else:
        
            print(cl.read(file_name))    

Lass uns einen Blick darauf werfen. Weisen Sie zuerst die vorherige Klasse cl zu und rufen Sie dann init auf. Die Grundeinstellung ist abgeschlossen. Verwenden Sie dann glob, um den Bildordner anzugeben, den Sie festlegen möchten (OCR). Ich habe meine Struktur für Leute ein wenig geändert, weil es immer noch schwierig ist, das Verzeichnis zu manipulieren. Sag nicht dumm? ??

#Verzeichnis, das Sie angeben möchten(Ordner)Einstellen.
filenames = glob.glob('hogehoge/*')

#Jetzt können Sie alle Dateinamen in hogehoge erhalten.

Dann werfen Sie mit einer sich wiederholenden for-Anweisung alle Elemente in die vorherige Funktion. Wenn ein Fehler zurückgegeben wird, ist die OCR-Software nicht enthalten.

das ist alles. Wenn Sie nur dieses eine Bild angeben möchten! !! In diesem Fall nennen Sie es wie folgt.

cl.read(filename)

Recommended Posts

Versuchen Sie, mit Python3 eine Zeichenfolge aus einem Bild zu extrahieren
# 5 [python3] Extrahiert Zeichen aus einer Zeichenfolge
Ich möchte mit Python eine beliebige URL aus der Zeichenfolge der HTML-Quelle extrahieren
Konvertieren Sie eine Zeichenfolge in ein Bild
Versuchen Sie, mit Talking Head Anime aus einem einzigen Bild zu verschönern [Python-Vorbereitung]
Ich habe versucht, die Strichzeichnung mit Deep Learning aus dem Bild zu extrahieren
[Python] So invertieren Sie eine Zeichenfolge
Versuchen Sie, ein Bild mit Entfremdung zu erzeugen
[Einführung in Python] So teilen Sie eine Zeichenfolge mit der Funktion split
So extrahieren Sie die gewünschte Zeichenfolge aus einem Befehl in Zeile 4
Versuchen Sie, mit Python eine Lebenskurve zu zeichnen
So beschneiden Sie ein Bild mit Python + OpenCV
Versuchen Sie, in Python einen "Entschlüsselungs" -Code zu erstellen
Versuchen Sie, mit Python eine Diedergruppe zu bilden
Extrahieren Sie mit Python Daten von einer Webseite
[Einführung in Python] So schreiben Sie eine Zeichenfolge mit der Formatierungsfunktion
Verwenden Sie BeautifulSoup, um einen Link mit einer Zeichenfolge aus einer HTML-Datei zu extrahieren
So konvertieren / wiederherstellen Sie einen String mit [] in Python
So kratzen Sie Bilddaten von Flickr mit Python
Lassen Sie uns ein Befehls-Standby-Tool mit Python erstellen
[Python] So erweitern Sie Variablen in einer Zeichenfolge
Vom Kauf eines Computers bis zur Ausführung eines Programms auf Python
Ich möchte eine Zeichenkette mit Hiragana teilen
WEB Scraping mit Python und versuchen, aus Bewertungen eine Wortwolke zu machen
Führen Sie eine Twitter-Suche in Python durch und versuchen Sie, Sätze mit der Markov-Kette zu generieren.
Ich habe versucht, automatisch die Zeichenfolge zu generieren, die mit Python in Mr. Adjustment eingegeben werden soll
So konvertieren Sie mit Python [Anwendung] von einem Array in ein Wörterbuch
Versuchen Sie, ein Unterfenster mit PyQt5 und Python zu öffnen
Grundlagen des Python-Lernens ~ Wie wird eine Zeichenkette ausgegeben (angezeigt)? ~
Erstellen Sie eine Nachricht, die der Lokalisierung entspricht, mit einer Python-Übersetzungszeichenfolge
Extrahieren Sie den Wert, der einem Wert am nächsten kommt, aus einem Listenelement in Python
Schneiden Sie ein Bild mit Python aus
Versuchen Sie, Facebook mit Python zu betreiben
[Anfänger] Extrahieren Sie Zeichenketten mit Python
Wie kann man schnell die Häufigkeit des Auftretens von Zeichen aus einer Zeichenfolge in Python zählen?
Konvertieren Sie in eine Zeichenfolge, während Sie die Standardausgabe mit dem Python-Unterprozess ausgeben
Erstellen Sie eine Instanz einer vordefinierten Klasse aus einer Zeichenfolge in Python
So machen Sie einen String in Python zu einem Array oder ein Array zu einem String
[Einführung in Python] So geben Sie eine Zeichenfolge in einer Print-Anweisung aus
Versuchen Sie, eine Python-Umgebung mit Visual Studio Code & WSL zu erstellen
So erhalten Sie eine Zeichenfolge aus einem Befehlszeilenargument in Python
[Python] Ich habe einen Bildbetrachter mit einer einfachen Sortierfunktion erstellt.
[Hinweis] Verwenden eines 16x2-stelligen LCD-Zeichens (1602A) von Python mit Raspeye
Übergeben Sie die Liste von Python an C ++ als Referenz in pybind11
Versuchen Sie, Ihrer IFC-Datei mit IfcOpenShell Python eine Wand hinzuzufügen
[Python] Versuchen Sie, Zeichen aus Bildern mit OpenCV und pyocr zu erkennen
Ich habe versucht, mit Python + OpenCV eine Bildähnlichkeitsfunktion zu erstellen
Versuchen Sie, Farbfilme mit Python zu reproduzieren
Versuchen Sie, sich mit Python bei qiita anzumelden
HTML-Mail mit Bild zum Senden mit Python
Erstellen Sie mit Python + PIL ein Dummy-Image.
Ich habe mit Python einen Zeichenzähler erstellt
Bildaufnahme von der Kamera mit Python + OpenCV
Versuchen Sie HTML-Scraping mit der Python-Bibliothek
Versuchen Sie, Python von Ruby aus mit Sparsamkeit aufzurufen