OCR-Prompts zur besseren Textextraktion aus (nahezu) unleserlichen Bildern
Du kannst ein LLM wie ChatGPT mit nur einem Prompt anweisen, Text besser und gründlicher aus einem Bild zu extrahieren.
Dieser Ansatz umfasst iterative Verbesserungen und verschiedene Techniken, um den bestmöglichen Text aus einem Bild zu extrahieren. Es handelt sich eher um einen systematischen Fehlerbehebungs- und Verbesserungsprozess als um eine Chain of Thought (CoT), eine Methode zur Verbesserung des Denkprozesses, die wir typischerweise in Problemlösungs- und Entscheidungsprozessen verwenden.
OCR-Prompt zur besseren Textextraktion aus einem Bild
Kannst Du bitte das Bild sorgfältig analysieren und transkribieren? Es ist sehr schwer zu lesen und Du musst mehrere OCR-Durchläufe sorgfältig durchführen, um das perfekte Ergebnis zu erzielen, das wir suchen.
[#todo: Bild mit diesem Prompt anhängen/hochladen]
Dann wurden mehrere Optimierungen durchgeführt, um sicherzustellen, dass die Textextraktion so genau wie möglich war.
ChatGPT wendet keine Bildvorverarbeitungstechniken für OCR selbst an?
Du kannst Dein LLM explizit anweisen, Bildvorverarbeitungstechniken selbst anzuwenden, mit diesem OCR-Folgeprompt, um den Text aus Deinen Bildern besser zu extrahieren.
OCR (Optical Character Recognition) ist eine Technologie, die verwendet wird, um verschiedene Arten von Dokumenten, wie gescannte Papierdokumente, PDFs oder Bilder, die mit einer Digitalkamera aufgenommen wurden, in bearbeitbare und durchsuchbare Daten umzuwandeln. Sie funktioniert, indem sie die Formen von Zeichen in einem Bild analysiert und in maschinenlesbaren Text umwandelt.
Warum LLMs wie ChatGPT gut für OCR-bezogene Aufgaben geeignet sind
ChatGPT OCR-Prozess
Der Prozess, dem das LLM folgt, ist ein systematischer Ansatz zur Textextraktion und -verbesserung.
Hier ist eine Übersicht dessen, was GPT-4 gemacht hat:
- Erster OCR-Versuch: Führte eine grundlegende OCR auf dem Originalbild durch, um die Qualität der Textextraktion zu bewerten.
- Bildvorverarbeitung: Wendet verschiedene Bildverbesserungstechniken an, einschließlich Kontrasteinstellung, Schärfen und Konvertieren des Bildes in Graustufen und Schwarz-Weiß, um die OCR-Genauigkeit zu verbessern.
- Verschiedene OCR-Konfigurationen: Experimentierte mit benutzerdefinierten OCR-Konfigurationen, um zu sehen, ob sie bessere Ergebnisse liefern würden.
- Segmentierte OCR: Teilte das Bild in kleinere Abschnitte und führte OCR auf jedem Teil einzeln durch, um komplexe Layouts besser zu handhaben.
- Manuelle Transkription: Erkannte, dass automatisierte OCR nicht ausreichend war, und transkribierte den Text manuell für Genauigkeit.
Durchführung von OCR auf dem Bild
import pytesseract
from PIL import Image
# Bild laden
image_path = "/mnt/data/stencil.1024.png"
image = Image.open(image_path)
# OCR auf dem Bild durchführen
text = pytesseract.image_to_string(image)
print(text)
Verbesserung der OCR-Ergebnisse durch Anwendung von Bildvorverarbeitungstechniken
Bildverbesserung: Verbessert den Bildkontrast und wendet eine Schärfung an, um den Text klarer zu machen.
- Bild für bessere OCR-Ergebnisse verbessern
- OCR auf dem verarbeiteten Bild durchführen
import pytesseract
from PIL import Image, ImageEnhance, ImageFilter
# Bild laden
image_path = "/mnt/data/stencil.1024.png"
image = Image.open(image_path)
# Bild für bessere OCR-Ergebnisse verbessern
enhancer = ImageEnhance.Contrast(image)
image_enhanced = enhancer.enhance(2)
image_filtered = image_enhanced.filter(ImageFilter.SHARPEN)
# OCR auf dem verarbeiteten Bild durchführen
text = pytesseract.image_to_string(image_filtered)
print(text)
Optimierung 2: Konvertierung des Bildes in Graustufen
Graustufenkonvertierung: Konvertierte das Bild in Graustufen, um den Textextraktionsprozess zu vereinfachen.
- Bild in Graustufen konvertieren
- OCR auf dem Graustufenbild durchführen
import pytesseract
# Bild in Graustufen konvertieren
image_gray = image.convert('L')
# OCR auf dem Graustufenbild durchführen
text = pytesseract.image_to_string(image_gray)
print(text)
Optimierung 3: Konvertierung des Bildes in Schwarz-Weiß
Schwarz-Weiß-Konvertierung: Transformierte das Bild in Schwarz-Weiß, um die Textsichtbarkeit zu verbessern.
- Bild in Schwarz-Weiß für bessere OCR-Ergebnisse konvertieren
- OCR auf dem Schwarz-Weiß-Bild durchführen
# Bild in Schwarz-Weiß für bessere OCR-Ergebnisse konvertieren
image_bw = image_gray.point(lambda x: 0 if x < 128 else 255, '1')
# OCR auf dem Schwarz-Weiß-Bild durchführen
text_bw = pytesseract.image_to_string(image_bw)
print(text_bw)
Benutzerdefinierte OCR-Konfigurationen
Versuche eine andere OCR-Konfiguration, um die Ergebnisse zu verbessern
Wendete benutzerdefinierte Konfigurationen in OCR an, um die Texterkennung zu verbessern.
# Andere OCR-Konfiguration ausprobieren, um die Ergebnisse zu verbessern
custom_config = r'--oem 3 --psm 6'
text_custom = pytesseract.image_to_string(image_bw, config=custom_config)
print(text_custom)
Weitere Verbesserung mit adaptiver Schwellenwertbildung
Adaptive Schwellenwertbildung: Verwendung der adaptiven Schwellenwertbildung, um unterschiedliche Lichtverhältnisse im Bild zu bewältigen.
- In Numpy-Array für OpenCV-Verarbeitung konvertieren
- Adaptive Schwellenwertbildung anwenden
- Zurück in PIL-Bild konvertieren
- OCR auf dem Schwellenwertbild durchführen
import numpy as np
import cv2
# In Numpy-Array für OpenCV-Verarbeitung konvertieren
image_cv = np.array(image_gray)
# Adaptive Schwellenwertbildung anwenden
image_adaptive_threshold = cv2.adaptiveThreshold(image_cv, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY, 11, 2)
# Zurück in PIL-Bild konvertieren
image_pil = Image.fromarray(image_adaptive_threshold)
# OCR auf dem Schwellenwertbild durchführen
text_threshold = pytesseract.image_to_string(image_pil)
print(text_threshold)
Segmentierung: Spezifische Bereiche des Bildes extrahieren
Teilte das Bild in kleinere, besser handhabbare Abschnitte und wendete OCR individuell auf jeden Abschnitt an.
- OCR auf der linken Hälfte durchführen
- OCR auf der rechten Hälfte durchführen
# Linke Hälfte des Bildes extrahieren
left_half = image.crop((0, 0, image.width // 2, image.height))
# Rechte Hälfte des Bildes extrahieren
right_half = image.crop((image.width // 2, 0, image.width, image.height))
# OCR auf der linken Hälfte durchführen
text_left = pytesseract.image_to_string(left_half, config=custom_config)
# OCR auf der rechten Hälfte durchführen
text_right = pytesseract.image_to_string(right_half, config=custom_config)
# Texte kombinieren
text_combined = text_left + "\n" + text_right
print(text_combined)
ChatGPT wendet keine Bildvorverarbeitungstechniken für OCR selbst an?
Du könntest Dein LLM auch explizit damit beauftragen, diese Bildvorverarbeitungstechniken selbst anzuwenden, wenn es diese Techniken nicht selbst anwendet.
OCR-Folgeprompt zur besseren Textextraktion aus einem Bild
- Bildverbesserung: Verbessere den Bildkontrast und wende eine Schärfung an, um den Text klarer zu machen.
- Graustufenkonvertierung: Konvertiere das Bild in Graustufen, um den Textextraktionsprozess zu vereinfachen.
- Schwarz-Weiß-Konvertierung: Transformiere das Bild in Schwarz-Weiß, um die Textsichtbarkeit zu verbessern.
- Adaptive Schwellenwertbildung: Verwende adaptive Schwellenwertbildung, um unterschiedliche Lichtverhältnisse im Bild zu bewältigen.
- Segmentierung: Teile das Bild in kleinere, besser handhabbare Abschnitte und wende OCR individuell auf jeden Abschnitt an.
- Benutzerdefinierte OCR-Konfigurationen: Probiere und wende verschiedene benutzerdefinierte Konfigurationen in OCR an, um die Texterkennung zu verbessern.
Um die Genauigkeit Deiner Ergebnisse zu erhöhen, musst Du diese Techniken nacheinander und schrittweise anwenden, um die Texterkennung zu verbessern:
Aufgaben:
1. **Bildverbesserung**: Verbessere den Bildkontrast und wende eine Schärfung an, um den Text klarer zu machen.
2. **Graustufenkonvertierung**: Konvertiere das
Bild in Graustufen, um den Textextraktionsprozess zu vereinfachen.
3. **Schwarz-Weiß-Konvertierung**: Transformiere das Bild in Schwarz-Weiß, um die Textsichtbarkeit zu verbessern.
4. **Adaptive Schwellenwertbildung**: Verwende adaptive Schwellenwertbildung, um unterschiedliche Lichtverhältnisse im Bild zu bewältigen.
5. **Segmentierung**: Teile das Bild in kleinere, besser handhabbare Abschnitte und wende OCR individuell auf jeden Abschnitt an.
6. **Benutzerdefinierte OCR-Konfigurationen**: Probiere und wende verschiedene benutzerdefinierte Konfigurationen in OCR an, um die Texterkennung zu verbessern.
Trotz dieser Optimierungen waren die OCR-Ergebnisse aufgrund der Komplexität des Layouts und der Textqualität der getesteten Bilder oft nicht perfekt. Daher solltest Du den transkribierten Text immer manuell überprüfen, um die Genauigkeit sicherzustellen.