OpenMV – przetwarzanie obrazu na STM32

OpenMV – przetwarzanie obrazu na STM32

Po długim oczekiwaniu dotarła do mnie w końcu płytka OpenMV, więc mogłem zabrać się za testy. W tym artykule postanowiłem podzielić się moimi spostrzeżeniami, które pojawiły się podczas pierwszych testów.

Z założenia, platforma ta miała umożliwić szybki start z przetwarzaniem obrazu na STM32.

OpenMV to kolejny startup, jego twórcy mieli na celu stworzenie platformy do komputerowego przetwarzania obrazu w oparciu o mikrokontroler. W dużym uproszczeniu, można powiedzieć, że OpenMV to kamerka, micro-python oraz biblioteki do rozpoznawania obrazu pracujące na STM32.

Więcej informacji znaleźć można na stronie projektu. Nie ukrywam, że moje pierwsze skojarzenie było: "to nie zadziała". Jednak po usłyszeniu bardzo pochlebnych opinii o tym projekcie postanowiłem zaryzykować i zamówić płytkę.

Sama płytka kosztuje 75$. Jednak to nie koniec kosztów. Dochodzi przesyłka - 26$, a zanim obierzemy paczkę trzeba jeszcze wypełnić deklarację celną... I zapłacić VAT, czyli dodatkowe 23% plus koszty obsługi. Razem wyszło trochę ponad 100 USD plus trochę ponad 100 zł... Czyli jakieś 500 zł patrząc po dzisiejszym kursie dolara.

Cena trochę zaporowa, ale skoro pieniądze już wydane, nie ma co narzekać, czas rozpakować nową zabawkę. Płytka przychodzi w kopercie, wystarczy przykręcić obiektyw do kamerki, podłączyć kabelek USB (nie jest dołączany do zestawu) i można zaczynać zabawę.

Oprogramowanie OpenMV

Niewątpliwym plusem projektu jest przygotowane oprogramowanie. Możemy pobrać bardzo proste w obsłudze (bo wzorowane mocno na arduinowym) środowisko programistyczne.

Programy piszemy w micro-pythonie, co jest faktycznie bajecznie proste. Osoby które kiedyś lubiły Bascom-a, powinny pokochać ten dialekt języka. Zamiast skomplikowanej zabawy z rejestrami mamy banalne, bardzo intuicyjne programowanie wysokopoziomowe.

Do płytki dołączone są biblioteki obsługujące większość modułów peryferyjnych, w tym oczywiście samą kamerkę. Więcej o bibliotekach znajdziemy w udostępnionej dokumentacji.

Razem ze środowiskiem programistycznym dostajemy też sporą liczbę przykładów (podobnie jak do Arduino). Nie ukrywam, że pierwsze godziny minęły mi na zabawie tymi właśnie programami. Niestety szybko wyszły pierwsze problemy. Okazuje się, że nie wszystkie programy działają. Część działa tylko na wybranych płytkach, a ich uruchomienie kończy się zawieszeniem układu.

Sprzęt dostępny na OpenMV

Zanim przejdziemy dalej, krótkie podsumowanie sprzętu, który znajdziemy w OpenMV:

  • mikrokontroler STM32F427 (Cortex-M4, 180MHz, 1MB flash, 256KB SRAM),
  • przetwornik obrazu OV7725 (VGA 0.3 Mpx, 640x480),
  • gniazdo kart micro-sd,
  • gniazdo micro-usb do komunikacji i zasilania,
  • dioda RGB oraz IR,
  • 9 pinów I/O.

Szczegóły widoczne są na poniższej grafice:

Ogólne wrażenia

Nie ukrywam, że początki zabawy z płytką były fantastyczne, byłem pod dużym wrażeniem możliwości układu. Jednak pierwsze oczarowanie szybko minęło.

Pierwsze, co mnie zaskoczyło, to rozdzielczość obrazu z kamery. O ile przetwornik obsługuje rozdzielczość VGA (0.3 Mpx), to już sama płytka maksymalnie pracuje w QVGA, czyli 320x240.

Kolejne rozczarowanie, to liczba klatek na sekundę. Rozdzielczość już znamy, FPS co ciekawe jest bardzo zmienny... Bywa, że możemy osiągnąć 30 FPS, a najczęściej jest to jednak 10-12 klatek, ale jeśli zasłonimy kamerę to wynik spadnie do 8 FPS.

Trochę poszukałem na ten temat w dokumentacji i jest to chyba spowodowane kompresją. Co ciekawe efekt występuje zarówno przy włączonym, jak i wyłączonym podglądzie obrazu.

Drugie rozczarowanie to algorytmy przetwarzania obrazu. Niby działają, ale porównywanie ich z OpenCV, to jakby porównywać małego fiata i ferrari. Oba jeżdżą, ale to tyle podobieństw. Kolejną rzecz, która szybko mnie rozdrażniła, to micro-python. Fakt, na mikrokontrolerze nie można oczekiwać cudów, to nie jest jednak pełny Python - trzeba pamiętać o wielu ograniczeniach.

Więcej informacji na temat płytki znaleźć można na stronie zakończonej kampanii (Kickstarter):

Podsumowanie

Pierwsze momenty z OpenMV były zaskakująco pozytywne - projekt daje łatwą i szybką możliwość spróbowania sił z komputerowym przetwarzaniem obrazu.  Niestety euforia szybko zamieniła się w rozczarowanie.

Nie pomaga też oparcie projektu na micro-pythonie, który chociaż miły, łatwy i wygodny, to jednak zabiera cenne zasoby. Natomiast tym co moim zdaniem dyskwalifikuje ten projekt jest jego cena. Za cenę płytki OpenMV można kupić Raspberry 3 z czterema rdzeniami Cortex-A, 1GB pamięci, kamerą 5 Mpx i pełnym Pythonem. Gdybym miał drugi raz kupować taką płytkę, to wybrałbym coś innego. Moim zdaniem to tylko bardzo droga ciekawostka.

Plusy:

  • łatwe w instalacji i obsłudze środowisko,
  • podgląd bufora obrazu,
  • prosty język programowania,
  • "zaskakujące, ale to działa".

Minusy:

  • cena, cena, cena,
  • za słaby mikrokontroler,
  • za mało pamięci RAM,
  • koszmarnie niska rozdzielczość,
  • bardzo mała liczba klatek na sekundę,
  • ograniczone możliwości bibliotek, szybko dochodzi konieczność pisania w C lub asm,
  • brak możliwości pracy zdalnej,
  • bardzo mało wyprowadzonych pinów.

kamera, obraz, przetwarzanie, stm32

Trwa ładowanie komentarzy...