AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Projekte Dokument Scanner
Thema durchsuchen
Ansicht
Themen-Optionen

Dokument Scanner

Ein Thema von Dr.MAD · begonnen am 2. Apr 2010 · letzter Beitrag vom 5. Apr 2010
Antwort Antwort
Dr.MAD
Registriert seit: 16. Jan 2006
Hallo Delphi-Programmierer!



Der Dokument Scanner ist dafür geeignet unterschiedliche Dokument- bzw. Papierformate zu erkennen, zu beschneiden und abzuspeichern.

Das komplette Abbild wird ohne weitere "Scanner-Dialogabfrage" vom Scanner in ein TBitmap32 als Original übernommen.

Danach wird das Bild mit Helligkeit, Kontrast, u.a. in ein zweites TBitmap32 geflitert. In dem gefilterten Bild wird anschließend ein horizontaler und vertikaler Linienvergleich durchgeführt um den Rand des Dokumentes bzw. die Koordinaten zu lokalisieren.

Abschließend werden nun diese "Beschneidekoordinaten" dazu benutzt um das Dokument aus dem original TBitmap32 auszuschneiden. Die Filterung des Bildes wird somit nur zur Koordinatenermittlung benutzt.

Im Anhang findet Ihr eine gepackte Datei mit dem Design- und Sourcedode. Vorraussetzung ist GR32 und DelphiTwain.
Eine fertig ausführbare Datei zum Schnell-Test ist auch angehängt.

Hier schon mal die Unit im Klartext:
Luckie: Quellcode entfernt. Über 1200 zeilen müssen im Beitrag nicht sein.

Bedienungsanleitung:

Auf der linken Seite findet Ihr die Einstellungen für den Scanner. Damit kann man das Original-Bild bereits vom Scanner ordentlich erfassen. Jeder Scanner ist in der Ablichtung verschieden. Zu diesen Einstellungen gehören Helligkeit, Kontrast, Schwarz-Weiß-Schwelle (ab wann ein Pixel bei einer Kontrasterhöhung mehr zu dunkel oder zu hell gehört und somit tendenziell verstärkt wird), Auflösung (Resolution), Skalierung (Zoom) und Farbtyp. Wie bereits beschrieben dienen diese Einstellungen nur der Aufbereitung des Original-Bildes die schon vor dem scannen getroffen werden.

Ist das Abbild nun im Rechner kann es durch die Bildbearbeitung (Filterung), zu finden in der oberen mitte der Anwendung, zum Aufspühren der Kontur des Dokumentes aufbereitet werden. Meiner Erfahrung nach genügt es bereits die Helligkeit auf -10% herunter- und den Kontrast auf +30% heraufzuschieben. Es ist egal wie unschön dieses Bild jetzt erscheint es dient allein dazu um Ränder eines Blattes zu finden.

In den Controls darunter "Dokument-Erkennung" kann man einen Pixel-Einzug einstellen, ab wann der PC das Bild nach Rändern durchsuchen soll. Dies dient insbesondere dazu den Fehlerbereich am linken und rechten Rand des Bildes zu überspringen, da genau an diesen Stellen das erzeugte Licht des Scanners dunkler ist als zur Mitte hin. Die Fix-Checkboxes bedeuten, dass ab dem eingestellten Pixel-Punkt die Randerkennung fixiert bleibt. Dies dient dazu, wenn das Blatt immer mit der Kante am oberen Rand des Scanners liegt braucht genau dieser Rand nicht mehr erkannt werden.
Bsp-Einstellung: 20 Pixel links und rechts und oben auf 0 Pixel fixiert.
Die Randtoleranz bedeutet die Abweichung einer Linie in Prozent, wann ein Rand als Rand bestimmt wird.

Beschneiden und speichern sind selbsterklärend .

Das Vorschaufenster rechter Hand kann mit dem Maus-Wheel vergrößert und verkleinert werden. Dazu genügt ein Klick darauf damit das Control seinen Fokus erhält. Die Zoom-Richtung wird durch den Maus-Cursor bestimmt!

Viel Spaß beim Scannen .

Gruß

Dr. MAD

