# Webcam Ziffern ablesen



## Knowledg_e (8. Nov 2011)

Hallo Leute,

ich hab eigentlich nur ein paar einfache Fragen, deren Antworten ich bis jetzt noch nicht finden konnte.
Ich muss bei meinem Projekt in der Schule eine Aufgabe lösen und zwar von einem Wasserzähler mittels Webcam die Ziffern ablesen.
Da ich mir die Arbeit natürlich nicht erschweren möchte, will ich es nicht mit einer komplizierten OCR lösen. Meine Idee wäre eine fix montierte Webcam, dann ist die Anzeige immer an der gleichen Stelle auf den Bildern die ich von der Webcam bekomm und ich muss mir diesen Bereich nicht suchen. Dannach vergleiche ich von dem Bereich(die Anzeige), von dem ich weiß wo er ist jeweils einen zB 20pixel breiten Abschnitt (eine Ziffer) mit jeweils den Bildern von 0-9. Ich weiß, dass die Bilder gleich breit sein müssen, wie die Abschnitte, die ich mit den Bildern vergleiche.

meine Fragen dazu:

              + kann mir jemand eine webcam mit LED (da Wasserzähler meistens im Keller sind)empfehlen, die Preis/leistungmäßig und Java-technisch am besten wäre
              + hat irgendwer von euch ein paar Links auf Lager, die mir bei der Bildverarbeitung helfen
              + kennt wer von euch eine Software für USB-Kameras, die über die Console ausgeführt werden können bzw. ich möchte eigentlich das Bild selbst nicht von der Webcam aufnehmen, sondern in meinem Java Programm ein anderes Programm aufrufen, dass nur einen Schnappschuss von der Webcam macht. Dieses Bild öffne ich dann mit meinem Programm und bearbeite es.

freundliche Grüße


----------



## XHelp (8. Nov 2011)

Deine Idee wird nicht klappen:





Eine Ziffer befindet sich a) nicht immer auf der exakt selben stellen b) nicht immer ganz zu sehen

Was die Webcam angeht: nimm irgendeine
Was Bildverarbeitung angeht: was genau meinst du damit?
Was Webcam + Java angeht: hast du schon nach diesen 2 Stichwörtern gegoogelt?


----------



## SlaterB (8. Nov 2011)

XHelp hat gesagt.:


> Was Bildverarbeitung angeht: was genau meinst du damit?


na doch wohl aus einem Bild wie deinen die Zahl zu extrahieren auf intelligenten Weg,

wobei doch die WebCam sicher selber platziert wird so dass es einfacher wird, weniger Zahlen, groß mittig im Bild,
warum von Spezialfällen wie 'nicht vollständig zu sehen' ausgehen? 
ach ok, auf die Bewegung des Zählers bezogen, nicht die generelle Ausrichtung der Cam


----------



## XHelp (8. Nov 2011)

SlaterB hat gesagt.:


> na doch wohl aus einem Bild wie deinen die Zahl zu extrahieren auf intelligenten Weg,


Ja, habe ich mir schon fast gedacht. Bei der nächsten Antwort wollte ich solche Suchanfragen wie "java crop image" in den Raum werfen als Hinweis, dass die Lösung zu jeder Teilaufgabe sich schnell bei google finden lässt.


> ach ok, auf die Bewegung des Zählers bezogen, nicht die generelle Ausrichtung der Cam



Ja, auf Ausrichtung kann man noch Einfluss nehmen, auf die Funktionsweise des Zählers nicht mehr.


----------



## Dow Jones (8. Nov 2011)

XHelp hat gesagt.:


> Ja, auf Ausrichtung kann man noch Einfluss nehmen, auf die Funktionsweise des Zählers nicht mehr.


Aber das sollte trotzdem so funktionieren, wie Knowledg_e sich das gedacht hat. Wenn die Webcam fix montiert ist dann ist es ja ein leichtes die Aufnahme zu segmentieren:




Dann braucht man sich nur noch die Mühe machen und eine Ziffernwalze einmal "komplett abzufilmen" um ein Bild eines "Ziffernstreifens" zu erhalten:




Jetzt müsste man prinzipiell nur noch eine Kreuzkorrelation zwischen jedem der segmentierten Felder und dem Ziffernstreifen durchführen (evtl. kann man die Bilder vorher noch etwas weichzeichnen, damit das Segment nicht pixelgenau mit dem Ziffernstreifen übereinstimmen muss). Und dann sollte man eigentlich wissen welchen Stand der Zähler gerade anzeigt. Sogar mit Kommastellen. 
Ggf. kann man ja auch noch Heuristiken einbauen um die Plausibilität des Ergebnisses zu überprüfen.

Aber die eigentlichen Fragen von Knowledg_e waren ja gar nicht zum Them "wie". 
Eine Webcam kann ich leider nicht empfehlen, ich habe selber keine. Solltest du eine brauchbare Cam finden dann würde ich mich aber über eine Empfehlung freuen. Ist schließlich ein spannendes Thema. 
Links zum Thema Bildverarbeitung - da gibt's natürlich endlos viele... Suchst du etwas bestimmtes?


----------



## SlaterB (8. Nov 2011)

wenn man sich anstrengt, gerade mit solchen exakten Mustervergleichen, müssten auch Zwischenschritte erkennbar sein, 
eine durchgehende weiße Pixelreihe auf Höhe x zeigt den Übergang an, darüber und darunter sind Teilbilder, 
die dann entsprechend großen Ausschnitten der Referenzbilder vergleichen


----------



## Knowledg_e (9. Nov 2011)

zum Überprüfen ob eine Ziffernscheibe ganz sichtbar ist, könnte ich vielleicht den schwarz anteil, des Bilds überprüfen, nur die frage ist dann, ob ein halber achter gleichviel oder mehr schwarz hat, als ein einser.
zur Bildbearbeitung: ich habe noch nie ein Bild mit einem Programm geöffnet .. welches Format ist einfach ? welches könnt ihr mir empfehlen ? 
die funktionen die ich können muss :
        - wie ich auf einzellne Pixel zu greife (Deren Farbe abfrage)

und nochmal .. gibts da vielleicht irgend eine Software, die ich einfach in meinem Programm ausführen kann, sodass ich nur einen Snapshot mache.

Danke für die Kommentare und das Interesse : )


----------



## Tobse (9. Nov 2011)

Die WinAPI sollte sicherllich treiber oder funktionen für webcams bereitstellen. Also machst evtl. eine exe, die den snapshot in eine bestimmte datei schreibt (am besten PNG oder BMP wegen Qualitätsverlust). Die kannst du dann mit java.awt öffnen und pixelweise auslesen.

```
a=webcam.makeScreenshot();
schreibeInDatei("C:\snapshot.png", a);
```


```
Runtime.getRuntime().exec("snapshot.exe");
Image img=leseBildAusDatei("C:\snapshot.png");
// verarbeiten
```


----------

