5

Z kamerą wśród malin – wprowadzenie

Na samym początku cyklu „Malinowe Przepisy” przyjąłem pewien schemat pisania artykułów. Chodzi o to, że w momencie rozpoczynania nowego tematu, najpierw staram się przedstawić ogólne informacje, a dopiero w kolejnych odsłonach opisywać konkretne przykłady czy rozwiązania. Autorem wpisu jest Rafał Świętonowski. Czasami może się wydawać to niepotrzebne ponieważ niewielkim nakładem pracy, każda zainteresowana osoba może takie […]

Na samym początku cyklu „Malinowe Przepisy” przyjąłem pewien schemat pisania artykułów. Chodzi o to, że w momencie rozpoczynania nowego tematu, najpierw staram się przedstawić ogólne informacje, a dopiero w kolejnych odsłonach opisywać konkretne przykłady czy rozwiązania.

Autorem wpisu jest Rafał Świętonowski.

Czasami może się wydawać to niepotrzebne ponieważ niewielkim nakładem pracy, każda zainteresowana osoba może takie informacje znaleźć samemu ale myślę, że dla pewnego porządku i systematyczności (przydatne podczas czytania całego cyklu) przekazu informacji, pozostanę przy tym podejściu.

Moduły kamer przeznaczone dla Malinki

12Moduły kamer (zwykły i Pi NoIR) podpinane są za pomocą odpowiedniej taśmy do portu CSI Malinki, który znajduje się za portem Ethernet (lub miejscem na ten port w przypadku wersji A RPI).

Obydwa moduły posiadają identyczne parametry techniczne, oczywiście z pewną różnicą w przypadku wersji Pi NoIR. Moduły posiadają rozdzielczość pięć megapikseli co przekłada się na maksymalną rozdzielczość wykonywanych zdjęć 2592×1944 pikseli. Kamerka pozwala na nagrywanie wideo w wysokiej rozdzielczości i obsługuje następujące tryby wideo: 1080p30, 720p60 i VGA90.

Jak już wspomniałem Pi NoIR umożliwia wszystko to co zwykły moduł ale z jedną różnicą. Wersja Pi NoIR nie filtruje światła podczerwonego czyli jej matryca jest czuła na promieniowanie z zakresu IR. W takim przypadku możemy ją wykorzystać w nocy lub w ciemnych pomieszczeniach, wypełnionych (np. za pomocą diody LED IR) niewidocznym dla ludzkiego oka światłem z zakresu podczerwieni. Z tej właściwości modułu Pi NoIR często korzystają miłośnicy przyrody, tej w nocnym wydaniu :)

Dokładną specyfikację techniczną modułu kamery dla RPI można odszukać tutaj.

To co istotne jeżeli chodzi o wszelkie maści dodatki do RPI, to łatwość obsługi, dostępność oprogramowania i API a w przypadku kamer także pełne wsparcie sprzętowe. Oczywiście nikogo nie trzeba przekonywać, że brak zapotrzebowania na moc obliczeniową procesora w tak „mocnym” sprzęcie jak RPI ma znaczenie :) Oczywiście nie dotyczy to najnowszej odsłony RPI – wersji PI 2 ;)

Aby taki moduł kamery działał prawidłowo i był widziany przez Malinkę, oprócz podpięcia go w odpowiedni port RPI, musimy odpowiednio przygotować oprogramowanie systemowe. Do tego celu służy dobrze już nam znana aplikacja raspi-config.

Ta prostota obsługi nie ogranicza jednak możliwości wykorzystania kamerek do zaawansowanych projektów. Ma na to wpływ spora ilość dostępnego oprogramowania. Moduł może być „sterowany” za pośrednictwem API MMAL i V4L oraz wielu gotowych bibliotek takich jak np. biblioteka Picamera dla Pythona – jest to interfejs Pythona do modułu kamery dla wersji: Python 2.7 (lub nowszy) lub Python 3.2 (lub nowszy).

Przydatne narzędzia czyli jak komunikować się z kamerą

Istnieje kilka sposobów współpracy z modułem kamery. Pierwszym, najprostszym bo dostępnym z poziomu świeżo zainstalowanego systemu Raspbian, jest użycie narzędzi obsługiwanych z linii poleceń terminala.

