Kamery internetowe pod Linuksem

Kamery internetowe stają się coraz bardziej powszechne, są dołączane do wielu najnowszych modeli laptopów, czy też zaczynają pełnić rolę gadżetów. Obsługa kamer internetowych (ang. "webcam") pod Linuksem jest relatywnie łatwa, pod warunkiem że istnieje moduł kernela dla naszej kamery. W tym artykule omówię ogólnie obsługę takich kamer pod Linuksem, a także na przykładzie kamery Logitech QuickCam Messanger aplikacje, które mogą z nich korzystać.

Wstępne wymagania

Praktycznie wszystkie dystrybucje powinny oferować w kernelu pełne wsparcie dla kamer internetowych. Po pierwsze kernel musi obsługiwać USB, co jest raczej standardem we wszystkich współczesnych dystrybucjach. Najlepiej stosować nowsze wersje kernela 2.6.
Device Drivers  --->
  USB support  --->
    <*>   OHCI HCD support
    <*>   UHCI HCD (most Intel and VIA) support
Nie mniej oczywistym elementem jest obsługa Video For Linux w kernelu:
Device Drivers  --->
  Multimedia devices  --->
    <*> Video For Linux
Oprócz tego jeżeli zamierzamy stosować sterowniki korzystające ze starego API V4L1 to musimy zaznaczyć również "Enable Video For Linux API 1 compatible Layer", inaczej moduły te nie skompilują się.

Informacje o kamerze

By określić dokładny typ kamery podłączanej poprzez USB wystarczy użyć lsusb z usbutils, który listuje porty USB i identyfikatory podłączonych do nich urządzeń (Notka: wbudowane kamery są traktowane zazwyczaj jako urządzanie połączone przez USB). Oto przykład dla mojej kamery:
Bus 003 Device 004: ID 046d:08da Logitech, Inc.
Bardziej pomocne może okazać się jednak lshw:
*-usb:1
                   description: Audio device
                   product: QuickCam Messanger
                   vendor: Logitech, Inc.
                   physical id: 3
                   bus info: usb@3:3
                   version: 1.00
                   capabilities: usb-1.10 audio-streaming
                   configuration: driver=gspca maxpower=100mA speed=12.0MB/s
Dodatkowo jeżeli przy nazwie elementu (w tym przypadku "*-usb:1") pojawi się "UNCLAIMED", to oznacza iż nie ma odpowiedniego sterownika dla naszej kamery (pomocne w debugowaniu). Jeżeli nie ma "UNCLAIMED", to kamera jest gotowa do działania.

Konica, OV511, SE401, SN9C10x, STV680, W996[87]CF i niektóre kamery Philips

Moduły dla tych kamer dostępne są w kernelu. Niektóre z nich mają lepsze moduły stworzone przez osoby trzecie (patrz dalej).

Philips

Dostępne są moduły dla kamer nazywanych ToUcam, lecz nie wszystkich z nich. Nie rozwijany już częściowo zamknięty sterownik pwcx (tworzony na umowie NDA), oraz rozwijany otwarty fork pwc. W Gentoo dostępne jako odpowiednio "usb-pwc-re" i "usb-pwcx".

Logitech

Istnieje szereg modułów wspierających różne kamery. W przypadku problemów należy sprawdzić wszystkie. Dla mojej kamery potrzebne są o dziwo dwa sterowniki - gspca i qc-usb-messenger. W przypadku qc-usb-messenger (quickcam) moduł był ładowany lecz kamera nie funkcjonowała, dopiero "dodanie" gspca zapewniło obsługę kamery (sam gspca też nie działa, a chyba powinien). Dodatkowo dla gspca i spca5xx może pojawić się błąd w postaci:
open /dev/video0: No space left on device
Sterowniki te żądają dość dużych transferów i inne urządzenia USB podłączone do tego samego HUBa mogą uniemożliwiać uruchomienie kamery zabierając zbyt dużo transferu dla siebie. Należy przełączyć kamerę na inny HUB lub odłączyć zbędne urządzanie podpięte na USB.