[edit=fkerber]Leerzeichen eingefügt, um Layout zu "retten". Mfg, fkerber[/edit]
[edit=Luckie]Quellcode entfernt. Mfg, Luckie[/edit]
 
daywalker9

 
Delphi XE3 Professional
 
#2
  Alt 2. Apr 2010, 17:44
Also ich erhalte direkt beim Starten deiner App die Exception " Gleitkommadivsion durch null". Wenn ich auf Ok klicke und dann die Maus über die Form bewege, bekomme ich dauernd Exceptions.
Lars
  Mit Zitat antworten Zitat
2. Apr 2010, 17:49
Dieses Thema wurde von "fkerber" von "Neuen Beitrag zur Code-Library hinzufügen" nach "Open-Source" verschoben.
Ich glaube, hier passt es besser, da es ein komplettes Programm ist.
Dr.MAD
 
#4
  Alt 3. Apr 2010, 09:39
Hallo daywalker9.

Unter welchem Betriebssystem benutzt Du die Applikation?
Matthias
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

 
Delphi 2006 Professional
 
#5
  Alt 3. Apr 2010, 09:42
Ich habe ehrlich gesagt nicht verstanden, was dein Programm macht.

Aber warum postest du hier den gesamten Quellcode? Die über 12ßß Zeilen Quellcode machen den Beitrag nicht gerade übersichtlicher. Desweiteren warum ist alles in der Form-Klasse? So was macht man nicht. Man schreibt sich dafür eine separate, unabhängige Klasse in einer separaten Unit. Und man sorgt dafür, dass die Klasse unabhängig von der Oberfläche ist. An deinem Quellcode kann man bestimmt noch viel optimieren.
Michael
  Mit Zitat antworten Zitat
Benutzerbild von Matze
Matze

 
Turbo Delphi für Win32
 
#6
  Alt 3. Apr 2010, 09:48
Ich erhalte beim Start folgende Meldungen (Win XP Prof. SP3):

Code:
---------------------------
Dokument - Scanner
---------------------------
'' ist kein gültiger Gleitkommawert.
---------------------------
OK  
---------------------------
(schon bevor das Formular sichtbar ist)

Und dann laufend AVs, wenn ich mit der Maus über die rechte, graue Fläche des Formulars fahre:

Code:
---------------------------
Dokument - Scanner
---------------------------
Zugriffsverletzung bei Adresse 004A5B56 in Modul 'Scanner.exe'. Lesen von Adresse 00000000.
---------------------------
OK  
---------------------------
Grüße, Matze

Edit: Also ähnlich dem, was daywalker9 auch sieht.
  Mit Zitat antworten Zitat
Dr.MAD
 
#7
  Alt 3. Apr 2010, 10:04
Hallo Lukie.

Du wirst keinen Quellcode finden, der nicht zu optimieren ist!
Meine Applikation ist auch nicht als Endprodukt anzusehen.

Mein Beitrag ist eher zum Kopieren einzelner Techniken oder Prozeduren gedacht.

Denke bitte an diejenigen, die noch keine Ahnung von dieser Materie haben und einen Anhaltspunkt suchen. Und dazu dient die Unit im Klartext um auch über die Suchfunktion mittels Schlüsselworten an den Beitrag zu gelangen.

Dennoch würde ich mich freuen Dir die Aufgabe zu überreichen den Quellcode so zu optimieren und das diesem Beitrag hinzuzufügen, damit die Applikation zu einem End-Verbraucher-Produkt werden kann.

Gruß

Dr.MAD
Matthias
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

 
Delphi 2006 Professional
 
#8
  Alt 3. Apr 2010, 10:15
Zitat von Dr.MAD:
Mein Beitrag ist eher zum Kopieren einzelner Techniken oder Prozeduren gedacht.
Was aber ziemlich schwer ist, da dein Quellcode mit dem Formular verknüpft ist und so ein einfaches rauskopieren kaum möglich ist.

