Verwenden Sie OCR, um Text aus einem Bild in OpenCV zu extrahieren

Salman Mehmood 10 Oktober 2023
Verwenden Sie OCR, um Text aus einem Bild in OpenCV zu extrahieren

Dieser Artikel behandelt alles, was Sie für den Einstieg in die optische Zeichenerkennung, auch OCR genannt, benötigen. Sie lernen, wie Sie Text aus Bildern extrahieren und den extrahierten Text auf einem Bild in OpenCV visualisieren.

Verwenden Sie OCR mit der EasyOCR-Bibliothek, um Text aus einem Bild in OpenCV zu extrahieren

In diesem Artikel gibt es vier wichtige Dinge, die wir tun müssen:

  • Wir müssen unsere Abhängigkeiten installieren und importieren.
  • Dann müssen wir unsere Bilder oder Videos lesen.
  • Als nächstes werden wir unsere Ergebnisse zeichnen.
  • Schließlich werden wir OpenCV verwenden, um zu sehen, wie wir Bilder mit mehreren Textzeilen handhaben und visualisieren können.

Die optische Zeichenerkennung, auch OCR genannt, erkennt Text in Bildern. Es wandelt handschriftlichen oder gedruckten Text in ein maschinenlesbares Format um.

Viele Branchen verwenden OCR-Technologie für die Automatisierung von Bankgeschäften; Man kann OCR verwenden, um handschriftliche Schecks zu verarbeiten. Eine weitere wichtige Anwendung von OCR ist das Extrahieren von Informationen aus handschriftlichen Dokumenten.

Wir werden die EasyOCR-Bibliothek verwenden, um OCR zu verwenden, die von der PyTorch-Bibliothek unterstützt wird. Diese Bibliothek erleichtert das Durchlaufen und Ausführen der optischen Zeichenerkennung für ein Bild oder Dokument.

Beginnen wir mit der Installation und importieren unsere Abhängigkeiten. Die erste Abhängigkeit, die wir installieren müssen, ist PyTorch, da EasyOCR auf PyTorch läuft.

Es hängt davon ab, welche Art von Betriebssystem der Benutzer ausführt und eine GPU verwendet oder nicht. Die Installation kann etwas anders sein, aber das Gute ist, dass, wenn der Benutzer zu python.org geht, automatisch die beste Art der Installationsmethode für den Benutzer ausgewählt wird.

Führen Sie diesen Befehl aus, um das EasyOCR-Paket zu installieren:

pip install easyocr

Jetzt können wir die Abhängigkeiten verwenden.

import easyocr
import cv2
import matplotlib.pyplot as plot
import numpy as np

Jetzt müssen wir unsere Bilder lesen. Wir fügen eine Variable ein, um diesen Bildpfad zu speichern, und als Nächstes verwenden wir EasyOCR, um diese optische Zeichenerkennung durchzuführen.

Wir haben die Klasse easyocr.Reader() definiert und die Sprache, die wir verwenden wollten, an diese übergeben. Wenn wir keine GPU verwenden, setzen wir den Parameter gpu gleich False.

In der nächsten Zeile haben wir die Methode reader.readtext() definiert und unseren Bildpfad übergeben.

IMG_P = "sign.png"
reader = easyocr.Reader(["en"])
RST = reader.readtext(IMG_P)
RST

Das Ergebnis kommt mit ein paar verschiedenen Dingen zurück, wenn wir diesen Code ausführen.

opencv ocr-Ausgabe 1

Wir haben ein Array, in dem sich der Text in unserem Bild befindet, und wir können dies besser sehen, wenn wir es visualisieren. Der zweite Teil ist der identifizierte Text, und der letzte ist das Vertrauen.

Lassen Sie uns das Ergebnis visualisieren, und dazu müssen wir ein paar Schlüsselvariablen definieren, um zu identifizieren, wo unsere verschiedenen Koordinaten sind. Wir erhalten die Werte für die obere linke Ecke und die untere rechte Ecke, um die Koordinaten zu erhalten und zu definieren.

