OpenCV (Open Source Computer Vision) ist eine Bibliothek von Programmierfunktionen, die hauptsächlich auf Echtzeit-Computer Vision abzielen. OpenCV in Python hilft beim Verarbeiten eines Bildes und beim Anwenden verschiedener Funktionen wie Bildgröße ändern, Pixelmanipulationen, Objekterkennung usw. In diesem Artikel erfahren Sie, wie Sie mithilfe von Konturen den Text in einem Bild erkennen und in einer Textdatei speichern.

Erforderliche Installationen:

pip installiere opencv-python
Pip installieren Pytesseract

Das OpenCV- Paket wird verwendet, um ein Bild zu lesen und bestimmte Bildverarbeitungstechniken auszuführen. Python-Tesseract ist ein Wrapper für die Tesseract-OCR-Engine von Google, mit der Text aus Bildern erkannt wird.

Laden Sie die tesseractausführbare Datei von diesem Link herunter .

Vorgehensweise:
Nach den erforderlichen Importen wird mit der imread Funktion opencv ein Beispielbild gelesen .



Anwenden der Bildverarbeitung für das Bild:

Der Farbraum des Bildes wird zuerst geändert und in einer Variablen gespeichert. Für die Farbkonvertierung verwenden wir die Funktion cv2.cvtColor (input_image, flag). Das zweite Parameterflag bestimmt die Art der Konvertierung. Wir können zwischen und wählen . hilft uns, ein RGB-Bild in ein Graustufenbild zu konvertieren, und wird verwendet, um ein RGB-Bild in ein HSV-Farbraumbild (Farbton, Sättigung, Wert) zu konvertieren. Hier verwenden wir . Mit der Funktion wird ein Schwellenwert auf das verdeckte Bild angewendet . cv2.COLOR_BGR2GRAY cv2.COLOR_BGR2HSV cv2.COLOR_BGR2GRAYcv2.COLOR_BGR2HSV cv2.COLOR_BGR2GRAY cv2.threshold

Es gibt 3 Arten von Schwellenwerten:

  1. Einfache Schwelle
  2. Adaptive Schwelle
  3. Otsus Binarisierung

Weitere Informationen zum Schwellenwert finden Sie unter Schwellenwerttechniken mit OpenCV .

cv2.threshold() hat 4 Parameter, wobei der erste Parameter das farbraumveränderte Bild ist, gefolgt vom minimalen Schwellenwert, dem maximalen Schwellenwert und der Art der Schwellenwertbildung, die angewendet werden muss.

So erhalten Sie eine rechteckige Struktur:

cv2.getStructuringElement()wird verwendet, um ein Strukturelement wie elliptisch, kreisförmig, rechteckig usw. zu definieren. Hier verwenden wir das rechteckige Strukturelement ( cv2.MORPH_RECT). cv2.getStructuringElement Nimmt eine zusätzliche Größe des Kernel- Parameters. Ein größerer Kernel würde größere Textblöcke zusammenfassen. Nach Auswahl des richtigen Kernels wird das Bild mit cv2.dilateFunktion erweitert. Durch die Erweiterung werden die zu erfassenden Textgruppen genauer, da ein Textblock erweitert (erweitert) wird.

Konturen finden:

cv2.findContours()wird verwendet, um Konturen im erweiterten Bild zu finden. In cv.findContours() gibt es drei Argumente: das Quellbild, den Konturabrufmodus und die Konturnäherungsmethode.
Diese Funktion gibt Konturen und Hierarchien zurück. Konturen ist eine Python-Liste aller Konturen im Bild. Jede Kontur ist ein Numpy-Array von (x, y) -Koordinaten von Grenzpunkten im Objekt. Konturen werden normalerweise verwendet, um ein weißes Objekt vor einem schwarzen Hintergrund zu finden. Alle oben genannten Bildverarbeitungstechniken werden angewendet, damit die Konturen die Begrenzungskanten der Textblöcke des Bildes erkennen können. Eine Textdatei wird im Schreibmodus geöffnet und geleert. Diese Textdatei wird geöffnet, um den Text aus der Ausgabe der OCR zu speichern.

OCR anwenden:

Durchlaufen Sie jede Kontur und nehmen Sie mit der Funktion die x- und y-Koordinaten sowie die Breite und Höhe cv2.boundingRect(). Zeichnen Sie dann mit der Funktion cv2.rectangle() ein Rechteck im Bild mit Hilfe der erhaltenen x- und y-Koordinaten sowie der Breite und Höhe. Das cv2.rectangle() enthält 5 Parameter. Der erste Parameter gibt das Eingabebild an, gefolgt von den x- und y-Koordinaten (Startkoordinaten des Rechtecks) und den Endkoordinaten des Rechtecks ​​(x + w, y +) h) die Grenzfarbe für das Rechteck im RGB-Wert und die Größe der Grenze. Schneiden Sie nun den rechteckigen Bereich zu und übergeben Sie ihn an den Tesseract, um den Text aus dem Bild zu extrahieren. Dann öffnen wir die erstellte Textdatei im Anhänge-Modus, um den erhaltenen Text anzuhängen und die Datei zu schließen.

Beispielbild für den Code:

import cv2 
import pytesseract 
  
pytesseract.pytesseract.tesseract_cmd = 'System_path_to_tesseract.exe'
  
img = cv2.imread("sample.jpg") 
  
  
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) 
  
ret, thresh1 = cv2.threshold(gray, 0, 255, cv2.THRESH_OTSU | cv2.THRESH_BINARY_INV) 
  
rect_kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (18, 18)) 
  
dilation = cv2.dilate(thresh1, rect_kernel, iterations = 1) 
  
contours, hierarchy = cv2.findContours(dilation, cv2.RETR_EXTERNAL,  
                                                 cv2.CHAIN_APPROX_NONE) 
  
im2 = img.copy() 
  
file = open("recognized.txt", "w+") 
file.write("") 
file.close() 
  
for cnt in contours: 
    x, y, w, h = cv2.boundingRect(cnt) 
      
    
    rect = cv2.rectangle(im2, (x, y), (x + w, y + h), (0, 255, 0), 2) 
      
    
    cropped = im2[y:y + h, x:x + w] 
      
    
    file = open("recognized.txt", "a") 
      
    
    text = pytesseract.image_to_string(cropped) 
      
    
    file.write(text) 
    file.write("\n") 
      
    
    file.close