OV51X (Sony EyeToy)

Dostępny jest sterownik OV51x, lecz dostępny jest także pochodny sterownik z obsługą dekompresji JPEG.

Ricoh R5U870

Ta kamera USB obecna jest w niektórych laptopach Sony Vaio SZ 13" i HP Pavilion DV2000/DV6000/DV9000. Nazwa sterownika to "r5u870".

Inne

Moduły gspcav1 i linux-uvc wspierają wiele kamer. Sprawdź na stronach projektu czy twoja kamera znajduje się na liście wspieranych modeli. W sieci dostępne są też sterowniki (rozwijane, bądź nie):

Ładowanie modułów

Jeżeli używasz nowszych wydań popularnych dystrybucji (korzystających z udeva do ładowania modułów i tworzenia urządzeń w /dev) to moduły powinny być ładowane automatycznie wraz z stworzeniem /dev/video0 i ewentualnie dalszych. Jeżeli /dev/video0 nie jest tworzone, a jesteś pewien że używasz poprawnego modułu to możesz utworzyć go za pomocą polecenia:
mknod /dev/video0 c 81 0

Aplikacje

Obecnie najlepszą aplikacją obsługującą kamery internetowe jest Cheese, aplikacja wchodząca w skład projektu GNOME. Oferuje ona robienie zdjęć, nagrywanie filmów, a także nakładanie różnych efektów. Dla KDE4 istnieje webkam, lecz nie udało mi się pomyślnie skompilować tej aplikacji. Poniżej Cheese w akcji.
cheese1
cheese2

Pozostałe aplikacje

Niektóre aplikacje jak mplayer, xine, vlc muszą być skompilowane z obsługą Video for Linux. W Gentoo odpowiadają im flagi v4l i v4l2. Niektóre aplikacje nie potrafią wykrywać rozdzielczości kamer, więc należy ręcznie określić rozdzielczość kamery za pomocą v4l-info z xawtv. Oto fragment zawierający informacje o rozdzielczości:
window
    VIDIOCGWIN
        x                       : 0
        y                       : 0
        width                   : 352
        height                  : 288
        chromakey               : 0
        flags                   : 0
Mplayer potrafi wyświetlać obraz z kamery:
mplayer tv:// -tv driver=v4l:width=352:height=288:device=/dev/video0
mplayer tv:// -tv driver=v4l:width=352:height=288:outfmt=rgb24:device=/dev/video0:noaudio -flip
Jeżeli nie był kompilowany z obsługą v4l zobaczymy komunikat typu:
Playing tv://.
TV file format detected.
No such driver: v4l
A jeżeli wszystko jest w porządku to powinniśmy zobaczyć okno mplayera:
cam1
gqcam to prosty i stary program do odbierania obrazu z kamery napisany w GTK+ 1. Posiada kilka dodatkowych opcji jak manipulacja obrazem i zapisywanie zdjęć. Domyślnie próbuje użyć /dev/video, jeżeli nie istnieje możemy stworzyć symlink:
ln -s /dev/video0 /dev/video
cam2
Nowszym wcieleniem tej aplikacji jest camorama dla GNOME. Natomiast użytkownicy sterowników spca5xx lub gspcav1 mogą użyć również spcaview. Aplikacja posiada szereg opcji, ale by z nich skorzystać należy przeczytać opis programu.
cam3
Można użyć także bardzo starego xawtv lub nowszego odpowiednika camE.

Do nagrywania obrazu z kamery możemy użyć mencodera dostarczanego wraz z mplayerem:
mencoder tv:// -tv driver=v4l:width=:height=:device=/dev/video0 -nosound -ovc lavc -o .avi

Z aplikacji VoIP i komunikatorów wsparcie dla kamer wideo posiania m.in. aMSN (najnowsze wersje) czy ekiga. Strumieniowanie obrazu z kamery możliwe jest za pomocą vlc czy camserv.
RkBlog

Akcesoria i różności, 13 February 2009

Comment article
Comment article RkBlog main page Search RSS Contact