AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

OCR-Fähiger Screenshot

Ein Thema von Metschu · begonnen am 25. Feb 2016 · letzter Beitrag vom 29. Feb 2016
Antwort Antwort
Seite 1 von 2  1 2   
Metschu

Registriert seit: 31. Dez 2006
151 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#1

OCR-Fähiger Screenshot

  Alt 25. Feb 2016, 18:27
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
Torsten
Ich kam, sah und alles Funktionierte.
Dann klingelte mein Wecker...

Geändert von Metschu (25. Feb 2016 um 18:38 Uhr) Grund: zu früh auf absenden geklickt...
  Mit Zitat antworten Zitat
zeras

Registriert seit: 11. Mär 2007
Ort: Saalkreis
1.618 Beiträge
 
Delphi 12 Athens
 
#2

AW: OCR-Fähiger Screenshot

  Alt 25. Feb 2016, 18:54
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.
Matthias
Es ist nie falsch das Richtige zu tun!
- Mark Twain
  Mit Zitat antworten Zitat
Benutzerbild von Harry Stahl
Harry Stahl

Registriert seit: 2. Apr 2004
Ort: Bonn
2.477 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: OCR-Fähiger Screenshot

  Alt 25. Feb 2016, 18:55
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.
  Mit Zitat antworten Zitat
HPW

Registriert seit: 28. Feb 2003
160 Beiträge
 
Delphi 7 Professional
 
#4

AW: OCR-Fähiger Screenshot

  Alt 25. Feb 2016, 19:28
Hallo,

Für Screen-Bitmap Recognition habe ich schon DCR benutzt ( http://www.codeforge.com/article/225779 )
Damit kann man die benutzten Fonts trainieren und eine Texterkennung bauen.
Nur sehr ähnliche Buchstaben können Probleme bereiten.

Grüsse,

Hans-Peter
Hans-Peter
  Mit Zitat antworten Zitat
Metschu

Registriert seit: 31. Dez 2006
151 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#5

AW: OCR-Fähiger Screenshot

  Alt 25. Feb 2016, 20:28
Danke schon mal für die Tips.

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.
Nein, WinSpy erkennt auch keine Labels, das ist ja das Problem.

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.
Das brachte auch keine richtige Abhilfe. Der Ausgegebene Text war zwar anders, aber hatte auch nichts mit dem Ursprünglichen zu tun... ("mag huuvslhwldlrt lag—lm;")

Hallo,
Für Screen-Bitmap Recognition habe ich schon DCR benutzt ( http://www.codeforge.com/article/225779 )
Damit kann man die benutzten Fonts trainieren und eine Texterkennung bauen.
Nur sehr ähnliche Buchstaben können Probleme bereiten.
Muss ich mir mal in ruhe anschauen...
Torsten
Ich kam, sah und alles Funktionierte.
Dann klingelte mein Wecker...
  Mit Zitat antworten Zitat
hanvas

Registriert seit: 28. Okt 2010
157 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: OCR-Fähiger Screenshot

  Alt 26. Feb 2016, 09:12
Hallo zusammen,
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...
Tesseract neigt dazu schlechte bis unbrauchbare Ergebnisse zu liefern wenn das Eingangsbild nicht so ist wie es für Tesseract sein sollte, du solltest in etwas

300 dpi
12 Punkt Schriftgröße

haben, weitere Sollgrößen werden auch unter https://github.com/tesseract-ocr/tes...ImproveQuality genannt.

Versuche dein Bild entsprechend zu skalieren. Tesseract bzw. die verwendete Library (Leptonica http://www.leptonica.com/) unterstützt 32Bit Farbbilder allerdings wird für die Texterkennung normalerweise ein intern daraus abgeleitetes Graustufenbild oder S/W Bild verwendet. Wenn die unterschiedlichen Farben dicht beieinander liegen und gleiche oder ähnliche Helligkeitswerte produzieren dann gehen bei der Wandlung ggf. Informationen verloren. Evtl. ist es eine gute Idee die Wandlung Farbe - Graustufen oder Farbe - SW selbst vorzunehmen, weil Du dann Einfluss auf das erzeugte Bild nehmen kannst und Konvertierungsfehler ausgleichen kannst.

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ö
  Mit Zitat antworten Zitat
madas

Registriert seit: 9. Aug 2007
207 Beiträge
 
#7

AW: OCR-Fähiger Screenshot

  Alt 26. Feb 2016, 13:13
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: http://www.c-sharpcorner.com/uploadf...r-application/

Geändert von madas (26. Feb 2016 um 13:41 Uhr)
  Mit Zitat antworten Zitat
Metschu

Registriert seit: 31. Dez 2006
151 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#8

AW: OCR-Fähiger Screenshot

  Alt 27. Feb 2016, 19:35
So, nach einigem Testen klappt es dann wie folgt:
  • Schriftart in dem Auszulesenden Programm auf "OCR-B" eingestellt
  • Schriftgröße auf 14 angepasst
  • Bitmap auf Schwarz-Weiß geändert

Gruß

Torsten
Torsten
Ich kam, sah und alles Funktionierte.
Dann klingelte mein Wecker...
  Mit Zitat antworten Zitat
Benutzerbild von mael
mael

Registriert seit: 13. Jan 2005
391 Beiträge
 
Delphi XE3 Professional
 
#9

AW: OCR-Fähiger Screenshot

  Alt 28. Feb 2016, 01:27
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.
Was für eine Art Label sind es denn? Wenn es VCL TLabel sind kann man sie aus anderen Programmen mit kleinen Tricks auslesen (ReadProcessMemory).
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.
HxD, schneller Hexeditor:
http://mh-nexus.de/hxd

Geändert von mael (28. Feb 2016 um 01:30 Uhr)
  Mit Zitat antworten Zitat
mensch72

Registriert seit: 6. Feb 2008
838 Beiträge
 
#10

AW: OCR-Fähiger Screenshot

  Alt 28. Feb 2016, 11:33
Eine wirklich gute Lösung für genau diesen Anwendungsfall kommt von ScreenOCR

http://www.screenocr.com/

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.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:25 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz