USB webkamera
2017. november 01. írta: eNeS

USB webkamera

Igazából nem tervezem a lakásom bekamerázását, de a jövőbeli projektek megvalósíthatóságának felméréséhez jó kiindulási alap, ha megismerkedem a lehetőségekkel. Így megpróbálkoztam a leggagyibb neten fellelhető USB webkamerával:

USB Retractable Web Camera Mini

usbcam.jpg

Amiről ezúton is lebeszélnék mindenkit, és én sem veszek többet.. Cirka 700Ft körüli áron mozog, és hangzatos 5-8Megapixel, illetve van ahol 30-50Megapixelesként reklámozzák. Kis utánajárást követően persze azonnal kiderül, hogy valójában egy mezei 640x480 pixeles felbontású kameráról van szó, ami érdeklődők kedvéért 0.3Mpixel.

Vannak természetesen valódi HP-Microsoft-Logitech márkájú webkamerák, amik tudnak ennél nagyobb 1Mpixeles (HD/720p) vagy akár 2Mpixeles (Full HD/1080p) üzemmódot is, előbbiek 5ezer Ft-tól indulnak, utóbbiak 25ezer Ft-tól, ezek ismeretében a 30Mpixeles 700Ft-os kamera vicc kategória.

Ezek ellenére is feltétlenül be akartam szerezni egyet, próbára. És lőn:
Megérkezése után egy OTG kábellel máris ráeresztettem az RPI Zero W-re. A driver a kernelben van, így sokat nem kell vesződni a telepítéssel, ki kell adni az alábbi parancsot:

sudo modprobe uvcvideo

Ezután /dev/video0 eszközként elérhetővé válik a kamera, ha nincs más aktív videoeszköz a rendszeren.
Az alábbi parancs segítségével azonosítani lehet az USB azonosítója alapján a típusát.

lsusb

A kimenete:
"Bus 001 Device 002: ID 1908:2311 GEMBIRD"

Az alábbi parancs pedig megmondja az igazat a támogatott felbontásokról:

v4l2-ctl --list-formats-ext

        Index       : 0
        Type        : Video Capture
        Pixel Format: 'YUYV'
        Name        : YUYV 4:2:2
                Size: Discrete 640x480
                        Interval: Discrete 0.033s (30.000 fps)
                        Interval: Discrete 0.067s (15.000 fps)
                Size: Discrete 352x288
                        Interval: Discrete 0.033s (30.000 fps)
                        Interval: Discrete 0.067s (15.000 fps)
                Size: Discrete 320x240
                        Interval: Discrete 0.033s (30.000 fps)
                        Interval: Discrete 0.067s (15.000 fps)
                Size: Discrete 176x144
                        Interval: Discrete 0.033s (30.000 fps)
                        Interval: Discrete 0.067s (15.000 fps)
                Size: Discrete 160x120
                        Interval: Discrete 0.033s (30.000 fps)
                        Interval: Discrete 0.067s (15.000 fps)

 

Sokkoló ugye? Képessége teljében 640x480 felbontást tud, 30fps-el. Ráadásul YUYV módban, vagyis tömörítetlen képeket ad, nem adatfolyamot. Ez a hiányossága majd akkor fog feltűnni, ha az ember mozgóképet szeretne, pl MJPEG-et továbbítani róla. Ugyanis a kamera által adott képeket előbb a gépnek kell tömörítenie, mielőtt továbbíthatná a hálózaton, nagy terhelést és persze melegedést okozva a központi vezérlőn. A drágább kategóriájú webkamerák között van olyan, ami tud önmagában MJPEG tömörített adatfolyamot kiadni, de ez nem ilyen.

Mire lehetne ezt mégis használni? Asztali gépünkön pl Skype beszélgetés alkalmával nagyszerű nagymama formájú foltokat tud továbbítani bélyegméretben.
Raspberryn maximum azt tudom elképzelni, hogy időzítve állóképet tudunk készíteni, a bejárati ajtó kukucskáló nyílása előtt elhelyezett kamerán, hogy lássuk ki csengetett.

A szükséges fswebcam program telepítése:

sudo apt-get install fswebcam

A képet pedig így lehet parancssorból JPG formátumba menteni:

fswebcam -r 640x480 webcamtest.jpg

webcamtest.jpg

Látható, hogy a színek is meglehetősen életlenek, a felbontás pedig valóban csak jelzésértékű. (szemüveg nélkül is látom a pixeleket benne)

Aki mindenképpen mozgóképet szeretne, az mjpg-streamer nevű alkalmazás segít ebben.
Telepítése:

sudo apt-get install cmake libjpeg8-dev
git clone https://github.com/jacksonliam/mjpg-streamer.git
cd mjpg-streamer-experimental
make
sudo make install

Van egy start.sh állomány a mappájában, azzal indítható a szolgáltatás, vagy konkrétan ilyen módon:

./mjpg_streamer -i "./input_uvc.so" -y -o "./output_http.so -w ./www"

Ezt kiadva immár elérhető a gép IP címén böngészőből - melyre az USB kamera van csatlakoztatva - egy folyamatos mozgókép adatfolyam (stream).

mjpegstreamer.jpg

Mivel mint említettem maga a kamera nem ad továbbítható streamet, az mjpeg-streamer program az RPI Zero egymagos processzorával végezteti a tömörítést, ami 90% (néha inkább 100%) terhelést okoz, megakadályozva minden további, hasznos művelet végzését a háttérben a mikrogépen, és mellesleg megfelelő fűtéssel ellátva a körülötte levő alkatrészeket. Persze a felbontás és a másodpercenkénti felvett képek számának (fps) csökkentésével ezen még lehet javítani, de van ennél lejjebb? Egy négymagos Orange Pi, vagy többmagos Raspberry PI 3 valószínűleg jobban teljesítene ilyen téren. Néha egy-egy csík (képhiba) is becsúszik, ez valószínű a kamera hibája, nem a programé. És ez még csak élőkép, szó sincs arról, hogy rögzítenénk bármilyen módon a felvételt.

A bejegyzés trackback címe:

http://bitekmindenhol.blog.hu/api/trackback/id/tr2813138578

Kommentek:

A hozzászólások a vonatkozó jogszabályok  értelmében felhasználói tartalomnak minősülnek, értük a szolgáltatás technikai  üzemeltetője semmilyen felelősséget nem vállal, azokat nem ellenőrzi. Kifogás esetén forduljon a blog szerkesztőjéhez. Részletek a  Felhasználási feltételekben.

Nincsenek hozzászólások.