Seite 1 von 1
Mit 2 verschiedenen Libraries auf 1 Webcam zugreifen
Verfasst: Freitag 2. Juli 2010, 19:47
von OpenCV
Hallo!
Ich stehe grade vor einem kleinen Problem:
Ich habe aufgrund der teilweise Inkompatibilität von Windoof mit OpenCV eine andere Library (VideoCapture) verwenden müssen, um Bilder zu speichern.
Wenn die Cam für die 2.Library initialisiert wird, stürzt das Programm jedoch ab (selbstverständlich).
Mit 2 Webcams geht es einwandfrei, die eine ist für den Livestream, die andere für das Speichern der Bilder verantwortlich.
Ich will aber nur eine Webcam verwenden für das ganze Programm. Wie kann ich es nun machen, dass das Programm trotzdem nicht abstürt?
Ach ja der Code für die Initialisierungen (erste OpenCV, zweite VideoCapture):
Code: Alles auswählen
self.capture = highgui.cvCreateCameraCapture(1) #OpenCV
self.cam = Device(0) # VidCap
MFG
Re: Mit 2 verschiedenen Libraries auf 1 Webcam zugreifen
Verfasst: Freitag 2. Juli 2010, 20:01
von EyDu
Hallo.
Vielleicht solltest du in einem OpenCV-Forum nachfragen?
Sebastian
P.S.: Warum nennst du es eigentlich "Windoof" wenn du es offensichtlich benutzt. Es gibt genügend Alternativen.
Re: Mit 2 verschiedenen Libraries auf 1 Webcam zugreifen
Verfasst: Samstag 3. Juli 2010, 20:31
von OpenCV
Ich verwende ja eigentlich Ubuntu, bin aber von der Schule aus verpflichtet, Windows zu verwenden
Na ja trotzdem danke, ich denke, ich muss in der Library was verändern, damit er auf die selbe Cam zugreift, die bei einer .pyd-Datei aber nicht möglich ist?
Re: Mit 2 verschiedenen Libraries auf 1 Webcam zugreifen
Verfasst: Samstag 3. Juli 2010, 21:14
von EyDu
Ganz so schnell solltest du vielleicht nicht aufgeben. Sehe ich es richtig, dass du eine Kamera hast und du die Daten einmal als Livestram laufen lassen willst (Bibliothek 1) und gleichzeitig speichern willst (Bibliothek 2); dies scheitert aber, da du natürlich die Kamera parallel ansprechen kannst. Einzeln jedoch funktionieren jedoch Livestream und Speichern?
Dann solltest du dir vielleicht die Schnittstellen zwischen Kamera und den Bibliotheken anschauen. Ein möglicher Weg ist die Erzeugung eines eigenen "Empfängers" welcher selbst zwei virtuelle Kameras als Ausgang hat:
Code: Alles auswählen
/ -> Bibliothek 1
Kamera -> Dein Modul -|
\ -> Bibliothek 2
Das hört sich natürlich erstmal viel einfacher an als es ist. Daher würde ich mich wahrscheinlich erstmal nach einer vorhandenen Lösung umschauen. Vielleicht könnte man mit VLC etwas zusammenbasteln.
Re: Mit 2 verschiedenen Libraries auf 1 Webcam zugreifen
Verfasst: Sonntag 4. Juli 2010, 09:51
von Dav1d
oder mit dem Mplayer, -dumpstream und -dumpfile sollten reichen
Re: Mit 2 verschiedenen Libraries auf 1 Webcam zugreifen
Verfasst: Sonntag 4. Juli 2010, 17:17
von Barabbas
Ich habe sowas (nur mit einer TV-Karte, aber die Schnittstelle ist die selbe) sehr schön mit GStreamer gelöst. Dort gibt es (ebenso wie bei VLC) ein tee-Element, mit dem du das Signal an zwei weitere Elemente durchreichen kannst (Speichern und Abspielen in diesem Fall).
Da GStreamer unter Windows immer etwas Gefrickel ist, willst du es vll. erstmal mit VLC versuchen. Folgender Befehl läuft bei mir auf Linux super - musst du aber sicher etwas anpassen: Video4Linux gibt es unter Windows vermutlich nicht *gg - aber ich denke doch, dass Video4Windows ähnliche Funktionalität bietet (bzw. umgekehrt, anscheinend ist V4W ja das "Original")
Code: Alles auswählen
vlc v4l2:// –v4l2-dev /dev/video0 –input-slave alsa:// –v4l2-caching 300 –v4l2-width 640 –v4l2-height 480 –v4l2-input=1 –v4l2-standard 2 –v4l2-fps 25 –sout ‘#duplicate{dst=”transcode{vcodec=mpgv,vb=1024,acodec=mpga,ab=128,venc=ffmpeg,aenc=ffmpeg,deinterlace,audio-sync}:std{access=file,mux=ps,dst=test.avi}”,dst=display’
Hier nochmal das gleiche für GStreamer:
Code: Alles auswählen
gst-launch-0.10 v4l2src device=/dev/video0 ! tee name=videoout ! queue ! video/x-raw-yuv,width=640,height=480 ! queue ! theoraenc quality=30 ! muxout.
osssrc device=/dev/dsp ! tee name=audioout ! queue ! audio/x-raw-int,rate=44000 ! queue ! audioconvert ! vorbisenc ! muxout.
oggmux name=muxout ! filesink location=media2.ogg
videoout. ! queue ! ffmpegcolorspace ! xvimagesink
audioout. ! queue ! osssink
Besten Gruß,
brb