# Bild von Webcam aufzeichnen



## Andi_CH (9. Mai 2011)

Ich suche einen konzeptionell möglichst ausbau- und veränderbaren Weg von einer Webcam zu einem bestimmten Zeitpunkt ein Bild zu speichern.

Meine Fragen:

- Gibt es einen Weg direkt von USB ein Bild zu lesen (Ich habe den heutigen Vormittag mit Versuchen verbracht - die Webcam funktioniert zwar einwandfrei, wird aber von Java-Versuchsprogrammen nicht erkannt. Im Moment habe ich eine billige USB Kamera, die aber später durch ein robusteres Modell ersetzt wird, welche möglicherweise Webserver spielt.

- Wie gross ist der Aufwand auf Webserver (für die USB-Cam) und auf JavaSeite um so ein Bild zu lesen?

- Ich bin natürlich auch offen für weitere, konstruktive Ideen.

--

Muss ich betonen, dass ich google schon kenne aber vielleicht nicht die richtigen Schllüsselworte verwendet habe?


----------



## hartzie (9. Mai 2011)

Guck dir mal OpenCV an. Das hat eine nette JNI Lib und läuft wunderbar auf Windoof und Linux. Ich selber arbeite mit der nativen Variante und es ist sehr mächtig


----------



## maki (9. Mai 2011)

Ein mögliches Stichwort wäre JMF -das Java Media Framework


----------



## Andi_CH (9. Mai 2011)

maki hat gesagt.:


> Ein mögliches Stichwort wäre JMF -das Java Media Framework



Hab ich installiert - da ist ein Testprogramm TestQuickCamPro dabei welches eben genau die Webam nicht erkennt - nur zwei Audiodevices ...


----------



## hartzie (9. Mai 2011)

Ich habe mir mal die Java api von OpenCV angeschaut und würde dir abraten die zu benutzen . Ein Bild zu einem bestimmten Zeitpunkt auszulesen von einer Webcam geht in C mit ungefähr 10 Zeilen und dabei ist es relativ egal ob Windows oder Linux. Also ist der Aufwand fast 0. Nun ist jetzt die Frage was du vorhast, falls du konkrete Hilfe suchst kannst mich auch direkt anschreiben.


----------



## Andi_CH (9. Mai 2011)

Was ich will? Eine Javaprogramm soll zu einem bestimmten Zeitpunkt ein Bild von der Webcam zur Verfügung haben - die zeitliche Präzision ist nicht so relevant. (Ich sage mal 1 spätestens eine Sekunde nach dem Event)

Wie gesagt, es sind viele Wege denkbar, aber ich will mir die Möglichkeit einer Webcam mit Webserver nicht verbauen.

Ach ja wegen OpenCV- ich habe das installiert und danns teht da noch etwas CMake (Was ist das denn nur?) .... ich bin grundsätzlich ein fauler und bequemer Mensch - geht das nicht einfacher?


----------



## homer65 (9. Mai 2011)

Ich hab keine Ahnung, will aber doch einen dummen Kommentar loswerden 
Sind denn alle Webcams gleich? 
Oder gibt es da Unterschiede, wie man ein Bild von einer bekommen kann?


----------



## Andi_CH (10. Mai 2011)

Ich denke schon dass die sich ähnlich verhalten und ansonsten muss halt ein abstractionLayer gemacht werden.

Eine Idee ist es ja eben die Daten über html zu streamen und spätestens dann sind die alle gleich 
aber da ist ja eben die Frage wie bringe ich z.B. den Apache dazu das zu tun und wie greife ich dann aus Java auf das Bild zu.

Muss es überhaupt ein Stream sein? Ich könnte ja dem Server auch einen request schicken worauf der genau ein Bild liefert.

Ich bin gespannt auf kreative Lösungsvorschläge (und nein  Code kann ich noch keinen liefern es sind ja rein konzeptionelle Fragen)

Zum Thema Code - javax.media - dazu finde ich weder sourcode noch javadoc - findet meine Cam nicht - kein Unterschied ob die angestöpselt ist oder nicht. Kennt sich da jemand genauer aus?


----------



## Andi_CH (11. Mai 2011)

Nach oben schieb 

Keine weiteren konstruktiven Ideen wie ich in einem Java-Programm zu einem jeweils aktuellen Bild einer USB-Webam komme?

Der Umweg über einen Webserver ist machbar, aber wie kommt der Webserver zum Bild?

Die bisher geäusserten scheitern alle aus unterschiedlichen Gründen.


----------



## noobadix (11. Mai 2011)

Hm, wie wäre es mit java ein externes Programm einen kurzen Film aufnehmen zu lassen und diesen dann mit java wieder einzulesen?


----------



## jgh (11. Mai 2011)

was ist denn mit diesem Framework...keine Ahnung wo und wann ich das mal gefunden habe, wirst du sicherlich -wenn denn gewünscht- leicht ergooglen können.

liefert dir ein spiegelbild der Webcam...und zeigt es dir auf einem JFrame an...
da kann man sicherlich irgendwie auch auf den Stream zugreifen. Die dsj.jar ist leider zu groß zum hochladen. Falls du sie nicht im Netz findest, kann ich sie dir gerne senden.



```
package video;

import de.humatic.dsj.DSCapture;
import de.humatic.dsj.DSFilterInfo;
import de.humatic.dsj.DSFiltergraph;
import javax.swing.JFrame;

public class Webcam extends JFrame {

	private DSFilterInfo[][] dsFilterInfo;
	private DSCapture dscCapture[];
	private DSCapture dsc = null;

	public Webcam() {
		super("Spiegel");
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		dsFilterInfo = DSCapture.queryDevices();
		dscCapture = new DSCapture[dsFilterInfo[0].length - 1];
		dsc = new DSCapture(DSFiltergraph.D3D9, dsFilterInfo[0][0], false,
				DSFilterInfo.filterInfoForSystemProfile(2), null);
		dsc.flipImage(2);
		this.add(dsc.asComponent());
		this.setSize(400, 400);
		setLocationRelativeTo(null);
		this.setVisible(true);
	}

	public static void main(String[] args) {
		new Webcam();
	}
}
```


----------



## Andi_CH (11. Mai 2011)

Hm


> dsj is free for non-commercial use. Continued usage in any kind of context that generates revenue requires a commercial use license.
> By downloading any of the above packages you acknowledge to have taken notice of this and to agree to it.



Aber ich versuche es mal damit, Danke.

EDIT: 
Ich habe das dsj.jar im java build path und Eclipse merkt auch dass die da ist.
In der runconfiguration ist sie im classpath und dennoch kommt beim ersten Aufruf Zeile 17 ein Exception

```
17: dsFilterInfo = DSCapture.queryDevices();
```


```
java.lang.UnsatisfiedLinkError: no dsj in java.library.path
Exception in thread "main" java.lang.UnsatisfiedLinkError: de.humatic.dsj.DSFiltergraph.initMethodIDs()V
	at de.humatic.dsj.DSFiltergraph.initMethodIDs(Native Method)
	at de.humatic.dsj.DSFiltergraph.<clinit>(SourceFile:143)
......
```


----------



## Gast2 (11. Mai 2011)

Muss es denn eine USB Webcam sein? Wenn du eh eine höherwertige Kamera kaufen willst, nimm doch eine die die Bilder über HTTP als MJEPG Stream anbieten. Da kannst du dir einfach den Stream einlesen und die Frames rauschneiden.


----------



## jgh (11. Mai 2011)

du brauchst auch die dsj.dll ... zumindest ist sie bei mir im projekt mit dabei.


----------



## Andi_CH (11. Mai 2011)

fassy hat gesagt.:


> Muss es denn eine USB Webcam sein? Wenn du eh eine höherwertige Kamera kaufen willst, nimm doch eine die die Bilder über HTTP als MJEPG Stream anbieten. Da kannst du dir einfach den Stream einlesen und die Frames rauschneiden.



Es muss nicht, aber es ist ....
Ich habe nun mal keine streamende Cam zur Verfügung und ich bin sicher, dass früher oder später noch die Anforderung kommt, dass es auch mit Billig-Cams laufen muss.

Direktzugriff per Java ist so gut wie gestorben, die Cam wird nicht erkannt.

Ich weiss dass es nicht zur Kernkompetenz der Forums hier gehört, aber ist es wirklich nicht möglich innert nützlicher Frist einen Apache dazu zu bringen jeweils das aktuelle Bild oder einen Stream zur Verfügung zu stellen?


----------

