# kamera auslösen durch Programm



## fill (26. Apr 2010)

Hallo allezusammen!
ich bin gerade dabei einen Schach-Roboter zu bauen und zu programmieren. Dieser wird mit dem Computer kommunizieren. 
Ich möchte am liebsten eine kamera über dem Spielfeld positionieren, um die "Zugeingabe" abzufragen und den Spielzug zu erkennen, den der Spieler gemacht hat. 
Ich habe eine 
casio EX-S500
Diese scheint einen Usb-Anschluss zu haben.
Ich frage mich jetzt ob es im prinzip möglich ist, den Computer im Programmablauf automatisiert die Kamera auslösen zu lassen und dann das ergebnis auswerten zu lassen.
Was meint ihr? Ist das eine gute Idee? 
Bin auf jedes Feedback heiß 
mfg fill


----------



## Landei (26. Apr 2010)

Warum keine Webcam?


----------



## fill (26. Apr 2010)

ich habe leider keine webcam. Und ich wollte mir dafür eigentlich auch keine kaufen.
Wäre es denn mit einer Webcam möglich?


----------



## nrg (26. Apr 2010)

könnte mir vorstellen, dass wenn die webcam genau auf das spielfeld gerichtet ist, man das feld proportional teilen kann. dann kann man die figuren, deren position ja zum glück am anfang feststehen, einlesen und muss eigentlich "nur" veränderungen registrieren. das bringt natürlich auch einige probleme mit, wie zb hände die übers spielfeld greifen oä. das ganze stabil und verlässlich zu programmieren stelle ich mir am zweitschwersten vor... welche figur wann auf welcher position steht und das herausfinden wie genau gezogen wurde halte ich da für das kleinere übel. am schwersten wird wohl die ki sein, die den nächsten zug berechnet...


----------



## fill (26. Apr 2010)

erstmal danke für die Antworten, bis jetzt! 



> könnte mir vorstellen, dass wenn die webcam genau auf das spielfeld gerichtet ist, man das feld proportional teilen kann.


so hatte ich das gedacht, genau.


> dann kann man die figuren, deren position ja zum glück am anfang feststehen, einlesen und muss eigentlich "nur" veränderungen registrieren. das bringt natürlich auch einige probleme mit, wie zb hände die übers spielfeld greifen oä. das ganze stabil und verlässlich zu programmieren stelle ich mir am zweitschwersten vor.