Zitat:
Dennoch würde ich mich freuen Dir die Aufgabe zu überreichen den Quellcode so zu optimieren und das diesem Beitrag hinzuzufügen, damit die Applikation zu einem End-Verbraucher-Produkt werden kann.
Sorry, aber dazu fehlt mir im Moment die Zeit und Lust. Zumal ich immer noch nicht verstanden habe, was dein Programm eigentlich machen soll.
Michael
  Mit Zitat antworten Zitat
Dr.MAD
 
#9
  Alt 3. Apr 2010, 10:49
Hallo Matze.

Der ungültige Gleitkommawert resultiert aus der procedure InitScannerValue, wenn es sich um TWON_RANGE handelt und eben keine Zahl von DelphiTwain in Min, Max, Step oder Current übermittelt wird. Dafür habe ich aber kein Gerät zum testen.

Die "Maus-Exception" von TImgView32 ergab sich aus dem obigen Start-Prozedur-Abbruch, da der Speicher für BmpOriginal und BmpFiltered dadurch nicht reserviert wurde.

Geänderter Code ist anbei.

Gruß

Dr.MAD
Angehängte Dateien
Dateityp: rar scanner-source_352.rar (12,5 KB, 80x aufgerufen)
Dateityp: rar scanner-app_133.rar (352,0 KB, 83x aufgerufen)
Matthias
  Mit Zitat antworten Zitat
Benutzerbild von rollstuhlfahrer
rollstuhlfahrer

 
Delphi 7 Professional
 
#10
  Alt 5. Apr 2010, 19:06
HI,

wenn man bei mir den Scanner wechselt kommt folgende Meldung:
Zitat:
---------------------------
Dokument - Scanner
---------------------------
Zugriffsverletzung bei Adresse 004A2E78 in Modul 'Scanner.exe'. Lesen von Adresse 00000000.
---------------------------
OK
---------------------------
An dem Scanner scheint es nicht zu liegen, da ich mit anderen Programmen auf beiden Scannern ohne Probleme scannen kann. Es handelt sich zwar um physikalisch exakt das gleiche Gerät über den gleichen Anschluss, aber der Computer will trotzdem 2 gleiche Geräte erkennen. Macht er übrigens auch in anderen Scann-Softwaren, also nicht ein Problem des Dokumentenscanners.

Ich finde, das Programm sollte von alleine auf die Idee kommen, das aktuelle Bild etwas anders zu belichten und dann gleich den richtigen Rahmen vorgeben. Auch lässt die Benutzerführung zu wünschen übrig. Ich finde, dass die Idee, die hinter dem Programm steht, nicht schlecht ist, aber an der Umsetzung mangelt es an allen möglichen Stellen. Vielleicht ist eine Benutzerführung per Dialog nicht schlecht, also mit Weiter und Zurück-Buttons.

Es ist allerdings bei deinem Programm nicht immer leicht zu erkennen, ob die Dukomentenerkennung auch das richtige fokusiert hat, ganz einfach, weil man einfach nicht sieht, wo der rechte Rand ist. Der ist bei mir irgendwo in /dev/null, also außerhalb des Bildschirms und ich bekomme wegen der Auflösung von 1024x768 nicht mehr zu sehen als einen schmalen Streifen. Auch die TrackBar gleicht das nicht aus, da diese nichts zum verschieben findet.

Ein weiterer Punkte: Die Scansoftware meint beim Scannen: "Scan image to App product name". Das sieht nicht besonders kompetent aus. Du müsstest also bei deinem Programm in Produktname was gescheites eintragen. -> Ich seh grad, da steht schon was gescheits drin. Mal gucken, woran das liegt. (Sch*** Scantreiber. Ich könnte ihn *** [piep])

Bei Einstellungen -> Farbtyp: Was ist bitte _BW? Black&White? Das Bild kommt bei mir aber in Farbe. Du konntest für die 3 Konstanten auch schönere Namen finden.

Soviel fürs erste.

Bernhard

PS: Mach doch bitte die neusten Versionen deines Programms in den ersten Post. Dort kann man diese dann auch schnell und einfach finden. Dann reicht ein einfacher Verweis in dem "Update-Post", dass eine neue Version da ist.
Bernhard
  Mit Zitat antworten Zitat
Antwort Antwort


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 09:30 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