W Raspbianie mamy do dyspozycji trzy, specjalnie przygotowane aplikacje obsługujące moduły kamerek:

  • raspistill – służy do przechwytywania obrazu i zapisywania go jako fotografii,
  • raspiyuv – służy do przechwytywania obrazu i zapisywania go jako nieprzetworzone pliki graficzne
  • raspivid  – służy do przechwytywania wideo

Wszystkie aplikacje zostały tak napisane aby skorzystać z API MMAL w wydaniu Broadcom’a dla rozwiązań opartych o architekturę Videocore 4. API MMAL jest prostsze w użytkowaniu niż to co oferuje OpenMAX (API modułu kamery) i niejako stanowi warstwę pośrednią.

A jak to działa w praktyce ? Kiedy korzystamy z powyższych aplikacji to używane są cztery komponenty API OpenMAX (MMAL). Do tych komponentów należą: aparat, podgląd, koder oraz null_sink (odrzucanie wszystkich danych wejściowych, np. przechwytywanie danych podczas wyłączonego podglądu). Wszystkie aplikacje używają komponentu aparat, raspistill używa składnika kodowanie obrazu, raspivid używa składnika kodowania wideo a raspiyuv przesyła dane (YUV lub RGB) bezpośrednio z komponentu aparat do pliku.

A jak sprawa wygląda z podglądem tego co przesyła kamerka ? Ekran podglądu może być wyłączony (obraz przesyłany jest wtedy do komponentu null_sink), może być używany w trybie pełnoekranowym lub skierowany do konkretnego obszaru na ekranie. Ramki podglądu  (nawet w przypadku kiedy nie są wyświetlane) są stosowane do obliczania ekspozycji i balansu bieli. Sterowanie przysłanymi danymi może polegać na przekierowaniu ich do pliku, pominięciu zapisu i podglądzie albo przesłaniu ich na standardowe wyjście. W przypadku tych prostych aplikacji (mających jednak bardzo dużo możliwości konfiguracyjnych), możemy poćwiczyć całkiem skomplikowane rozwiązania.

Kolejnym sposobem na obsługę modułu kamery jest wykorzystanie dedykowanych bibliotek (interfejsów), takich jak python-picamera. Zastosowanie tej biblioteki pozwala na programowanie bardziej skomplikowanych skryptów obsługujących kamerę, także w odniesieniu do portu GPIO (najprostszy przykład to używanie przycisków do sterowania kamerą).

Istnieją jeszcze inne rozwiązania, czasami będące niejako wariacjami na temat powyższych dwóch, tworzone przez miłośników Malinki: GUI Pi Vision, oprogramowanie motion czy Rpi Cam Web Interface.

Potencjalne zastosowania czyli w co się bawić

Ile głów, tyle pewnie możliwych zastosowań modułu kamery. Najczęściej oczywiście RPI plus kamera kojarzy się z systemem monitorowania (także z wykrywaniem ruchu). W tym temacie możemy mieć też dużo możliwości. Poczynając od najprostszych rozwiązań, przesyłających (streaming) obraz z kamery na jakiś ekran, przez te bardziej rozbudowane z interfejsem WWW służącym do sterowania kamerą a kończąc na tych, które dodatkowo przysyłają informacje o zdarzeniach na odległe urządzenia. Moduł kamery możemy także wykorzystać w technologii robienia zdjęć poklatkowych a komunikacja między RPI, kamerą i dodatkowymi elementami korzystającymi z portu GPIO może posłużyć do wykonania całkiem interesujących rozwiązań (np. wideo domofon).

Bardzo istotnym elementem całej układanki są szerokie możliwości programowania całego zestawu (gotowe oprogramowanie, biblioteki, dokładna dokumentacja) i myślę, że właśnie to „zaplecze” jest głównym powodem, dla którego RPI nadal, mimo dużo mocniejszych urządzeń na rynku, cieszy się niesłabnącym powodzeniem.

W kolejnych artykułach odniosę się za pomocą przykładów i gotowych konfiguracji do wyżej wymienionych możliwości zastosowań zestawu: RPI (także z GPIO) plus kamera plus oprogramowanie.