Wir werden Indizes aus dem Array definieren, um die Komponentenwerte zu erfassen und sie in ein Tupel umzuwandeln, da es bei der Übergabe an OpenCV ein Tupel als Argument erwartet.

Wir werden ähnlich vorgehen, um unten rechts und den Text zu greifen, aber wir müssen den Text nicht in ein Tupel umwandeln.

T_LEFT = tuple(RST[0][0][0])
B_RIGHT = tuple(RST[0][0][2])
text = RST[0][1]
font = cv2.FONT_HERSHEY_SIMPLEX

Jetzt haben wir die Methode imread() verwendet, um unser Bild zu lesen, und in der nächsten Zeile haben wir das Rechteck, das die Komponente ist, überlagert, und dann haben wir unseren Text überlagert, um unser Rechteck zu zeichnen.

Die Methode rectangle() nimmt den ersten Parameter als Bild. Der nächste Parameter, den wir übergeben haben, ist die Koordinate T_LEFT, und der nächste ist die Koordinate B_RIGHT.

Der nächste übergebene Parameter ist ein Tupel und folgt einer hellgrünen Farbe. Wir haben auch die Rechteckdicke bestanden.

Wir haben den Text mit der Methode putText() visualisiert, die mehrere Parameter akzeptiert. Die erste ist eine Bildkoordinate, an der wir die Position des extrahierten Textes, den Schriftstil und die Schriftgröße festlegen möchten, und die nächste besteht aus Farbe, Dicke und Linienstil.

import easyocr
import cv2
import matplotlib.pyplot as plot
import numpy as np

IMG_P = "surf.jpeg"
reader = easyocr.Reader(["en"])
RST = reader.readtext(IMG_P)
RST

T_LEFT = tuple(RST[0][0][0])
B_RIGHT = tuple(RST[0][0][2])
text = RST[0][1]
font = cv2.FONT_HERSHEY_SIMPLEX

IMG = cv2.imread("surf.jpeg")
IMG = cv2.rectangle(IMG, T_LEFT, B_RIGHT, (0, 255, 0), 3)
IMG = cv2.putText(IMG, text, T_LEFT, font, 0.5, (255, 255, 255), 2, cv2.LINE_AA)
plot.imshow(IMG)
plot.show()

Wir können sehen, dass ein Kästchen um den Text gezeichnet ist, und die Brandung erscheint innerhalb des Rechtecks.

opencv ocr-Ausgabe 2

Mal sehen, wie wir damit umgehen, wenn wir ein Bild mit mehreren Textzeilen haben. Es ist ziemlich dasselbe; Das einzige, was sich geändert hat, ist, wenn wir die Ergebnisse drucken, sehen wir mehrere verschiedene Zeilen.

Daher müssen wir eine Schleife durchlaufen, um jede Erkennung einzeln zu visualisieren und darzustellen.

import easyocr
import cv2
import matplotlib.pyplot as plot
import numpy as np

IMG_P = "sign.png"

reader = easyocr.Reader(["en"])
RST = reader.readtext(IMG_P)
RST

font = cv2.FONT_HERSHEY_SIMPLEX

IMG = cv2.imread(IMG_P)
spacer = 100
for detection in RST:
    T_LEFT = tuple(detection[0][0])
    B_RIGHT = tuple(detection[0][2])
    TEXT = detection[1]
    IMG = cv2.rectangle(IMG, T_LEFT, B_RIGHT, (0, 255, 0), 3)
    IMG = cv2.putText(IMG, TEXT, (20, spacer), font, 0.5, (0, 255, 0), 2, cv2.LINE_AA)
    spacer += 15

plot.imshow(IMG)
plot.show()

Ausgabe:

opencv ocr-Ausgabe 3

Salman Mehmood avatar Salman Mehmood avatar

Hello! I am Salman Bin Mehmood(Baum), a software developer and I help organizations, address complex problems. My expertise lies within back-end, data science and machine learning. I am a lifelong learner, currently working on metaverse, and enrolled in a course building an AI application with python. I love solving problems and developing bug-free software for people. I write content related to python and hot Technologies.

LinkedIn

Verwandter Artikel - Python OpenCV