wenn man etwas darüber nachdenkt, dann muss "nur" zwischen, dem Feld, den weißen und den schwarzen Figuren, und allen "störungen" unterschieden werden. 
Die genaue Figur durch das foto/video zu erkennen, also zb. bauer der läufer, ist überhaupt nicht nötig. Es wird registriert, wenn eine Figur nicht mehr dort steht wo sie einmal stand(was bedeutet, dass diese Figur bewegt wurde. Diese Figur kann dann ermittelt werden, da das Programm jederzeit "weiß" wo welche Figur ist, da , wie gesagt, zu beginn immer die gleiche situation herscht. Dann wird auf dem Foto/video nur noch die stelle gesucht, wo jetzt eine Figur steht, die vorher noch nicht da war, oder wo eine Figur, die Farbe gewechselt hat, bzw. geschlagen wurde. 
So hatte ich mir die Auswertung der Daten gedacht. Die sollte dann immer statt finden, sobald eine "Störung", sprich Hand des Spielers, ins Bild kommt, und wieder verlässt. Sollte eine Störung erkannt werden obwohl der Spieler keinen Zug gemacht hat, wird auch keine veränderung des Spielfeldes erkannt, da es keine gab. 
Ich denke das würde soweit in Ordnung gehen, wenn der Kontrast hoch genug ist.

Pu, jetzt bin ich etwas ausgeschweift. Ich hoffe es stört niemanden, dass ich Javatechnisch umganssprachlich rede.
Wenn ihr einen Denk/Logigfehler findet oder euch selbst was gutes einfällt, würde ich es gerne hören. danke



> am schwersten wird wohl die ki sein, die den nächsten zug berechnet...



Das könnte in der Tat sein. Ich werde versuchen das ganze mit einer Art MiniMax Lösung hinzukriegen. Allerdings ist das auch ne ganz andere Kiste, und zum Testen und so weiter, des restes des Programms, würde ich mich auch mit einer Zufalls KI zufrieden geben. ( zur not kann man sich vieleicht eine mehr oder weniger fertige KI aus dem internet besorgen... obwohl ich schon gerne alles allein schaffen würde... mal sehen)

Ich frage mich aber immernoch ob ich meine Kamera überhaupt durch das Programm steuern und auf dessen Bilder zugreifen kann... weiß das keiner?

mfg fill


----------



## Landei (27. Apr 2010)

Die Antwort würde mich auch interessieren, ich habe ein ähnliches Problem (bei mir muss es aus vor allem wegen der Auflösung eine Kamera sein)


----------



## temp_user (27. Apr 2010)

ich kann mir nicht vorstellen, dass du eine "normale" Kamera über pc ansteuern kannst, außer sie hat ne webcamfunktion...


----------



## fill (27. Apr 2010)

> ich kann mir nicht vorstellen, dass du eine "normale" Kamera über pc ansteuern kannst, außer sie hat ne webcamfunktion...



Wie gesagt, ich kenne mich auf dem Gebiet nicht aus, aber immerhin gibts ein UsbAnschluss.


----------



## w0ddes (28. Apr 2010)

Bei allen Kameras die ich kenne, dient der USB anschluss ja nur dem Zugriff auf den Speicher der Kamera. Habe es noch nie gesehen, dass man eine "normale" Fotokamera per USB auslösen kann ...


----------



## fill (28. Apr 2010)

> Bei allen Kameras die ich kenne, dient der USB anschluss ja nur dem Zugriff auf den Speicher der Kamera. Habe es noch nie gesehen, dass man eine "normale" Fotokamera per USB auslösen kann ...



Habe ich auch noch nicht, aber andererseits braucht man das ja auch fast nie, daher muss das nichts heißen. 
Mich beschleicht aber langsam auch die Ahnung, das eine Webcam vieleicht die bessere Lösung sein könnte. Aber bevor ich mir für teures Geld eine WEbcam kaufe, möchte ich aber Gweissheit, dass es dann auch funktionieren wird. 

mfg fill


----------



## xip (29. Apr 2010)

Hi,

habe mich auch lange Zeit damit beschäftig Kamerabilder auszuwerten. Naja,.....

Meiner Ansicht nach das einzige was du, wenn du auf reiner Java Basis bleiben möchtest, verwendent könntest wären für die Objekterkennung Neuronale Netze. Das ist allerdings super heftig!!!

Die Bilderfassung in Java kannst du mit JMF wunderbar hinkriegen. Die Anbindung ist einfach. Aber die Auswertung im Neuronalen Netz ist der Horror.

Ich würde dir empfehlen schau dir mal OpenCV an. Das ist eine Software die speziel für optische Auswertung gedacht ist. Dabei wird die Kamera direkt angesprochen und du kannst gleich deine Schachfiguren "anlernen", sodass sie erkannt werden.

Die Implementierung in Java geht nur über JNI. 

Ansonsten geh auf .NET und Co.

Ich hoffe ich konnte dir helfen.

Gruß
xip


----------



## Gast2 (29. Apr 2010)

w0ddes hat gesagt.:


> Bei allen Kameras die ich kenne, dient der USB anschluss ja nur dem Zugriff auf den Speicher der Kamera. Habe es noch nie gesehen, dass man eine "normale" Fotokamera per USB auslösen kann ...


da gibt es einige ... dafür stellt aber der Hersteller auch eine entsprechende API zur Verfügung (hatte ich erst Anfang letzten Jahres, Olympus[?])



xip hat gesagt.:


> Meiner Ansicht nach das einzige was du, wenn du auf reiner Java Basis bleiben möchtest, verwendent könntest wären für die Objekterkennung Neuronale Netze.


simple Differenzbildanalyse - wie der OP es schon anmerkte reicht aus für experimentelle Züge



> Das ist allerdings super heftig!!!


nur aufwendig dem Kind alles bei zu bringen


----------



## Landei (29. Apr 2010)

fill hat gesagt.:


> Aber bevor ich mir für teures Geld eine WEbcam kaufe ...



Die werfen sie dir doch inzwischen für nicht mal 20 Tacken hinterher...

Webcams-Sortiment im Conrad Online Shop


----------



## fill (29. Apr 2010)

vielen dank erstmal für die vielen Informationen!




xip hat gesagt.:


> Meiner Ansicht nach das einzige was du, wenn du auf reiner Java Basis bleiben möchtest, verwendent könntest wären für die Objekterkennung Neuronale Netze. Das ist allerdings super heftig!!!



neurale Netze ist mir wirklich eine Stufe zu hoch, und ich denke (hoffe), dass ich es nicht brauche.



> simple Differenzbildanalyse - wie der OP es schon anmerkte reicht aus für experimentelle Züge



Differenzbildanalyse hört sich für mich schon passender an.



> Die Bilderfassung in Java kannst du mit JMF wunderbar hinkriegen. Die Anbindung ist einfach. Aber die Auswertung im Neuronalen Netz ist der Horror.



Soweit ich alles richtig verstehe, kann ich mir mit JMF zugriff auf medien holen, aber in keiner Weise auswerten. Mir würde zum Beispiel schon reichen von einem Pixel des Bildes die Farben (RGB) zu haben.
Geht so etwas mit JMF oder nicht?



> Ich würde dir empfehlen schau dir mal OpenCV an. Das ist eine Software die speziel für optische Auswertung gedacht ist. Dabei wird die Kamera direkt angesprochen und du kannst gleich deine Schachfiguren "anlernen", sodass sie erkannt werden.



das hört sich auch ganz passend an. kann man die sache mit JMF und OpenCV zum laufen bringen?

edit:ich habe jetzt eine webcam, die ich so erstmal benutzen kann


----------



## xip (30. Apr 2010)

Hi,

wenn du dir JMF installierst, greift dieses auf deine Webcam zu. Über das JMF kannst du dann direkt in Java das Bild/Video abgreifen und dann alles untersuchen. Könntest locker eine Differenzbildanalyse machen. Gibs haufenweise wirklich gute Tutorials und Sourcecodes im Netz. Das ist wirklich super easy zu handeln. 

Wenn du merkst es klappt nicht mit einer Differenzbildanalyse versuch mal OpenCV. Das ist eine Komplettlösung. Dies Software nimmt das Bild über eine Kamera auf und erkennt du von dir angelernten Objekte. Bin hier hin hat das nichts mit Programmierung zu tun. Recht easy. Dann kannst du über eine API abfragen, wo z.B. das Objekt x ist? In welchem Winkel es steht und Co. Dafür gibs allerdings noch keine JAVA Api. Es gibt eine, aber die kannste knicken. Über .NET oder direkt in C++ kannste das Teil super einbinden.


----------



## TobiTobsen (30. Apr 2010)

Hey,
schau mal unter Forum Home - NUI Group Community Forums vorbei.
Das ist ein Forum in dem sich Leute tummeln die sich mit neuen mensch-computer interaktionen beschäftigen.
Vielfach werden diese Interaktionen mit Kameratracking erledigt, idR zwar mit IR Kameras aber auch mit normalen webcams. 
Ähnliche systeme werden zum beispiel auch in diesen Leergutautomaten genutzt wenn Getränkekästen überprüft werden wieviele Flachen drin sind und so. Da gibt es industrielle Lösungen mit Kameras und fertiger Trackingsoftware. 
Selber bauen fände ich aber auch besser ;-).

Cheers,
Tobi


----------



## fill (30. Apr 2010)

danke an xip , nochmal! 
ich werde es mit jmf mal probieren, und mich da ein bisschen schlau machen.
danke auch an alle die hier was beigetragen haben! 
mfg fill


----------



## Landei (30. Apr 2010)

Bei einigen Kameras scheint es doch zu gehen: gPhoto - Doc :: Remote controlling cameras


----------

