Već par meseci radim na više malih projekata, koji se u suštini mogu uklopiti u jedan veći, ali hajde, rekoh da malo podelim neke delove sa svima. Odmah da naglasim da je tehnologija koja se ovde prilikom kreiranja video nadzora besplatna. Šta to znači za nas? Pre svega, dobijamo ono što napravimo, što nam daje neograničene mogućnosti, kao i prilagođavanje našim potrebama. Pre nego što se upustim u ovaj, ne tako mali zadatak, da vas malo uputim u ceo ovaj proces, jer nas očigledno čeka dosta posla. Pravićemo modifikovanu verziju mog čitača tablica, koji u osnovi ima dosta zajedničkih tačaka, sem što ne čuva arhivu, već analizira tablice i izdaje upozorenja itd. Krenimo onda od potrebnih stvari.

Što se tiče operativnog sistema, nismo probirljivi, možemo da radimo na vindovsu, linuksu (hajde da dodam i GNU deo, da ne plaču) i meku. Kako nam je jednostavnost bitna, primarni jezik će nam biti pajton, zato što je lako praviti programe u njemu, jednostavan je, može se naučiti za kratko vreme itd… Dalje, pošto radimo sa slikama, treba nam nešto što će nam pomoći pri analizi slike, manipulaciji i slično, te ćemo koristiti proverenu stvar, OpenCV. Jeste malo teži za početnika, postoje i lakše varijante, ali moramo da se malo čeličimo.

Za sada samo čuvamo arhivu, ali moramo nekako i da je gledamo, te nam treba nešto gde možemo napraviti i GUI deo, pa ćemo tu koristiti Qt ili preciznije, PyQt . Od ostalih zahteva imamo uglavnom neke pajton module, ali to nije problem, tako da ćemo ih naglasiti kada dođemo do njih. Da, pre nego što nastavim, jedan odličan sajt koji povezuje pajton i opencv je pyimagesearch, pretražite ga malo, ima dosta korisnih stvari, a tu je i instalacija opencv-a na linuks i mek.

Osnove protokola

Hajmo najzad da krenemo sa nečim konkretnim. Pre svega, oprema je tu, trebamo se povezati. Kamere imaju uglavnom dve vrste protokola za prenos slike, to su http i rtsp. Http protokol, uprošćeno, daje niz celih slika u kontinuitetu i ima .mjpg ekstenziju. Taj protokol koristimo kada nam je bitan kvalitet, jer se svaka slika šalje posebno, pa ga koristimo za neke bitne stvari (čitanje tablica npr.). RTSP je malo drugačiji, on šalje delove slike koji su se promenili, pa se tako sklapa slika. On je dosta brži i lakši za mrežu jer se šalje manje podataka, ali kvalitet nije uvek najbolji. Više puta se dešavalo da određeni frejmovi budu zamućeni, hoda čovek a ruka se razvlači za njim i tako to.

Ipak, kada gledamo nešto uživo, sasvim je zadovoljavajući. Sada kada to znamo, krenimo dalje. Imamo dve opcije što se tiče samog dekodiranja pristiglih slika, bar za mjpg deo. Možemo sami to raditi ili da OpenCV to radi za nas. Razlika je u tome što prilikom dekoriranja pomoću OpenCV-a trošimo više rama, a ako sami to radimo više CPU-a. Držaćemo se jednostavnosti, ram nije skup, pa idemo preko OpenCV-a ali ćemo pokazati kako to sami da uradimo jer će nam trebati za drugi deo programa, vraćanje arhive.

Čitanje slika sa kamere

Kada razbijemo bilo koji JPEG sliku (npr preko hex editora) možemo videti da svaka slika počinje ff d8 a završava se ff d9 markerom, sve između toga predstavlja samu sliku. to znači da možemo otvoriti konekciju sa kamerom i čitati strim, dekodirati slike i čuvati ih. da vidimo primer:

Direktan ekvivalent ovoj skripti, ali strim preko OpenCV-a je sledeći:

Ok, napravimo malu pauzu, isprobajte malo konektovanje, pročitajte koji tutorijal, budite u toku, pa se čitamo uskoro.

Zanimljivo, hmm? Pokaži svima!