mg_camera

Trochę o współpracy z kamerą: W Linuxie obsługę kamery osiągam przez spompilowanie jądra z obsługą V4L Device Drivers --> Multimedia devices --> <*> Video For Linux ewentualnie jako moduły. Do tego potrzebny jest moduł ze sterownikiem do kamery, nasze kamery obsługiwane są przez uniwersalny sterownik gspca [|http://mxhaard.free.fr/.] Różne aplikacje (takie jak mplayer) muszą być skompilowane z obsługą v4l. Poza tym nie można zapomnieć o dodaniu użytkownika do grupy video, aby użytkownik miał prawa do odczytwania danych z kamery. code format="bash" gpasswd -a username video code

Podlgląd z mplayer'a uzyskuję poleceniem: code mplayer tv:// -tv driver=v4l:device=/dev/video0:width=640:height=480 code Tutaj pierwszy problem nowsze jądra posiadają V4L2 z obsługą kompatybilności z V4L, ale gdy używam driver=v4l2 pojawia się błąd. Następnie gstreamer, wielkie możliwości za cenę koszmarnej dokumentacji, proszę spojrzeć na [|http://gstreamer.freedesktop.org/naprawde_dlugi_link.html] link do v4lsrc nie działa od kilku tygodni, a o tym że istnieje plugin o nazwie v4l2src nie ma nawet wzmianki. Obecnie dokumentacja już istnieje. Podgląd podobny jak z mplayer'a uzyskuję poleceniem: code gst-launch-0.10 v4lsrc ! 'video/x-raw-rgb,width=640,height=480' ! ffmpegcolorspace ! ximagesink code

Zapisywanie klatki do pliku równie proste: code gst-launch-0.10 v4lsrc ! 'video/x-raw-rgb,width=640,height=480' ! ffmpegcolorspace ! pngenc ! filesink location=foo0.png code Po określeniu urządzenia możemy odczytać klatki z dwóch kamer, polecenie trochę się wydłuża i wygląda następująco: code gst-launch-0.10 v4lsrc device=/dev/video0 ! 'video/x-raw-rgb,width=640,height=480' ! ffmpegcolorspace ! pngenc ! \ filesink location=foo0.png v4lsrc device=/dev/video1 ! 'video/x-raw-rgb,width=640,height=480' ! \ ffmpegcolorspace ! pngenc ! filesink location=foo1.png code

W gstreamer istnieje jeszcze element fdsink który tworzy unixowy file descriptor, później sprawdzę czy można w ten sposób przekazywać poszczególne klatki, póki co przez pliki. Zapisywanie klatek do plików powoduje ogromne opóźnienia, w najprostszej wersji działa, ale informacje uzyskane tą metodą do niczego się przydadzą, lepsze zastosowanie byłoby w generatorze liczb losowych. Część o gstreamerze jest już nieaktualna, może innym razem się do czegoś przyda.

Zrezygnowałem z używania gst-python teraz korzystam z zalet biblioteki opencv. W pythonie: code format="python" import opencv from opencv import highgui

def get_image: im = highgui.cvQueryFrame(camera) return opencv.adaptors.Ipl2PIL(im)
 * 1) funkcja do pobierania klatek z kamery i konwertowania do formatu PIL

camera = highgui.cvCreateCameraCapture(0)

code

OpenCV współpracuje tylko z interfejsem v4l, jeżeli nasz system posiada interfejs v4l2 do poprawnego działania opencv potrzebna jest dodatkowa biblioteka [|libv4l].