Mit 2 verschiedenen Libraries auf 1 Webcam zugreifen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
OpenCV
User
Beiträge: 20
Registriert: Mittwoch 17. Februar 2010, 15:29

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
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

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.
Das Leben ist wie ein Tennisball.
OpenCV
User
Beiträge: 20
Registriert: Mittwoch 17. Februar 2010, 15:29

Ich verwende ja eigentlich Ubuntu, bin aber von der Schule aus verpflichtet, Windows zu verwenden :cry:

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?
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

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.
Das Leben ist wie ein Tennisball.
Dav1d
User
Beiträge: 1437
Registriert: Donnerstag 30. Juli 2009, 12:03
Kontaktdaten:

oder mit dem Mplayer, -dumpstream und -dumpfile sollten reichen
the more they change the more they stay the same
Barabbas
User
Beiträge: 349
Registriert: Dienstag 4. März 2008, 14:47

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
Antworten