Zammoda VS 2004 Zammoda VS 2004
Projektni zadatak Kamera Motor Klijent - Poslužitelj Web design

Odabir kamere

Odabir kamere bio je ograničen na dva tipa: USB kamere za telekonferencije (eng. webcam) i analogne kamere za industrijsku primjenu. Najveći problem pri odabiru je predstavljalo postojanje upravljačkih programa (eng. device driver) za Linux operativni sustav. Kod analognih kamera problem je mnogo veći jer one zahtijevaju posebne kartice za digitalizaciju slike (eng. capture cards). Linux "driveri" za takve kartice se teško pronalaze, a samo pisanje upravljačkih programa za njih je vrlo složen posao koji višestruko nadilazi okvire ovog kolegija.

S druge strane, USB kamere imaju dobru podršku za Linux operativne sustave. Budući da svi proizvođači USB kamera koriste nekoliko različitih kontrolera (eng. chipset) za svoje kamere, cilj je samo saznati koji se kontroler koristi u određenoj kameri, te instalirati određen upravljački program za taj kontroler.

U projektu su korištene dvije kamere. "TerraCAM USB Pro" kamera proizvođača TERRATEC i "Quickcam Express" kamera tvrtke LOGITECH.

Prema specifikacijama proizvođača, "TerraCAM USB Pro" kamera koristi OmniVision OV511+ kontroler sa OV7620 senzorom (#ID=112). Linux podrška za taj kontroler izrađena je kroz OV5xx "driver". On je u uključen u većinu Linux distribucija, a najnovija verzija je dostupna ovdje. U distribucijama se mogu naći i nestabilne verzije tog "drivera" koje ne mogu ispravno prepoznati spomenutu kameru. Stoga se preporuča korištenje zadnje stabilne verzije (u trenutku pisanja ovog materijala, najnovija stabilna verzija nosi oznaku 1.65).

S druge strane, Quickcam Express kamere imaju podršku kroz tzv. "qc-usb" upravljački program.

Instalacija prethodno navedenih upravljačkih programa je relativno jednostavna, te je dovoljno pratiti uputstva koja dolaze u paketu s njima ("README" datoteke i dodatna uputstva s weba). Ovdje valja izdvojiti Linux Mandrake distribuciju koja ima ugradeno automatsko prepoznavanje USB uredaja i podizanje pripadajuceg "drivera" odmah nakon prikljucenja uredaja (eng. hotplug).


Streamer

"Streamer" je Linux program za prikupljanje slike ili videa (pokretne slike) s video uređaja. Program omogućuje pohranu slike u .jpeg formatu i pohranu videa u .mov QuickTime formatu. Pokreće iz komandne linije i to ga čini upotrebljivim za korištenje kroz programe pisane u skriptama ljuske (eng. shell). Treba napomenuti da "streamer" dolazi kroz paket "Xawtv", a kao zaseban program je dostupan samo za Debian Linux distribuciju.

Streamer ima mnogo parametara koji se mogu podesiti prilikom dohvata slike ili video zapisa. U ovom izvještaju neće biti opisane sve moguće opcije već samo one koje su korištene za potrebe ovog projekta.

Linija kojom se poziva "streamer" proces u ovom projektu izgleda ovako:

system("streamer -q -o frame.jpeg");

Prekidač -q uključuje tiho izvršavanje programa bez izlaznih poruka, dok se prekidačem -o definira izlazni oblik zapisa. U ovom slučaju izlazni zapis je slika u JPEG formatu frame.jpeg.

Program u koji je ugrađena ta linija u potpunosti je prikazan u nastavku:

    #include <stdio.h>
	#include <stdlib.h>

		int main () {

	while (1) {

      		//system call for camera inicialization
 	     	system("streamer -q -o frame.jpeg");
  	
  		//pause for streamer to save the image
  		sleep (.5);
  	                                
    	  	//system call for copying buffer data to "tosend.jpg"
		system("cp frame.jpeg tosend.jpg");
	
		//system call for removing buffer - streamer doesn't know how to do that
		system("rm frame.jpeg"); 
	                                                                       
		}

	return (0);
	}

Kao što se vidi iz samog programa, prikaz s kamere se prikuplja cijelo vrijeme za koje je program aktivan. Kako bi se "streamer" ispravno izvodio u petlju su dodani pozivi ljuske. Prvi poziv kopira trenutni prikaz iz datoteke frame.jpeg u datoteku tosend.jpg, a drugi poziv briše datoteku frame.jpeg. Brisanje datoteke je nužno jer "streamer" ne može pisati u datoteku koja već postoji. Datoteka tosend.jpeg predstavlja međuspremnik za "socket" mehanizam. Time se onemogućuje da se trenutni prikaz slike miješa s prikazom koji se tek prikuplja s kamere.

Gornji program izvršava se na procesnom računalu. Pri pokretanju cijelog sustava, nužno ga je pokrenuti prije cserver programa koji služi za prijenos slike.

Korisni linkovi: