![]() |
OCR-Fähiger Screenshot
Hallo zusammen,
um ein externes Programm zu steuern, muss ich ein Fenster auslesen. Da dies aus Label´s besteht, bleibt nur die Möglichkeit der OCR Auswertung. Ich hab schon mehrere Versionen versucht (Codes aus der DP und dem SwissDelphi Center) einen Screenshot als BMP herzustellen, nur leider ist die Auswertung dieser völlig daneben, obwohl die BitMaps Optisch für mich gut aussehen. Auch ein Konvertieren in JPG brachte keine Änderung. Aus einem Label "Auftrag bereits Abgerechnet" wird immer "„mag baavs'bgflcdmt“ ' Mu"... hier mal ein für den Screenshot Code von den Schweizern:
Delphi-Quellcode:
procedure ScreenShot(hWindow: HWND; bm: TBitmap);
var Left, Top, Width, Height: Word; R: TRect; dc: HDC; lpPal: PLOGPALETTE; begin {Check if valid window handle} if not IsWindow(hWindow) then Exit; {Retrieves the rectangular coordinates of the specified window} GetWindowRect(hWindow, R); Left := R.Left; Top := R.Top; Width := R.Right - R.Left; Height := R.Bottom - R.Top; bm.Width := Width; bm.Height := Height; {get the screen dc} dc := GetDc(0); if (dc = 0) then begin Exit; end; {do we have a palette device?} if (GetDeviceCaps(dc, RASTERCAPS) and RC_PALETTE = RC_PALETTE) then begin {allocate memory for a logical palette} GetMem(lpPal, SizeOf(TLOGPALETTE) + (255 * SizeOf(TPALETTEENTRY))); {zero it out to be neat} FillChar(lpPal^, SizeOf(TLOGPALETTE) + (255 * SizeOf(TPALETTEENTRY)), #0); {fill in the palette version} lpPal^.palVersion := $300; {grab the system palette entries} lpPal^.palNumEntries := GetSystemPaletteEntries(dc, 0, 256, lpPal^.palPalEntry); if (lpPal^.PalNumEntries <> 0) then begin {create the palette} bm.Palette := CreatePalette(lpPal^); end; FreeMem(lpPal, SizeOf(TLOGPALETTE) + (255 * SizeOf(TPALETTEENTRY))); end; {copy from the screen to the bitmap} BitBlt(bm.Canvas.Handle, 0, 0, Width, Height, Dc, Left, Top, SRCCOPY); {release the screen dc} ReleaseDc(0, dc); end; Derzeit versuche ich mit per Komandozeile mit Tesseract auszuwerten. Mit einem Schaltplaneditor habe ich ein paar Texte erstellt, dies dann als BMP exportiert und die Texte wurden einwandfrei ausgewertet. Also kann es theoretisch nicht an Tesseract liegen... Was kann ich noch anpassen? Gruß Torsten |
AW: OCR-Fähiger Screenshot
Kann man nicht jeden Text oder jedes Label eines anderen Windows konformen Programmes auslesen?
Ich meine, das Programm hieß Winspy. Damit hatte ich auch schon einmal verschiedene Werte ausgelesen. Wenn es Winspy kann, dann muss es auch anderweitig auszulesen sein. |
AW: OCR-Fähiger Screenshot
Kommt Dein Auswertungsprogramm mit einer 32-Bit-Bitmap zurecht?
Wenn das nicht sicher ist, könntest Du ja die Screenshot-BMP in eine 24-Bit umwandeln und dann noch mal testen. |
AW: OCR-Fähiger Screenshot
Hallo,
Für Screen-Bitmap Recognition habe ich schon DCR benutzt ( ![]() Damit kann man die benutzten Fonts trainieren und eine Texterkennung bauen. Nur sehr ähnliche Buchstaben können Probleme bereiten. Grüsse, Hans-Peter |
AW: OCR-Fähiger Screenshot
Danke schon mal für die Tips.
Zitat:
Zitat:
Zitat:
|
AW: OCR-Fähiger Screenshot
Zitat:
300 dpi 12 Punkt Schriftgröße haben, weitere Sollgrößen werden auch unter ![]() Versuche dein Bild entsprechend zu skalieren. Tesseract bzw. die verwendete Library (Leptonica ![]() Bevor Du dich an eine Implementierung mit Delphi ranmachst, kannst Du natürlich ein beliebiges Grafikprogramm nehmen und erst mal Deinen Screenshot damit Skalieren und anpassen um auf der Komandozeile auszuprobieren ob die Änderungen was bringen. cu Ha-Jö |
AW: OCR-Fähiger Screenshot
Von Abbyy gibt es auch einen Screenshot Reader. Vielleicht lässt sich dieser ja irgendwie "fernsteuern". :)
Man müsste in dem Tool nur folgende Schritte simulieren: einen Button drücken, den Mouse-Zeiger zum Startpunkt bewegen, linke Mouse-Taste drücken, Mouse-Zeiger zum Endpunkt bewegen und linke Mouse-Taste wieder loslassen. Danach erfolgt die automatische Texterkennung und das Ergebnis wird in die jeweilig gewählte Ausgabe geschoben. Button-Klick siehe: ![]() |
AW: OCR-Fähiger Screenshot
So, nach einigem Testen klappt es dann wie folgt:
Gruß Torsten |
AW: OCR-Fähiger Screenshot
Zitat:
Ich habe dazu mal Code geschrieben. Wenn man den Code der das Label kennt erzeugt ist es eventuell auch mit anderen Labelarten möglich. Screenreader hooken z.b. TextOut und ähnliche Win-API-Aufrufe. Wird sich das Programm noch ändern/wird es noch entwickelt? In was ist es geschrieben? All die Infos könnten helfen. Edit: Andererseits wenn die OCR-Methode funktioniert reicht das wohl. |
AW: OCR-Fähiger Screenshot
Eine wirklich gute Lösung für genau diesen Anwendungsfall kommt von ScreenOCR
![]() Funktioniert super, kostet nur 29USD und ist gut dokumentiert per API gewollt und sauber voll integierbar. Bei dem Preis kann ich keine Stunde versuchen es selbst zu basteln und dauzu auch nocht dokumentieren, bzw. "ewige" Foren & INet Recherche betreiben. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:58 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