Hinweise zur japanischen OCR mit Python

Ich werde die Schritte zusammenfassen, die ich unternommen habe, um japanische OCR mit Python unter Verwendung der kostenlosen OCR namens Tesseract durchzuführen.

Umgebung

Installation

Installieren Sie tesseract.

Installationsrichtlinie

Wie installiert man

  1. Installieren Sie mit apt-get
  2. Erstellen und installieren Sie von der Quelle

Es gibt zwei. Die Version, die mit apt-get von 1 installiert werden kann, ist 3.0.3. Um mit Japanisch mit Tesseract umgehen zu können, sind auf Japanisch geschulte Daten (jpn.traindata) erforderlich. Ich muss das selbst herunterladen, aber nur das im Internet gefundene ist ver3.0.4. Wenn ich versuche, diese Daten in 3.03 zu verwenden, funktioniert dies nicht und es wird folgende Fehlermeldung angezeigt:

read_params_file: parameter not found: allow_blob_division

Sie können Traindaten auch bearbeiten und in 3.0.3 verwenden, wie in Diese Person gezeigt, aber dies ist erforderlich. Der Befehl `` `combin_tessdata``` kann nicht mit apt-get-Installationen verwendet werden. Wenn Sie dies derzeit auf Japanisch tun möchten, müssen Sie es möglicherweise von der Quelle installieren.

Grundsätzlich installieren Sie tesseract 3.0.4 auf der offiziellen Seite zur Kompilierungsinstallation.

https://github.com/tesseract-ocr/tesseract/wiki/Compiling

Abhängigkeitsinstallation

$ sudo apt-get install autoconf automake libtool
$ sudo apt-get install libpng12-dev
$ sudo apt-get install libjpeg62-dev
$ sudo apt-get install libtiff4-dev
$ sudo apt-get install zlib1g-dev
$ sudo apt-get install libicu-dev      # (if you plan to make the training tools)
$ sudo apt-get install libpango1.0-dev # (if you plan to make the training tools)
$ sudo apt-get install libcairo2-dev   # (if you plan to make the training tools)

Laptonica Installation

Es scheint, dass Sie eine Bildbibliothek namens Laptonica benötigen. Laden Sie die Quelle von der Download-Seite (http://www.leptonica.org/download.html) herunter und entpacken Sie sie. Um tesseract3.0.4 zu installieren, benötigen Sie mindestens Laptonica 1.71. Installieren Sie also die neueste Version 1.7.3.

#Auftauen
gzip -dc leptonica-1.73.tar.gz |tar xvf -
cd leptonica-1.73

#wie machen
$ ./configure
$ make
$ sudo make install

Tesseract Installation

Gehen Sie grundsätzlich wie folgt vor (https://github.com/tesseract-ocr/tesseract/wiki/Compiling).

Die Quelle für 3.0.4 finden Sie unter hier.

#Entpacken, bewegen
$ unzip 3.04.zip 
$ cd tesseract-3.04

#Legen Sie es durch den Bibliothekspfad
$ export -p LD_LIBRARY=$LD_LIBRARY:/usr/local/lib

#Installation
$ ./autogen.sh
$ ./configure
$ sudo make          #Ich habe nur hier Sudo gemacht. Ich konnte Laptonica nicht finden.
$ sudo make install
$ sudo ldconfig

Erfassung und Einstellung japanischer Dateien

Laden Sie die japanische Version von jpn.traindata aus dem Sprachdatensatz unter hier herunter und platzieren Sie sie hier.

/usr/local/share/tessdata/

Und legen Sie den Pfad dieses Ordners fest.

export TESSDATA_PREFIX="/usr/local/share/tessdata/tessdata/

Funktionsprüfung

Wenn die Installation erfolgreich ist, sollten Sie OCR in der Befehlszeile ausführen können. Ich werde dieses Bild auf japanischer OCR versuchen. ocr_test.png

tesseract ocr_test.png out -l jpn

Schreibt die Ergebnisse in eine Datei namens out.txt.

out.txt


Lächeln ist das Beste!Hallo

Das kleine "ya" wird zum großen "ya", ist aber allgemein erkennbar. Ist es schwierig, weil es in anderem Englisch kein Konzept für Kleinbuchstaben gibt?

Einführung von Pyocr

Wir verwenden eine Wrapper-Bibliothek namens pyocr zur Verwendung mit Python.

Installation ist

$ pip install pyocr

Das ist es.

Es unterstützt jedoch nicht Tesseract, das von der Quelle installiert wurde, und wenn ich die folgende error.py zum Testen ausführe, funktioniert es nicht.

error.py


import pyocr
tools = pyocr.get_available_tools()
Traceback (most recent call last):
  File "error.py", line 12, in <module>
    tools = pyocr.get_available_tools()
  File "/usr/local/lib/python2.7/site-packages/pyocr/pyocr.py", line 74, in get_available_tools
    if tool.is_available():
  File "/usr/local/lib/python2.7/site-packages/pyocr/libtesseract/__init__.py", line 152, in is_available
    version = get_version()
  File "/usr/local/lib/python2.7/site-packages/pyocr/libtesseract/__init__.py", line 179, in get_version
    upd = int(version[2])
ValueError: invalid literal for int() with base 10: '02dev'

Wenn ich den Fehler lese, bin ich wütend, wenn ich versuche, die Zeichenfolge "02dev" in int zu konvertieren. Die von der Quelle installierte Version ist tesseract 3.04.02dev und scheint das Entwicklungspaket nicht anzunehmen. Also werde ich diese Quelle ändern.

Wenn Sie virtualenv verwenden, ersetzen Sie die zu ändernde Quelle entsprechend.

py:/usr/local/lib/python2.7/site-packages/pyocr/libtesseract/__init__.py


    if len(version) >= 3:
        upd = int(version[2].replace('dev', ''))
        # upd = int(version[2])

Das sollte funktionieren.

Versuchen Sie es mit OCR

Es gibt verschiedene OCR-Mechanismen, also werde ich es versuchen. Ich werde es mit diesem Bild versuchen.

mlct-14-638.jpg

Text Die einfachste OCR. Liest Zeichen aus dem Bild und gibt sie als Zeichenfolge zurück.

import pyocr
import pyocr.builders
import argparse
from PIL import Image

parser = argparse.ArgumentParser(description='tesseract ocr test')
parser.add_argument('image', help='image path')
args = parser.parse_args()

tools = pyocr.get_available_tools()

if len(tools) == 0:
    print("No OCR tool found")
    sys.exit(1)
# The tools are returned in the recommended order of usage
tool = tools[0]

res = tool.image_to_string(Image.open(args.image),
                           lang="jpn",
                           builder=pyocr.builders.TextBuilder(tesseract_layout=6))

print res

Ergebnis

Sir of Machinery Training
Tess Wota
Neben der Tür schreien
Seil
Schiffstag^~璽 蒽~Übliche Wettgeschichte ba "Mae

Das Ergebnis ist schrecklich, wahrscheinlich wegen schwieriger Worte.

WordBox

Es wird ein Feld zurückgegeben, in dem sich das Wort befindet. Lassen Sie uns das Ergebnis mit openCV visualisieren. (Installieren Sie openCV unter hier)

import pyocr
import pyocr.builders
import argparse
import cv2
from PIL import Image

parser = argparse.ArgumentParser(description='tesseract ocr test')
parser.add_argument('image', help='image path')
args = parser.parse_args()


tools = pyocr.get_available_tools()

if len(tools) == 0:
    print("No OCR tool found")
    sys.exit(1)
# The tools are returned in the recommended order of usage
tool = tools[0]


res = tool.image_to_string(Image.open(args.image),
                           lang="jpn",
                           builder=pyocr.builders.WordBoxBuilder(tesseract_layout=6))

# draw result 
out = cv2.imread(args.image)
for d in res:
    print d.content
    print d.position
    cv2.rectangle(out, d.position[0], d.position[1], (0, 0, 255), 2)

cv2.imshow('image',out)
cv2.waitKey(0)
cv2.destroyAllWindows()

Screenshot from 2016-07-20 15:12:12.png

Sir of Machinery Training
((226, 12), (412, 37))
Tess
((255, 138), (278, 148))
Wota
((283, 137), (326, 148))
Tür
((397, 149), (406, 159))
Nebenan schreien
((411, 149), (430, 159))
Historisches Training
((477, 148), (523, 159))
Seil
((165, 170), (199, 181))
Schiffstag
((115, 202), (156, 212))
^~璽 蒽~
((210, 196), (247, 220))
Übliche Wetthistorie
((297, 202), (343, 213))
Ba "Mae
((390, 203), (438, 212))

Die Gegend ist anständig, aber die erkannten Wörter sind immer noch schrecklich.

LineBox WordBox war Wort für Wort, aber LineBox scheint Wörter in derselben Zeile zu gruppieren.

Ich werde nur einen Teil der WordBox-Quelle ändern Wechseln Sie einfach von WordBoxBuilder zu LineBoxBuilder.

res = tool.image_to_string(Image.open(args.image),
                           lang="jpn",
                           builder=pyocr.builders.LineBoxBuilder(tesseract_layout=6))


Ergebnis Screenshot from 2016-07-20 15:34:57.png

Sir of Machinery Training
((226, 12), (412, 37))
Tess Wota
((255, 137), (326, 148))
Neben der Tür schreien
((397, 148), (523, 159))
Seil
((165, 170), (199, 181))
Schiffstag^~璽 蒽~Übliche Wettgeschichte ba "Mae
((115, 196), (438, 220))

Dieses Bild muss nicht in derselben Zeile stehen, scheint jedoch für mehrzeilige Sätze nützlich zu sein.

Über tesseract_layout

Für jeden Builder ist `` `tesseract_layout = 6``` War eingestellt. Diese Nummer scheint die Richtlinie für die Durchführung von OCR für das Image festzulegen.

Diese Person hat zusammengestellt. http://tanaken-log.blogspot.jp/2012/08/imagemagick-tesseract.html

pagesegmode values are:
0 = Orientation and script detection (OSD) only.
1 = Automatic page segmentation with OSD.
2 = Automatic page segmentation, but no OSD, or OCR
3 = Fully automatic page segmentation, but no OSD. (Default)
4 = Assume a single column of text of variable sizes.
5 = Assume a single uniform block of vertically aligned text.
6 = Assume a single uniform block of text.
7 = Treat the image as a single text line.
8 = Treat the image as a single word.
9 = Treat the image as a single word in a circle.
10 = Treat the image as a single character.

Über Trainingsdaten

Wie Sie sehen können, ist die Genauigkeit bei Verwendung der vorhandenen japanischen Daten nicht gut. Wenn Sie die Trainingsdaten selbst erstellen, sind sie anständiger.

http://hadashi-gensan.hatenablog.com/entry/2014/01/15/135316

Bonus Google Cloud Vision

Wenn Sie TEXT_DETECT der Google Cloud Vision-API verwenden, sieht dies folgendermaßen aus.

Screenshot from 2016-07-21 11:28:43.png

Maschine
Lernen
von
fließen
Prüfung
Daten
Vorläufig
Messung
Schiff
Lernen
Ergebnis
Bisherige
wird bearbeitet
Lehrer
Daten
Roh
Daten
Maschine
Lernen
Parameter
L
Grund
A

Immerhin ist die Genauigkeit gut. Wenn Sie es einfach verarbeiten möchten, ohne so viele Anforderungen zu stellen, sollten Sie die Vision-API verwenden.

Recommended Posts

Hinweise zur japanischen OCR mit Python
Hinweise zur Verwendung von rstrip mit Python.
Senden Sie japanische Post mit Python3
Hinweise zur HDR- und RAW-Bildverarbeitung mit Python
[Python] Hinweise zur Datenanalyse
Hinweise zur Installation von Python auf Ihrem Mac
Japanische morphologische Analyse mit Python
Hinweise zur Installation von Python unter CentOS
OpenJTalk unter Windows 10 (Sprechen Sie Japanisch mit Python aus der Umgebungskonstruktion)
Hinweise zum Importieren von Daten aus MySQL oder CSV mit Python
Hinweise zum Umgang mit großen Datenmengen mit Python + Pandas
Hinweise zum Bereitstellen von pyenv mit Homebrew und zum Verwalten von Python-Versionen
Hinweise zu Python- und Wörterbuchtypen
Hinweise zur Paketverwaltung mit conda
Hinweise zur Verwendung von MeCab aus Python
Zeichne Japanisch mit matplotlib auf Ubuntu
Hinweise zur Installation von Python mit PyEnv
Hinweise zum Zugriff auf dashDB über Python
Sprechen Sie japanischen Text mit OpenJTalk + Python
Erste Schritte mit Python 3.8 unter Windows
[Memo] Tweet auf Twitter mit Python
Japanische Dateiaufzählung mit Python2-System unter Windows (Gegenmaßnahme gegen 5C-Probleme)
Hinweise zur Verwendung von OpenCV mit Windows 10 Python 3.8.3.
Führen Sie das Servo mit Python unter ESP32 (Windows) aus.
Hinweise zur Python-Grammatik für maschinelles Lernen in PyQ
Hinweise zum Ausführen von M5Stick V mit uPyLoader
Anmerkung von nfc.ContactlessFrontend () von nfcpy von Python
Generieren Sie japanische Testdaten mit Python faker
Ein Memo mit Python2.7 und Python3 in CentOS
Kartenmietinformationen auf einer Karte mit Python
Laden Sie japanische Aktienkursdaten mit Python herunter
Verfolgen Sie aktive Anwendungen auf einem Mac mit Python
[C] [Python] Lesen mit AquesTalk unter Linux
Hinweise zum Erstellen von Python und Pyenv auf dem Mac
So zeigen Sie Python-Japanisch mit Lolipop an
Laden Sie mit Python Dateien im Web herunter
Erstellen Sie eine Python-Umgebung mit Anaconda auf einem Mac
[Python] Lassen Sie uns matplotlib mit Japanisch kompatibel machen
Wie man mit Python-Flüchen Japanisch eingibt
[Python] Japanische Lokalisierung von matplotlib unter Ubuntu
PIL mit Python 3.x unter macOS installieren
Lesen von Zeichen in Bildern mit Python OCR
Arbeiten mit GPS in Python für Raspberry Pi 3
Lesen Sie die Datei mit Python und löschen Sie die Zeilenumbrüche [Hinweise zum Lesen der Datei]
Erste Schritte mit Python mit 100 Klopfen bei der Sprachverarbeitung
Python-Scraping-Memo
FizzBuzz in Python3
Discord Bot Himbeere Pi Null mit Python [Hinweis]
Scraping mit Python
Python lernen note_000
Statistik mit Python
Strategie zur Monetarisierung mit Python Java
Erstellen Sie eine Python-Umgebung mit pyenv auf EC2 (Ubuntu)
Python unter Windows
Probieren Sie es mit Word Cloud Japanese Python JupyterLab.
Twitter mit Python3
Scraping mit Python
Anmerkungen zu mit
Python mit Go