![]() |
|
|
|||||||
| Allgemeine Java-Themen Allgemeine Themen, die nicht in andere Fachforen und nicht zu den Java Basics passen |
|
|
|
Themen-Optionen | Thema durchsuchen | Ansicht |
| #1 (permalink) | |
|
Stammbenutzer
Kilobyte
Registriert seit: 08.08.2008
Fachbeiträge: 126
Abgegebene Danke: 1
Erhielt 0 Danke für 0 Beiträge
|
Hallo,
zu dem Geburtstag vom Barcode (siehe Google-Logo: http://www.google.de/logos/barcode09.gif) habe ich auch eine Frage, die Barcode betrifft: Wie kann ich einen Barcode auf einem Bild finden? Das Auslesen des Barcodes ist eine andere Sache, um die man sich kümmern muss, sobald man erst einmal einen Barcode gefunden hat. Super wäre es, wenn man dann nur noch einen Ausschnitt des Bildes hätte; dann kann man den Barcode aus diesem "Scannerstreifen" auslesen - wäre super. Hier noch ein Beispiel: Das zu erkennende Bild. Es wurde der Barcode erkannt und nur ein Streifen herausgefiltert. Aber wie ich den Barcode am Besten aus einem Bild erkenne, ist mir zweifelhaft .... Vielen Dank für's lesen, data89 |
|
|
| #2 (permalink) | |
|
Stammbenutzer
Viertel Megabyte
Registriert seit: 17.02.2009
Fachbeiträge: 484
Abgegebene Danke: 4
Erhielt 24 Danke für 23 Beiträge
|
Über Korrelation könnte man die Elemente herausfinden. Natürlich müsste man dann noch die einzelnen Bars auslesen, wenn man sie eingegrenzt hat. Stelle mir da einen schönen Umfang vor
![]() Leider kann ich gerade deine Bilder nicht sehen (proxy) und schauen was du da gezeigt hast.
__________________
KirbyDance <(*.*<) <(*.*<) ^(*.*)^ ^(*.*)^ (>*.*)> (>*.*)> |
|
|
| #3 (permalink) | |
|
Stammbenutzer
Kilobyte
Themenstarter
Registriert seit: 08.08.2008
Fachbeiträge: 126
Abgegebene Danke: 1
Erhielt 0 Danke für 0 Beiträge
|
Wie machen die das hier: ||| | ||| | || CODECHECK.INFO : Login
Es gibt einen Bereich, in dem der Strichcode ist. Drin wird er erkannt. Aber was ist die Logik dahinter? |
|
|
| #4 (permalink) | |
|
Stammbenutzer
CD-R 74
Registriert seit: 16.09.2006
Fachbeiträge: 6.762
Abgegebene Danke: 28
Erhielt 529 Danke für 496 Beiträge
|
Wie viel Erfahrung hast du mit Bildverarbeitung?
Ich würds mal mit dem einfachen Erkennen der senkrechten Linien versuchen. Also mit einfacher Kantenerkennung kommt man sicher schon weit. Wenn nicht, mal ein paar mal ein Opening und Closing anwenden und mal schaun, was man mit Korrelation findet...
__________________
Welches ist das beste Buch für Anfänger? Das: Java von Kopf bis Fuss Nach den ersten Schritten? Das: Der Weg zum Java-Profi |
|
|
| #5 (permalink) | |||||||||||||||||||||||||||||||||||||
|
Stammbenutzer
Kilobyte
Themenstarter
Registriert seit: 08.08.2008
Fachbeiträge: 126
Abgegebene Danke: 1
Erhielt 0 Danke für 0 Beiträge
|
Ich habe mich bereits erfolgreich mit der Erkennung von Gesten von Personen beschäftigt. D.h. Positionsbestimmung der Hände und des Kopfes, Dreieck durchgelegt und erkannt, wenn eine Hand oder so gehoben wird ...
Wer googeln kann ist klar im Vorteil - hab rausgefunden was es bedeutet!
Danke, data89 Geändert von data89 (07.10.2009 um 15:30 Uhr) Grund: Kantenerkennung, Sobel erarbeitet |
||||||||||||||||||||||||||||||||||||
|
|
|||||||||||||||||||||||||||||||||||||
| #6 (permalink) | |
|
Stammbenutzer
Kilobyte
Themenstarter
Registriert seit: 08.08.2008
Fachbeiträge: 126
Abgegebene Danke: 1
Erhielt 0 Danke für 0 Beiträge
|
Anbei findet Ihr einen Versuch, der jedoch nicht funktioniert! Es kommt irgend ein wirrer Kram raus. Grundidee: Alle Farbwerte für jede Spalte mitteln und daraus eine "Linie" erstellen. Dann abgrenzen was ausgefüllt und was nicht ausgefüllt ist und in ein boolean-Array schreiben. Dann daraus die 43 Blöcke extrahieren, anhand der Prüfgruppen (Anfang, Mitte, Ende) die Breite vom weißen Bereich für 1 LE bestimmen und auf die anderen 8 Gruppen (mit jeweils 4 Blöcken) anwenden und die Zahl nach schauen.
Wie kann man das besser machen? Irgendwie bin ich von diesem Scanner http://www.codecheck.info/images/Scanner.swf fasiziert! Der liest ja wirklich viele EAN-8 Codes ein ... das gibt's ja gar nicht ( - doch bei Roller .... das war was anderes )Wie funktioniert der wohl? Danke für Eure Hilfe vorab, beste Grüße, data89 P.S.: Achso, ich arbeite mit EAN-8. |
|
|
| #7 (permalink) | |
|
Stammbenutzer
Megabyte
Registriert seit: 04.12.2007
Fachbeiträge: 1.045
Abgegebene Danke: 57
Erhielt 56 Danke für 54 Beiträge
|
prinzipell sollte nur der Barcode auf dem Bild sein ... pauschal ein Binärfilter verwenden ... dann kannst Du mittig auf Y anfangen und X durchlaufen bis Du einen Punkt erwischt hast ... nur erstellst Du von dem Punkt aus eine Punktwolke ... über diese Punktwolke erstellst Du eine Regressionsgerade ... anhand dieser Gerade kannst Du das Bild drehen das es korrekt ausgerichtet ist ... nun kannst Du den Barcode auslesen
__________________
http://www.fantasya-pbem.de - Fantasy-Multiplayer-Strategie - Runden basiert - Twitter Rechtschreibfehler unterliegen der LGPL - Semantikfehler stehen unter AGPL |
|
|
| #9 (permalink) | |||||||||||||||||||||||||||||||||||||
|
Stammbenutzer
Megabyte
Registriert seit: 04.12.2007
Fachbeiträge: 1.045
Abgegebene Danke: 57
Erhielt 56 Danke für 54 Beiträge
|
vieleicht hilfts, mogel
__________________
http://www.fantasya-pbem.de - Fantasy-Multiplayer-Strategie - Runden basiert - Twitter Rechtschreibfehler unterliegen der LGPL - Semantikfehler stehen unter AGPL |
||||||||||||||||||||||||||||||||||||
|
|
|||||||||||||||||||||||||||||||||||||
| #10 (permalink) | |
|
Stammbenutzer
Viertel Megabyte
Registriert seit: 17.02.2009
Fachbeiträge: 484
Abgegebene Danke: 4
Erhielt 24 Danke für 23 Beiträge
|
Will einfach nochmal das Wort Sobeloperator für die Kantenerkennung in den Thread werfen.
EDIT: argh, sehe gerade, dass du Sobel bei dir in einem Editgrund angegeben hast
__________________
KirbyDance <(*.*<) <(*.*<) ^(*.*)^ ^(*.*)^ (>*.*)> (>*.*)> |
|
|
| #11 (permalink) | ||||||||||||||||||||||||||||||||||
|
Stammbenutzer
Kilobyte
Themenstarter
Registriert seit: 08.08.2008
Fachbeiträge: 126
Abgegebene Danke: 1
Erhielt 0 Danke für 0 Beiträge
|
=========================== EDIT: Ich habe diese Seite hier gefunden: BaToo - Bar Code Toolkit : Documentation - Algorithm browse Dort wird der Algorithmus beschrieben. Teile verstehe ich (und habe ich mir auch so in etwa gedacht) aber andere Teile verstehe ich nicht:
Hier ist der Kommentar des Algorithmusses (zwei 's'?): Code:
/** * This class manages the recognition of a barcode, using several scanlines. * It runs the recognition along several scanlines and combines the results of * the different runs. * <p> * Central to the combination of the results of the different scanlines is a three dim. array, * referenced as "possible_numbers", containing information about the occurence of a certain * digit at a specific position in the EAN13 code. * <p> * The first dimension has 13 entries and represents the position in the EAN13 code. * The second dimension has 10 entries and works like a stack for the digits recognized * at that position in the EAN13 code. <br> * The third dimension has two elements: <br> 0 = specifies the digit itself (0..9), * <br> 1 = the amount of this digit's occurence * at that position in the EAN13 code (0..#scanlines) * <p><p> * Here is an example. Assume, we have 19 scanlines, and along these scanline the following * information is recognized: (This has been a pretty blurry barcode image... :-) * <p> * Scanline 0 result: ????????????<br> * Scanline 1 result: ????????????<br> * Scanline 2 result: ????????????<br> * Scanline 3 result: ????????????<br> * Scanline 4 result: ????????????<br> * Scanline 5 result: ????????????<br> * Scanline 6 result: 3?6???3?????<br> * Scanline 7 result: ????????????<br> * Scanline 8 result: ?????4??????<br> * Scanline 9 result: ????????????<br> * Scanline 10 result: ????????????<br> * Scanline 11 result: 612?97017840<br> * Scanline 12 result: ???7????8???<br> * Scanline 13 result: 6122970178?0<br> * Scanline 14 result: ????????????<br> * Scanline 15 result: ????????????<br> * Scanline 16 result: ????????????<br> * Scanline 17 result: ????????????<br> * Scanline 18 result: ????????????<br> * Scanline 19 result: ????????????<br> * <p><p> * The possible_numbers-array will contain the following information. * (Index of third dim. = 0 => Here we see information about the recognized digits.) * The array has already been sorted using the sortDigits() method. This means * that the digits that have been detected most at a certain position are on top. * <p> * detected digits: possible_numbers[][][0] * <p> * 0 : 6 1 2 7 9 7 0 1 7 8 4 0 <br> * 1 : 3 x 6 2 x 4 3 x 8 x x x <br> * 2 : x x x x x x x x x x x x <br> * 3 : x x x x x x x x x x x x <br> * 4 : x x x x x x x x x x x x <br> * 5 : x x x x x x x x x x x x <br> * 6 : x x x x x x x x x x x x <br> * 7 : x x x x x x x x x x x x <br> * 8 : x x x x x x x x x x x x <br> * 9 : x x x x x x x x x x x x <br> * <p> * Index of third dim. = 1 => Here we see information about the occurence of the * digits. * <p> * # of their occurence: possible_numbers[][][1] * <p> * 0 : 2 2 2 1 2 2 2 2 2 2 1 2 <br> * 1 : 1 0 1 1 0 1 1 0 1 0 0 0 <br> * 2 : 0 0 0 0 0 0 0 0 0 0 0 0 <br> * 3 : 0 0 0 0 0 0 0 0 0 0 0 0 <br> * 4 : 0 0 0 0 0 0 0 0 0 0 0 0 <br> * 5 : 0 0 0 0 0 0 0 0 0 0 0 0 <br> * 6 : 0 0 0 0 0 0 0 0 0 0 0 0 <br> * 7 : 0 0 0 0 0 0 0 0 0 0 0 0 <br> * 8 : 0 0 0 0 0 0 0 0 0 0 0 0 <br> * 9 : 0 0 0 0 0 0 0 0 0 0 0 0 <br> * <p> * Below is a run of the detectValidBarcode() method that tries to detect a valid * barcode. If no code can be recognized directly, we are trying all possible * combinations of the recognized digits starting with the "most likely" combination. * This is intended as a last try. The need to try different combinations of the recognized digits * should occur very seldom, or at least with only very few alternatives for * specific digits. As a prositive effect, we get the chance to recognize a barcode that * couldn't be recognized before, as a negative consequence, we can get a EAN13 number * that is correct, according to the checksum, but that doesn't match the * barcode on the image. * <p> * Trying to find a valid code: (detectValidBarcode()-method) * <p> * CHECK: 6 1 2 7 9 7 0 1 7 8 4 0 ckecksum_digit:5 <br> * CHECK: 6 1 2 7 9 7 0 1 8 8 4 0 ckecksum_digit:2 <br> * CHECK: 6 1 2 7 9 7 3 1 7 8 4 0 ckecksum_digit:6 <br> * CHECK: 6 1 2 7 9 7 3 1 8 8 4 0 ckecksum_digit:3 <br> * CHECK: 6 1 2 7 9 4 0 1 7 8 4 0 ckecksum_digit:8 <br> * CHECK: 6 1 2 7 9 4 0 1 8 8 4 0 ckecksum_digit:5 <br> * CHECK: 6 1 2 7 9 4 3 1 7 8 4 0 ckecksum_digit:9 <br> * CHECK: 6 1 2 7 9 4 3 1 8 8 4 0 ckecksum_digit:6 <br> * CHECK: 6 1 2 2 9 7 0 1 7 8 4 0 ckecksum_digit:0 <br> * <p> * RESULT: 612297017840 * <p> * * @author Robert Adelmann * @version 1.0 */ Geändert von data89 (08.10.2009 um 10:08 Uhr) |
|||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||
| #12 (permalink) | ||||||||||||||||||||||||||||||||||
|
Stammbenutzer
Megabyte
Registriert seit: 04.12.2007
Fachbeiträge: 1.045
Abgegebene Danke: 57
Erhielt 56 Danke für 54 Beiträge
|
letzter Versuch, mogel
__________________
http://www.fantasya-pbem.de - Fantasy-Multiplayer-Strategie - Runden basiert - Twitter Rechtschreibfehler unterliegen der LGPL - Semantikfehler stehen unter AGPL |
|||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||
| #13 (permalink) | |
|
Stammbenutzer
Kilobyte
Themenstarter
Registriert seit: 08.08.2008
Fachbeiträge: 126
Abgegebene Danke: 1
Erhielt 0 Danke für 0 Beiträge
|
In dem Beispiel wird ja auch mit einem Binärfilter gearbeitet: erst in Grauwerte umwandeln und dann Thresholding benutzen. Fertig ist die Scannerlinie.
Wenn ich das auf mein Webcambild anwende, kommt das heraus: ![]() Jetzt muss ich mehrere Scannerlinien drüberlegen, den EAN mehrmals einlesen und dann abgleichen und eine Mehrheitsentscheidung vornhemen. Wenn ich das gemacht habe, dann muss ich noch ein bisschen Code/Performance verbessern. So müsste es jetzt aber funktionieren, oder??? data89
|
|
|
| #14 (permalink) | |
|
Stammbenutzer
Viertel Megabyte
Registriert seit: 17.02.2009
Fachbeiträge: 484
Abgegebene Danke: 4
Erhielt 24 Danke für 23 Beiträge
|
Ich wollte in die Richtung Kantenerkennung nur gehen, damit er den Barcode richtig rotiert bekommt und dann auslesen kann.
__________________
KirbyDance <(*.*<) <(*.*<) ^(*.*)^ ^(*.*)^ (>*.*)> (>*.*)> |
|
|
| #15 (permalink) | |
|
Stammbenutzer
Kilobyte
Themenstarter
Registriert seit: 08.08.2008
Fachbeiträge: 126
Abgegebene Danke: 1
Erhielt 0 Danke für 0 Beiträge
|
Okay, aber das mit dem Rotieren lasse ich weg. Der benutzer sieht später auf dem Bildschirm ein Visier (roter Bereich mit Mittellinie) und muss dann den Barcode dort zentrieren und einmal ablichten. Ich denke, dass man so viel vom Benutzer verlangen kann ...
Wenn man den Barcode auf einem statischen Bild sucht, dann benötigt man das. Außerdem sieht mein Testbild scheußlich aus und eignet sich eher weniger (durch die Verzerrungen): ![]() data89 |
|
|
| #16 (permalink) | |
|
Stammbenutzer
Megabyte
Registriert seit: 04.12.2007
Fachbeiträge: 1.045
Abgegebene Danke: 57
Erhielt 56 Danke für 54 Beiträge
|
ja ... im Idealfall nicht X-mal über die selber Zeile sondern mal oben mal unten ... allerdings wirst Du mit Deinem Beispiel Probleme bekommen - es ist verzerrt ... wenn Du jetzt x-mal über die gleiche Zeile gehst (dann ist die Zerrung egal), bekommst Du auch x-mal exakt das gleiche raus ... damit reicht es wenn Du nur 1 mal den Scanner bemühst
__________________
http://www.fantasya-pbem.de - Fantasy-Multiplayer-Strategie - Runden basiert - Twitter Rechtschreibfehler unterliegen der LGPL - Semantikfehler stehen unter AGPL |
|
|
| #17 (permalink) | |||||
|
Stammbenutzer
Kilobyte
Themenstarter
Registriert seit: 08.08.2008
Fachbeiträge: 126
Abgegebene Danke: 1
Erhielt 0 Danke für 0 Beiträge
|
Also hier mein Ergebnis. Aber irgendwie klappt das immer noch nicht ...
BcodeReader.java
|
||||
|
|
| #18 (permalink) | |
|
Stammbenutzer
Kilobyte
Themenstarter
Registriert seit: 08.08.2008
Fachbeiträge: 126
Abgegebene Danke: 1
Erhielt 0 Danke für 0 Beiträge
|
Hallo,
ich habe das jetzt mit dem Barcode hinbekommen und das funktioniert auch via JMF mit meiner Webcam. Aber: da das Bild so groß ist werden manchmal auch Barcodes erkannt, wo garkeine vorhanden sind. Gibt es einen einfachen Mechanismus, mit dem man feststellen kann, ob ein Barcode im Bild befindlich ist? data89
|
|
|
|
| Stichworte |
| barcodes , erkennen , image , java , recognition |
| Themen-Optionen | Thema durchsuchen |
| Ansicht | |
Ähnliche Themen
|
||||
| Thema | Autor | Forum | Antworten | Letzter Beitrag |
| Firefox, Spielmit.com und ein Java Spiel! | Glasiwong | Java Basics - Anfänger-Themen | 3 | 19.05.2012 06:28 |
| Animation hinter transparentem Bild auf der GlassPane | java2000 | Spiele- und Multimedia-Programmierung | 6 | 21.05.2008 19:34 |
| Scalieren eines Bildes, abhängig von der Fenstergröße | Java Basics - Anfänger-Themen | 10 | 19.08.2006 20:14 | |
| Bilder mit unerwünschter Auflösung geschrieben (-> JAI) | Reeny | AWT, Swing, JavaFX & SWT | 1 | 07.03.2006 13:21 |
| Bild in einem JScrollPane anzeigen | AWT, Swing, JavaFX & SWT | 3 | 05.07.2004 13:11 | |
| Lesezeichen |
|
|