Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi TesseractOCR (https://www.delphipraxis.net/217405-tesseractocr.html)

Hobbycoder 24. Jun 2025 11:27

TesseractOCR
 
Nutzt jemand TesseractOCR? Und kann mir weiterhelfen?

Ich finde da diverse Quellen auf Github. Ist das noch Zeitgemäß? Welche soll man nehmen?
Ich habe auch noch https://github.com/amancini/TTesseractOCR5 gefunden. Jedoch zumindest bei mir hab ich das noch nicht vernüftig zum Laufen bekommen.
Es gibt da Unklarheiten mit den notwendigen DLL's, bzw. mit den diversen Versionen.

Gibt es da evtuell andere (free oder günstig) Möglichkeiten zur Texterkennung (in meinem Fall aus Images).

Rollo62 24. Jun 2025 12:28

AW: TesseractOCR
 
Mein Vorschlag wäre, installier Dir Pdf24, darunter gibt es Tesseract, was hervorragend funktioniert.
So musst Du nur ein einfaches Setup installieren und hast jede Menge Mehrwert plus OCR. :stupid:

Hobbycoder 24. Jun 2025 12:48

AW: TesseractOCR
 
Zitat:

Zitat von Rollo62 (Beitrag 1549662)
Mein Vorschlag wäre, installier Dir Pdf24, darunter gibt es Tesseract, was hervorragend funktioniert.
So musst Du nur ein einfaches Setup installieren und hast jede Menge Mehrwert plus OCR. :stupid:

und welche Github-Repository benutzt du?
Bei meiner schlägt's schon beim tesseract:=TTesseractOCR4.Create; in die Bresche. Und ich hab keine Ahnung was da fehlt.
Laut madExcept hier:
Delphi-Quellcode:
constructor TTesseractOCR4.Create;
begin
  if (hTesseractLib = 0) then
    raise Exception.Create('Tesseract library is not loaded');
  FTessBaseAPI := TessBaseAPICreate();                       //<----- Hier
  FPageLayout := TTesseractPageLayout.Create(FTessBaseAPI);
end;
was mich zur tesseractocr.capi bringt:
Delphi-Quellcode:
  TfnTessBaseAPICreate = function: TessBaseAPI; cdecl;
Was ja irgendein Aufruf in einer Dll sein dürfte. Doch da komm ich nicht weiter.

Hab auch die DLL's alle gelöscht und mir mal PDF24 installiert.

hanvas 24. Jun 2025 13:07

AW: TesseractOCR
 
Zitat:

Zitat von Hobbycoder (Beitrag 1549661)
Nutzt jemand TesseractOCR? Und kann mir weiterhelfen?

Ich finde da diverse Quellen auf Github. Ist das noch Zeitgemäß? Welche soll man nehmen?
Ich habe auch noch https://github.com/amancini/TTesseractOCR5 gefunden. Jedoch zumindest bei mir hab ich das noch nicht vernüftig zum Laufen bekommen.
Es gibt da Unklarheiten mit den notwendigen DLL's, bzw. mit den diversen Versionen.

Gibt es da evtuell andere (free oder günstig) Möglichkeiten zur Texterkennung (in meinem Fall aus Images).

Du musst natürlich Tesseract in der richtigen Version installiert haben. Die verschiedenen Versionen findest du als Binaries unter https://github.com/UB-Mannheim/tesseract/wiki mit dem von Dir verwendeten Bindings dementsprechend Version 5. Den Pfad zur Tesseract Installation mit der Datei libtesseract must du wahrscheinlich mit der Funktion InitTesseractLib(const aDllPath:String) in der Unit tesseractocr.capi.pas angeben.

ImageEN bzw. IEVision für ImageEn verwendet ebenfalls Tesseract, ist aber komerziell.

hth Ha-Joe

hanvas 24. Jun 2025 13:09

AW: TesseractOCR
 
Zitat:

Zitat von Hobbycoder (Beitrag 1549661)
Nutzt jemand TesseractOCR? Und kann mir weiterhelfen?

Als Alternative kannst Du auch Apache TIKA auf der Komandozeile oder als Rest Service verwenden. Apache Tika bindet intern ebenfalls Tesseract ein, kann aber auch noch eine ganze Menge mehr.

cu Ha Joe

Hobbycoder 24. Jun 2025 13:55

AW: TesseractOCR
 
Zitat:

Zitat von hanvas (Beitrag 1549664)
Du musst natürlich Tesseract in der richtigen Version installiert haben. Die verschiedenen Versionen findest du als Binaries unter https://github.com/UB-Mannheim/tesseract/wiki mit dem von Dir verwendeten Bindings dementsprechend Version 5. Den Pfad zur Tesseract Installation mit der Datei libtesseract must du wahrscheinlich mit der Funktion InitTesseractLib(const aDllPath:String) in der Unit tesseractocr.capi.pas angeben.

Das ist ja das Problem. Bei UB-Mannheim gibt's ja jede Menge Versionen. Da mein Programm 32-Bit hat benötige ich die 32-Bit-Tresseractversion. Aber in den Repositories zu den Delphiwrappern finde ich nicht wirklich einen Hinweiß, welche Version ich von UB-Mannheim denn nehmen soll. Teilweise sind die Repositories ja auch schon mehrere Jahre alt. Ich nehme auch mal an, dass sich in den Version von UB-Mannheim ja auch die DLL-Version verändern, so dass es dann zu o.g. Fehler kommen kann.

Der schöne Günther 24. Jun 2025 14:14

AW: TesseractOCR
 
Zitat:

Zitat von hanvas (Beitrag 1549665)
Apache Tika bindet intern ebenfalls Tesseract ein

Gibt es sowas fertig zum doppelklicken oder muss man sich das noch zusammenpuzzeln?

Rollo62 24. Jun 2025 17:03

AW: TesseractOCR
 
Zitat:

Zitat von Hobbycoder (Beitrag 1549663)
Zitat:

Zitat von Rollo62 (Beitrag 1549662)
Mein Vorschlag wäre, installier Dir Pdf24, darunter gibt es Tesseract, was hervorragend funktioniert.
So musst Du nur ein einfaches Setup installieren und hast jede Menge Mehrwert plus OCR. :stupid:

und welche Github-Repository benutzt du?

Ja stimmt, sorry, ich habe gerade nochmal nachgeschaut, nutze die doch nicht direkt, sondern über das PDF24-OCR.exe :oops:
Funktioniert aber super bei mir out-of-the-box, wenn es nur um das OCR'en geht.

Delphi-Quellcode:
@echo off

set path_caller=%~dp0
set par_in=%1

REM Ignore and remove the known file extension from the path
set "file_in_plain=%1"

REM Check, ob die Datei eine bekannte Endung hat
for %%E in (.pdf .jpg .png) do (
    if /i "%file_in_plain:~-4%"=="%%E" (
        set "file_in_plain=%file_in_plain:~0,-4%"
    )
)

set file_in=%file_in_plain%.pdf
set file_out=%file_in_plain%_ocred.pdf

set path_pdf24=C:\Program Files\PDF24\
set pdf24_ocr="%path_pdf24%pdf24-Ocr.exe"

echo .
echo . Input   %1
echo . Input = %file_in%
echo . Output = %file_out%
echo .
echo . OCR the %file_in% to %file_out%
echo .

pause

rem pdf24-Ocr.exe.lnk
rem "pdf24-Ocr.exe.lnk" -outputFile "sichtkopie188806433_Test001_V05_ocred.pdf" -dpi 300 -deskew -autoRotatePages "sichtkopie188806433_Test001_V05.pdf "


%pdf24_ocr% -outputFile "%path_caller%%file_out%" -dpi 300 -deskew -autoRotatePages "%path_caller%%file_in%"

Ansonsten habe ich viele Versuche mit Python tesseract eingebunden, da gibt es verschiedene Ansätze, das ist aber viel mehr gefrickel, nur um eine Datei zu OCR'en.
Die scheinen mehr oder weniger alle auf UB Mannheim Tesseract zu basieren.
https://github.com/UB-Mannheim/Tesseract

Dann würde ich aber doch lieber gleich aud Docling umsteigen
https://pypi.org/project/docling/
Das lässt Dir über Python alle Möglichkeiten, bietet aber gleichzeitig auch eine CLI als "Kommandozeile" und kann außer verschiedenen OCR noch viel viel mehr.

Hobbycoder 24. Jun 2025 21:13

AW: TesseractOCR
 
Zitat:

Zitat von Rollo62 (Beitrag 1549683)
Danke

Zwischendurch hab ich noch das hier:
https://ocr.space/OCRAPI
gefunden.
Funktioniert gut, kann jedoch in der Free-Variante keine Files > 1 MB übertragen, dazu kommt die Laufzeit, und dass sie in der Free keine 24/7-Funktionalität garantieren.
Und, auch wenn sie schreiben, dass sie nichts speichern, so möchte ich doch ungern möglicherweise mal kritische Daten durchs Internet jagen.

hanvas 25. Jun 2025 00:11

AW: TesseractOCR
 
Zitat:

Zitat von Hobbycoder (Beitrag 1549667)
Das ist ja das Problem. Bei UB-Mannheim gibt's ja jede Menge Versionen. Da mein Programm 32-Bit hat benötige ich die 32-Bit-Tresseractversion. Aber in den Repositories zu den Delphiwrappern finde ich nicht wirklich einen Hinweiß, welche Version ich von UB-Mannheim denn nehmen soll. Teilweise sind die Repositories ja auch schon mehrere Jahre alt. Ich nehme auch mal an, dass sich in den Version von UB-Mannheim ja auch die DLL-Version verändern, so dass es dann zu o.g. Fehler kommen kann.

Bei dem ersten von Dir genannten Repositary https://github.com/amancini/TTesseractOCR5 sollte eigentlich https://digi.bib.uni-mannheim.de/tes...0.20190526.exe funktionieren. Eigentlich sollte auch jede spätere Version funktionieren soweit es keine breaking changes gab, aber für die neuesten Versionen gibt es keine 32 Bit Version. Für https://github.com/r1me/TTesseractOCR4 brauchst Du die Version 4. In einem weiteren Posting hast Du geschrieben :


Zitat:

constructor TTesseractOCR4.Create;
begin
if (hTesseractLib = 0) then
raise Exception.Create('Tesseract library is not loaded');
FTessBaseAPI := TessBaseAPICreate(); //<----- Hier
FPageLayout := TTesseractPageLayout.Create(FTessBaseAPI);
end;
Was mich verwundert zurücklässt. Denn mit dem Repositary https://github.com/amancini/TTesseractOCR5 sollte es diese Constructor nicht geben bzw. er sollte TTesseractOCR5 heißen.

cu Ha-Jo

hanvas 25. Jun 2025 00:19

AW: TesseractOCR
 
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:

Zitat von Der schöne Günther (Beitrag 1549669)
Zitat:

Zitat von hanvas (Beitrag 1549665)
Apache Tika bindet intern ebenfalls Tesseract ein

Gibt es sowas fertig zum doppelklicken oder muss man sich das noch zusammenpuzzeln?

Apache Tika gibt es als Komandozeilenversion und als Rest-Server. Beides sind jar Archive, zum Ausführen brauchst Du dementsprechend JAVA. Bauen musst Du aber nichts sondern kannst es von https://tika.apache.org/download.html downloaden. Die App / Komandozeilenversion ist unter [1] zu finden, der Reest Server unter [2]. Zum Spielen mit dem rest-server habe ich ein Datenmodul (dfm und pas) angehängt, nicht dokumentiert, nicht vollständig und server url ist teilweise hartkodiert. Ist für Delphi 11 / Enterprise.

hth Ha-Joe

[1] https://dlcdn.apache.org/tika/3.2.0/tika-app-3.2.0.jar
[2] https://dlcdn.apache.org/tika/3.2.0/...dard-3.2.0.jar

Rollo62 25. Jun 2025 06:55

AW: TesseractOCR
 
Zitat:

Zitat von Hobbycoder (Beitrag 1549692)
Zwischendurch hab ich noch das hier:
https://ocr.space/OCRAPI
gefunden.

Wenn solche Cloud-Systeme auch interessant für dich sind, dann auch vielleicht das Stirling-Projekt.
https://stirlingpdf.io/?lang=de_DE
https://www.stirlingpdf.com/
https://github.com/Stirling-Tools/Stirling-PDF

Das läuft (lief) auch 100% lokal, anscheinend haben die aber was "monetarisiert" und es geht vielleicht nicht mehr so ohne weiteres.
Die Lizenzbedingungen hab ich gerade aktuell nicht gecheckt.


Und das könnte auch interessant sein
https://winstall.app/apps/UB-Mannheim.TesseractOCR
https://joefinapps.com/2024/03/13/ho...cr-in-windows/
https://joefinapps.com/2024/09/14/ho...-in-text-grab/
https://github.com/TheJoeFin/Text-Grab
https://github.com/ocrmypdf/OCRmyPDF
https://github.com/naptha/tesseract....23installation

Hobbycoder 25. Jun 2025 08:12

AW: TesseractOCR
 
Zitat:

Zitat von hanvas (Beitrag 1549693)
Was mich verwundert zurücklässt. Denn mit dem Repositary https://github.com/amancini/TTesseractOCR5 sollte es diese Constructor nicht geben bzw. er sollte TTesseractOCR5 heißen.

Zu Recht. Was aber daran lag, dass ich mit TesseractOCR5 angefangen habe, dort eben Probleme hatte, und dann das erst mal mit TesseractOCR4 probieren wollte.

Aber auch in TesseractOCR5 kam es zu diesem Fehler an dieser Stelle:
Delphi-Quellcode:
constructor TTesseractOCR5.Create(const aDllPath:String);
begin
  if (hTesseractLib = 0) then
  begin
    InitTesseractLib(aDllPath);
    if (hTesseractLib = 0) then  
      raise Exception.Create('Tesseract library is not loaded');
  end;

  if hLeptonicaLib = 0 then
  begin
    InitLeptonicaLib(aDllPath);
    if (hLeptonicaLib = 0) then  
      raise Exception.Create('Leptonica library is not loaded');
  end;
 
  FTessBaseAPI := TessBaseAPICreate(); //<-----Hier
  FPageLayout := TTesseractPageLayout.Create(FTessBaseAPI);
end;
Ich werde das jetzt noch mal mit der Version probieren, die du gepostet hast.

Hobbycoder 25. Jun 2025 12:20

AW: TesseractOCR
 
Zitat:

Zitat von hanvas (Beitrag 1549693)
Bei dem ersten von Dir genannten Repositary https://github.com/amancini/TTesseractOCR5 sollte eigentlich https://digi.bib.uni-mannheim.de/tes...0.20190526.exe funktionieren.

Ich hab das jetzt noch mal alles in die Tonne geworfen, neu runtergeladen, die verlinkte tesseract-ocr.exe aus deinem Post genommen, und schlußendlich hab ich es dann tatsächlich hinbekommen.
Möglicherweise habe ich, weil ich erst mit der TesseractOCR4 getestet habe, dann mit der TesseractOCR5, dann noch mal wieder zurück, mir irgendwo selbst ein Bein gestellt.

Soweit, so gut. An dieser Stelle erstmal: Vielen Dank für deine Hilfe.

Die Erkennungsqualität ist aber .... bescheiden. Ich hab das mal mit einem Eingescannten Fahrzeugschein getestet. Ein paar Sachen erkennt er mal, mal aber auch leider mit falschen Buchstaben, was natürlich nicht so prickelnd ist, will man sich ja auch die Daten verlassen können. Fahrgestellnummer ist mal richtig und mal falsch (Unterschiedliche Fahrzeugschein, je nach Qualität). Die Scans sind aber schon in guter Auflösung.
Wenn ich die gleichen Bilder in der Windows-Fotoanzeige öffnen, und dort gibt es ja auch eine OCR-Texterkennung, dann ist das Perfekt. Alles wird korrekt erkannt.
(Leider, zumindest nach meinem Wissensstand, gibt es für die OCR in der Windows-Fotoanzeige keine API)
Ich kann das natürlich nicht mit einem Freeware OCR vergleichen, das ist schon klar.
Aber einen Vergleich mit kommerziellen OCR-Bibliotheken hab ich leider nicht.

Hast du du (oder jemand anderes) da noch irgendwelche Tipps, wie ich bei TesseractOCR noch etwas mehr rausholen könnte? (z.B. Idealauflösung, vielleicht irgendwie Schriftarten trainieren)

Ansonsten ist das schon recht cool, keine Rakete, aber cool.

Was ich noch nicht hinbekommen habe ist den Fortschritt über OnReconizeProgressEvent.

Steku 25. Jun 2025 12:39

AW: TesseractOCR
 
Zitat:

Aber einen Vergleich mit kommerziellen OCR-Bibliotheken hab ich leider nicht.
Vielleicht kannst du ja mal die Trialversion von hier testen? https://www.winsoft.sk/frtocr.htm

Use OCR component to retrieve text from image, for example from scanned paper document.
uses Windows OCR engine and WinRT API
requires Windows 10 or newer
available for Delphi/C++Builder XE6 - 12
source code included in registered version
royalty free distribution in applications

Grüße
Steku

hanvas 25. Jun 2025 13:13

AW: TesseractOCR
 
Zitat:

Zitat von Hobbycoder (Beitrag 1549711)
Die Erkennungsqualität ist aber .... bescheiden.

Eigentlich funktioniert Tesseract recht gut, man hat aber eine gewisse Lernkurve bis man weiß, was in welcher Situation zu tun ist. Das wichtigste bei Tesseract ist die richtige Sprache und das richtige Dictionary zu verwenden. Die Doku zu Tesseract findest Du in [1], dort findest Du auch Links auf [2-4] hinter denen sich die Language-Files verstecken. Die für die Version 4 funktionieren auch mit >= 5.

Die Sprache (sofern korrekt installiert) kanst Du im Constructor angeben. Überprüfen ob die Sprache korrekt geladen ist (was der Fall ist wenn Sie richtig installiert ist) kannst Du mit IsLanguageLoaded bevor du weitermachst.

In den meisten Fällen reicht das schon aus.

Zitat:

Die Scans sind aber schon in guter Auflösung.
Tesseract verarbeitet Scans mit 300 DPI oder besser, das gilt für eine Schriftgröße von minimal 10 pt. Sind die Schriften kleiner sollte die Scanauflösung höher sein. Die Bilder sollten möglichst gerade sein. Je nach Art der zu verarbeitenden Bilder kann es etwas bringen, Tesseract anstatt mit einem Farbbild mit einem Graustufenbild und/oder Schwarzweissbild zu füttern, aber nur dann wenn das Verfahren bei dem Material besser passt oder besser ist als die intern in Tesseract eingebaute Binarisierung. Bei den von dir genannten Dokumenten (Fahrzeugschein) habe ich gute Erfahrungen mit dem Verfahren von Wolf-Jolion gemacht. Die Orginalimplementierung ist unter [5] zu finden. Aber das ist prinzipiell vom Material abhängig. Für Dokumente ist Tesseract wirklich gut, wenn es aber beispielsweise um Fotos mit Schriften geht oder um sehr verzerrte Dokumente, dann würde ich meist davon abraten oder eine entsprechende Bildbearbeitung empfehlen.

Prinzipell kann es je nach verwendeten Bildmaterial auch noch was bringen ein Denoising durch zuführen, dunkle Bereich anzugleichen etc. Aber das wird dann schon recht aufwendig.

Zitat:

Was ich noch nicht hinbekommen habe ist den Fortschritt über OnReconizeProgressEvent.
Ich kenn die von dir verwendete Komponente nicht wirklich gut (Tesseract schon) , ich verwende meine eigene Anbindung (die ich aber nicht zur Verfügung stellen kann). Da musst Du dich schon selbst reinfuchsen. Die Doku zu Tesseract und die unzähligen Posts hierzu sind sicherlich hilfreich. Wenn Du ganz spezielle Probleme hast, kannst Du Tesseract auch selbst trainieren, du kannst White und Blacklists der zu erkennenden Wörter vorgeben und vieles mehr. Das kann man alles mit Config Files konfigurieren und dementsprechend auch mit der Komponenten die Du verwendest. Aber das findest Du in der Doku.

hth Ha-Jö

[1] https://github.com/tesseract-ocr/tessdoc

[2] https://github.com/tesseract-ocr/tessdata
[3] https://github.com/tesseract-ocr/tessdata_best
[4] https://github.com/tesseract-ocr/tessdata_fast
[5] https://github.com/chriswolfvision/l...e_binarization

hanvas 25. Jun 2025 13:18

AW: TesseractOCR
 
Noch ein Nachtrag.

Ich habe die Version 5.0 in meinem Downloadlink gehabt. Normalerweise ist das Team um Tesseract sehr konsvervativ und verändert die API nicht innerhalb von zwei Versionen. Du kannst also, zusätzlich zu meinen bereits vorhandenen Tipps auch ausprobieren eine neuere Version zu installieren. Das bringt vermutlich nicht so viel, aber es kann trotzdem helfen. Für Windows 32 ist die letzte gültige Version

https://digi.bib.uni-mannheim.de/tes...0.20221214.exe

alle anderen findest Du hier https://digi.bib.uni-mannheim.de/tesseract/

Ha-Jo


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:56 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz