[PYTHON] Extrahierter Text aus dem Bild

Ich habe ein Programm geschrieben, das OCR verwendet, um Text aus PDFs und Bilddateien zu extrahieren. Die Verwendung von OCR ist nicht einfacher, da ich mit meinen Freunden über die Automatisierung der in PDF gesendeten Aufgaben spreche und den Bericht eines anderen Freundes in Word eingebe. Deshalb habe ich ein Programm mit OCR geschrieben. Ich fragte mich, ob ich es versuchen sollte.

Bewegung

  1. Wählen Sie PDF oder Bilddatei Verwenden Sie Tkinter.filedialog.askopenfilenames, um PDF- und JPG-Dateien auszuwählen. Ermöglicht die gleichzeitige Auswahl mehrerer Dateien.
  2. Konvertieren Sie PDF in Bild OCR kann nicht direkt aus PDF ausgeführt werden. Konvertieren Sie es daher einmal in ein Bild. Ich benutze Poppler und pdf2image.
  3. Extrahieren Sie Text aus dem Bild Extrahiert Text aus dem aus PDF konvertierten Bild und dem in 1 ausgewählten Bild. Verwenden Sie Tesseract und PyOCR.
  4. Ausgabe als <ausgewählter Dateiname> .txt Wenn die ausgewählte Datei hoge.jpg ist, geben Sie sie als hoge.txt aus.

Code

main.py


import os
import pyocr
import tkinter
from tkinter import filedialog
from pdf2image import convert_from_path
from PIL import Image


class UseOCR:

    def __init__(self):
        pyocr.tesseract.TESSERACT_CMD = '/usr/local/bin/tesseract'
        self.poppler_executable_path = '/usr/local/bin/'
        self.initialdir = '~/'
        self.extract_lang = 'jpn+eng'
        self.extension = [('pdf files', '*.pdf'),
                          ('jpeg file', '*.jpeg'),
                          ('jpg file', '*.jpg'),
                          ('png file', '*.png')]

    def askfilenames(self):
        root = tkinter.Tk()
        root.withdraw()
        path = filedialog.askopenfilenames(filetypes=self.extension, initialdir=self.initialdir)
        return path

    @staticmethod
    def get_fileinfo(path):
        basename = tuple(map(os.path.basename, path))
        fileinfo = dict(zip(basename, path))
        return fileinfo

    def pdf_to_image(self, pdf):
        image = convert_from_path(pdf, poppler_path=self.poppler_executable_path)
        return image

    def image_to_text(self, image):
        tool = pyocr.get_available_tools()[0]
        txt = tool.image_to_string(
            image,
            lang='jpn',
            builder=pyocr.builders.TextBuilder()
        )
        return txt


if __name__ == '__main__':
    OCR = UseOCR()
    path = OCR.askfilenames()
    fileinfo = OCR.get_fileinfo(path)
    for basename, path in fileinfo.items():
        filename, extension = os.path.splitext(basename)
        if extension == '.pdf':
            image = OCR.pdf_to_image(path)[0]
            txt = OCR.image_to_text(image)
        else:
            image = Image.open(path)
            txt = OCR.image_to_text(image)
        with open('./output/{}.txt'.format(filename), mode='w') as f:
            f.write(txt)

Erläuterung

Ich werde die Verwendung eines PDF mit den folgenden Sätzen erklären. (Dieses Bild ist eine PDF-Datei, die in JPG exportiert und zugeschnitten wurde.) hoge.jpg

Konstrukteur

#Pyocrs TESSERACT_Schreiben Sie CMD in den Tesseract-Pfad um. Ort → welcher Tesserakt
pyocr.tesseract.TESSERACT_CMD = '/usr/local/bin/tesseract'

# convert_from_path()Der Pfad des Popplers, der dem Argument von zugewiesen werden soll. Ort → welche pdfinfo
self.poppler_executable_path = '/usr/local/bin/'

#Verzeichnis beim Start von tkinter
self.initialdir = '~/'

#Zeichen zu OCR
self.extract_lang = 'jpn+eng'

#Angabe der mit tkinter auswählbaren Erweiterung
self.extension = [('pdf files', '*.pdf'),
                  ('jpeg file', '*.jpeg'),
                  ('jpg file', '*.jpg'),
                  ('png file', '*.png')]

askfilenames Gibt ein Tapple des vollständigen Pfads der von Tkinter ausgewählten Datei zurück.

>>> path = OCR.askfilenames()
>>> path
('/Users/Username/Desktop/hoge.pdf',)

get_fileinfo Wenn Sie ein Full-Path-Taple als Argument verwenden, wird ein Full-Path-Wörterbuch mit dem Dateinamen zurückgegeben.

>>> fileinfo = OCR.get_fileinfo(path)
>>> fileinfo
{'hoge.pdf': '/Users/Username/Desktop/hoge.pdf'}

pdf_to_image Wenn Sie den Pfad der PDF-Datei als Argument übergeben, wird eine Liste der PIL-Image-Objekte zurückgegeben. Da pdf2image und PyOCR von Pillow abhängig sind, ist es einfacher zu handhaben, wenn Sie ein Bildobjekt zurückgeben, anstatt es zu einer Bilddatei zu machen.

>>> for k,v in fileinfo.items():
...     image = OCR.pdf_to_image(v)
>>> image
[<PIL.PpmImagePlugin.PpmImageFile image mode=RGB size=1654x2339 at 0x10E1749E8>]

image_to_text Es ist der zentrale Prozess für die Durchführung von OCR. Wenn Sie eine Bilddatei oder ein Bildobjekt als Argument übergeben, wird OCR ausgeführt und der Text zurückgegeben.

>>> txt = OCR.image_to_text(image[0])
>>> txt
'Test Testzeichen 0123'

Recommended Posts

Extrahierter Text aus dem Bild
Laden Sie Bilder aus einer Textdatei herunter, die die URL enthält
Generieren Sie gemeinsam Bildtext
Generieren Sie aus Textdaten ein vertikales Bild eines Romans
Entfernen Sie den Rahmen aus dem Bild
Machen Sie eine Santa-Kennung aus einem Santa-Bild
Collage automatisch aus Bildliste generieren
Extrahieren Sie mit Python Text aus Bildern
Schneiden wir das Gesicht aus dem Bild
Bildverarbeitung | Vorhersage von Arten aus Bildern
Erhalten Sie Statistiken usw. aus der extrahierten Probe
Extrahieren Sie japanischen Text aus PDF mit PDFMiner
Bildaufnahme von der Kamera mit Python + OpenCV
Dokumentklassifizierung mit toch Text von PyTorch
Bildausrichtung: von SIFT bis Deep Learning
Speichern Sie das Hundebild aus der Google-Bildsuche
Fügen Sie dem Bild Linien und Text hinzu
Holen Sie sich nur den Text aus dem Django-Formular.