Mafio
Anmeldungsdatum: 28. März 2010
Beiträge: Zähle...
|
Da ich für meine Buchführung und für viele andere Dinge häufig Sachen einscanne die nicht immer ein schönes A4 Format haben sondern auch manchmal Quittungen, Bücher u.ä. und ich außerdem ungerne warte bis der Scanner endlich fertig gescannt hat, wollte ich mir selber etwas zusammen basteln:
Eine an den Computer angeschlossene Webcam die über eine kleine Holzkonstruktion ein weißes Feld im Fokus hat auf das ich z.B. eine Quittung legen kann. Dann klicke ich auf einen Button und ein Programm macht damit was ich gerne möchte.
Das Prinzip ist ähnlich dem der Kammerascanner die man für > 500€ kaufen kann... nur will ich nicht so viel dafür ausgeben. Was ich jetzt wissen möchte ist: Wie kann ich das softwaretechnisch in Java realisieren bzw. welche Libraries oder Frameworks gibt es für so etwas die ich verwenden könnte. Was ich grundsätzlich machen möchte ist eine function die ein Bild von der Kamera captured (was ich mit dem Java Media Framework (soweit ich das bisher gesehen habe) auch realisieren könnte) und dieses Bild dann mit irgendwelchen Befehlen so bearbeitet wie man es von Scans gewohnt ist z.B. bild.clean(); bild.rezize(); oder zum abschneiden der Ränder bei Scans bild.cut(); bzw. dann zum drehen in die richtige Richtung bild.turn();...
Das es da schon irgendetwas Vorgefertigtes (Programmcode nicht Programm) geben muss halte ich für recht gewiss, da ja mittlerweile jeder Aldi Scanner ein eigenes Programm zum Scannen und grundlegendem Bearbeiten hat... ich hab jedoch noch nichts gefunden. Zu dem Thema auch noch die Frage welche Webcam dafür am besten geeignet wäre... Die Frage stelle ich allerdings bewusst auch hier in die Programmieren Kategorie und nicht in die Hardware, da es mir dabei um folgendes geht: Webcams die nur Bilder machen finde ich kaum noch, in der regel werden damit ja Filme gemacht. Die meisten haben aber auch Standbildfunktionen und geben dort eigentlich recht hohe MP Werte an... Die Frage ist jedoch, da die Werte sich meist auf interpolierte Bilder beziehen, inwiefern man auch in Java sowas realisieren könnte, da ich ja mal nicht davon ausgehe, dass die Standbilder Hardwareseitig interpoliert werden.
Meine Vorstellung ist da aktuell so: Videoauflösung = Kameraauflösung → Mehrere Bilder (kurze Filmsequenz) → Berechnung eines guten Bildes aus den vielen schlechteren... Sollte das in Wirklichkeit anders sein bitte ich um Aufklärung, ist nämlich nur eine Vermutung. 😉
|
Solo0815
Anmeldungsdatum: 7. Juni 2006
Beiträge: 402
Wohnort: KC
|
Ne webcam hat mMn eine zu geringe Auflösung. Besser fände ich ne alte Digicam mit Eye.fi-SD-Karte. Ein Problem wird allerdings die Ansteuerung der Cam über ein Programm.
|
Mafio
(Themenstarter)
Anmeldungsdatum: 28. März 2010
Beiträge: 81
|
Genau, deshalb habe ich auch erstmal keine Digitalkamera nutzen wollen...
Aber wenn ich bei regulären Webcams schon MP Zahlen von bis zu 10 MP zu hören bekomme, sollte das doch machbar sein... oder?
|
Kinch
Anmeldungsdatum: 6. Oktober 2007
Beiträge: 1261
|
Mir ist ehrlich gesagt, nicht so ganz klar, was das Java-Programm konkret tun soll.
bild.clean(); bild.rezize(); oder zum abschneiden der Ränder bei Scans bild.cut()
Sollen das automatische Prozesse sein? Was genau soll bild.clean() und bild.resize() machen? Ein automatische Gropping, also etwas, was den Hintergrund vom Dokument unterscheidet und das Bild zurecht schneidet, sollte nicht so schwer sein. Es ist fraglich, ob es dazu nicht schon fertige Programme gibt; gleiches gilt für die Detektion der Schräglage, des Dokumentes.
Videoauflösung = Kameraauflösung → Mehrere Bilder (kurze Filmsequenz) → Berechnung eines guten Bildes aus den vielen schlechteren..
Was für eine Art der Varianz erwartest du denn zwischen den verschiedenen Einzelbildern? Wenn Beleuchtung, Kamera-Position, Dokument-Position etc pp immer gleich bleibt, unterscheiden sich die Bilder nur im Rauschen. Das dürfte bei ausreichender Beleuchtung ohnehin gering sein. Ehrlich gesagt, mir leuchtet dein Ansatz nicht so ein. Eine Art Stativ mit Kamera oder Webcam, würde reichen. Ob du bei der Kamera auf einen Knopf drückst oder auf dem Computer erscheint mir relativ unwichtig. Die Dateien danach Nachbearbeiten mit dezidierten Programmen; würde mich wundern wenn Image-Magick zum Beispiel da nicht schon alles mitliefert um den Hintergrund etc pp abzuschneiden. Fertig.
|
Mafio
(Themenstarter)
Anmeldungsdatum: 28. März 2010
Beiträge: 81
|
Mir ist ehrlich gesagt, nicht so ganz klar, was das Java-Programm konkret tun soll.
Ob das Programm jetzt auf eine lib zugreift, ein Framework nutzt oder es ein Programm ausführt was irgendeine Schnittstelle für Java bietet (sei es von mir aus auch einfach die Konsole), ist eigentlich egal, ich möchte nur die Möglichkeit haben ein Bild was ich in meinem Java Programm habe durch eine Blackbox schicken zu können und am Ende ein Bild wieder zubekommen, welches die Schräglage korrigiert hat, ggf. Pünktchen oder Bildfehler oder sonstnochwas korrigiert hat, und verwendbar für andere Dinge ist... Da ich mich nicht wirklich mit Bildverbesserung von Scans auskenne, außer wenn ich es selber mit Gimp/Photoshop mache, weiß ich auch nicht welche Funktionen ich jetzt genau ausführen muss um ein gutes Bild zu erhalten. Aber da gibt es wie gesagt Programme/Mods/Plugins/Irgendwas für was automatisch Farbanpassungen vornimmt und all die ganzen Sachen an die ich hier gar nicht denke....
Was für eine Art der Varianz erwartest du denn zwischen den verschiedenen Einzelbildern?
Wie gesagt, ich rate hier vollkommen ins blaue hinein, und was ich mir dabei gedacht habe war, dass ich halt mehrfach verschiedenes Rauschen habe, und dieses dann entfernen kann... Aber wie gesagt: Keine Ahnung. Mich würde es auch gewiss interessieren wie sich die Standbildauflösung einer Webcam von der Videoauflösung unterscheidet außer das die erste aus mysteryousen Gründen größer ist :#*1)?!
Ob du bei der Kamera auf einen Knopf drückst oder auf dem Computer erscheint mir relativ unwichtig. Die Dateien danach Nachbearbeiten mit dezidierten Programmen
Ist es aber nicht. Ich plane das ganze etwas anders. Eher in Form von: Ich habe einen Server und eine weiße Platte im Schrank; Ich lege was auf die Platte und bekomme dann auf zauberhafte Weise eine mit dem bearbeiteten Scan 😛 "muhaha" ...
|
Kinch
Anmeldungsdatum: 6. Oktober 2007
Beiträge: 1261
|
Mafio Da ich mich nicht wirklich mit Bildverbesserung von Scans auskenne, außer wenn ich es selber mit Gimp/Photoshop mache, weiß ich auch nicht welche Funktionen ich jetzt genau ausführen muss um ein gutes Bild zu erhalten. Aber da gibt es wie gesagt Programme/Mods/Plugins/Irgendwas für was automatisch Farbanpassungen vornimmt und all die ganzen Sachen an die ich hier gar nicht denke....
Ja, darüber solltest du dir erstmal im Klaren werden. Ob man jetzt zum Beispiel Farbanpassungen für Dokumentenscans braucht, würde ich bezweifeln. Je nach Dokumenten-Typ wäre es am sinnvollsten das eh nur als Graustufen-Bild zu speichern. Was du imho mindestens brauchst: Crop-Detection, dass den Hindergrund des Bild herausschneidet und Skew-Detection, dass das Bald horizontal und vertikal ausrichtet. Aber imho braucht man dafür kein Java-Programm zu schreiben. Ich halte dich davon natürlich nicht ab, wenn du das so machen willst. Du musst dann halt schauen, welche Bild-Verarbeitungs-Bibliotheken für Java verfügbar sind. Wie gesagt, ich rate hier vollkommen ins blaue hinein, und was ich mir dabei gedacht habe war, dass ich halt mehrfach verschiedenes Rauschen habe, und dieses dann entfernen kann...
Bei ausreichender Beleuchtung, ist Rauschen praktisch kein Problem. Wenn für dich Rauschen ein Problem ist: Das bekommst du durch Mittelwert-Bildung von mehreren Bildern weg.
Aber wie gesagt: Keine Ahnung. Mich würde es auch gewiss interessieren wie sich die Standbildauflösung einer Webcam von der Videoauflösung unterscheidet außer das die erste aus mysteryousen Gründen größer ist :#*1)?!
Für Videos müssen mindestens 24 Bilder pro Sekunde gemacht werden, damit sie flüssig sind. Das führt zu einigen Problemen, wie etwa die Anzahl an Sensor-Daten die die Kamera pro Sekunde verarbeiten muss, oder auch die Anzahl an Photonen die pro Sensorzelle auftritt ist limitiert. Deshalb muss meistens die Auflösung niedriger sein.
|
Mafio
(Themenstarter)
Anmeldungsdatum: 28. März 2010
Beiträge: 81
|
Was du imho mindestens brauchst: Crop-Detection, dass den Hindergrund des Bild herausschneidet und Skew-Detection, dass das Bald horizontal und vertikal ausrichtet. Aber imho braucht man dafür kein Java-Programm zu schreiben. Ich halte dich davon natürlich nicht ab, wenn du das so machen willst. Du musst dann halt schauen, welche Bild-Verarbeitungs-Bibliotheken für Java verfügbar sind.
Danke sehr, das hilft mir schon mal weiter... obwohl die eigentliche Frage war: Welche Bild-Verarbeitungs-Bibliotheken für Java liefern mir die Werkzeuge um das zu machen was du jetzt auch noch mal mit Fachwörtern beschrieben hast ☺
Das man dafür nicht unbedingt ein eigenes Programm benötigt ist klar, aber ich arbeite hier an einem viel größeren Verwaltungsprogramm und möchte diese Funktion ebenfalls implementieren (und nicht irgend ein anderes Programm dafür aufrufen müssen)...
|
Frank62
Anmeldungsdatum: 8. Dezember 2008
Beiträge: 2107
Wohnort: Borken
|
Solo0815 schrieb: Besser fände ich ne alte Digicam mit Eye.fi-SD-Karte. Ein Problem wird allerdings die Ansteuerung der Cam über ein Programm.
und wie kommen die Bilder auf den Linux Rechner ? es gibt da nur windows und Android Software da für.....
Ich gehe derzeit den Umweg über mein Htc Desire, was als Davlaufwerk eingebunden ist bei mir zuhause.
|
Mafio
(Themenstarter)
Anmeldungsdatum: 28. März 2010
Beiträge: 81
|
Ich gehe derzeit den Umweg über mein Htc Desire
hehe,... ist ja lustig. Ich hatte auch schon daran gedacht mein HTC Desire dafür zu benutzen und anstatt eine stationäre Kamera einfach so ein Ding zum einklipsen zu montieren wo ich das Handy dann immer rein und wieder raus tun kann... aber a) Zu umständlich und b) müsste ich dann immer mein Foto-App raussuchen, starten und dann den Auslöser betätigen...
|
theinlein
Anmeldungsdatum: 29. Dezember 2007
Beiträge: 1279
|
Hi, wenn ich mich da einmischen darf... Wieviel Zeit willst du vor einer Quittung verbringen? Für die Buchhaltung - danke ich- wirst du eine Quittung gut lesbar einscannen wollen und nur so groß haben wollen wie nötig.
Wenn das Ding einen Millimenter verrutscht oder etwas schräg ist, wirst du nicht gleich krank werden? Wenn ich deine 500 Euro Schmerzgrenze lese, dann frage ich mich, ob du nicht für dieses Geld einfach einen Scanner kaufst, der das genau schon kann: einscannen und dabei die Größe des Objekts erkennen und automatisch zuschneiden. Außerdem nimmst du einer geeigneten Lösung wahrscheinlich vieles weg: du steigst mit Java ein. Ein Bild beschaffen und das automatisch mit Scripten nachbearbeiten wäre wahrscheinlich einfacher (ImageMagick, gimp scripten ...)? Liege ich da falsch?
|
user_unknown
Anmeldungsdatum: 10. August 2005
Beiträge: 17623
Wohnort: Berlin
|
Da Quittungen meist weiß sind müßten sich die doch gut mit einem schwarzen Hintergrund und im SW-Modus einlesen lassen - dann sollte man auch leicht einen eigenen Algorithmus hinbekommen, der den schwarzen Rand entfernt. Wenn man die Farbe auf Schwarz/Weiss eingrenzt, dann wird sich ein schwarzer Rand aber auch prima komprimieren lassen.
|
Mafio
(Themenstarter)
Anmeldungsdatum: 28. März 2010
Beiträge: 81
|
dann sollte man auch leicht einen eigenen Algorithmus hinbekommen, der den schwarzen Rand entfernt
Schwarze Platte ist eine gute Idee, hab ich einen wunderbaren Kontrast. Werde ich also so machen, aber ich will dafür keinen eigenen Algorithmus schreiben.
Die ganze Bildbearbeitungssache ist so grundlegender Standard, dass es dafür gewiss irgendwelche fertigen Sachen gibt, die dann auch bestimmt besser sind, als wenn ich mir da einen Algorithmus zusammenbastle, der dann irgendwelche Striche auf der Quittung falsch interpretiert und seltsame Ergebnisse liefert. Die Entwicklung von solchen Programmen dauert lange Zeit, und das ist auch gut so, da man dann alle Fehler ausgemerzt hat die ich innerhalb von max. 2 Wochen Programmierzeit noch nicht mal alle finden werde ☺
|