Projekt OpenMV ma na celu stworzenie niedrogiego i łatwego w obsłudze modułu wizyjnego, który dałoby się oprogramowywać w języku Python. Docelowo OpenMV ma stać się "Arduino wśród modułów wizyjnych", jak opisuje autor przedstawiający aspiracje tego projektu.
Realizacja projektu rozpoczęła się około roku temu. Autor był bardzo rozczarowany ówczesną ofertą, jeśli chodzi o uniwersalne kamery i moduły wizyjne dla systemów automatyki przemysłowej oraz hobbystów. To zmotywowało go do stworzenia własnego układu, będącego lepszą alternatywą dla produktów obecnych na rynku.
Kilka miesięcy później narodziła się pierwsza wersja OpenMV. Była ona w stanie realizować podstawowe algorytmu obróbki obrazów i stała się podstawą do wytworzenia bardziej wyszukanego oprogramowania. Kolejne wersje były w stanie realizować już bardziej wyszukane algorytmy, takie jak detekcja twarzy, ekstrakcja punktów kluczowych, wyszukiwanie szablonów etc. Sama kamera oprogramowana została w C. Posiada ona prosty szeregowy interfejs (SPI/I²C/PWM), ale autor chciał rozbudować trochę system, w związku z czym stworzył własne IDE, pozwalające na oprogramowywanie układu w MicroPythonie. Dzięki IDE można pisać proste skrypty w Pythonie i podglądać bufor kamery na żywo.
Aktualnie autor pracuje nad drugą wersją OpenMV (porównanie specyfikacji sprzętowych pierwszej i drugiej wersji poniżej). Druga wersja oparta jest o szybszy procesor i posiada większej pojemności pamięć RAM.
Podstawowe cechy układu:
* Możliwość pisania skryptów w Pythonie3.
* Koszt poniżej 15 USD (przy zamówieniu 1000 układów), wliczając w to koszt wykonania czterowarstwowej płytki drukowanej.
* Zintegrowana karta microSD i/lub wewnętrzna pamięć FLASH do przechowywania skryptów oraz nagranych filmów i zdjęć.
* Nagrywanie i strumieniowanie MJPEG - do karty microSD lub poprzez zewnętrzny moduł WiFi.
* Wyprowadzenia dla rozszerzeń: wyjścia UART, PWM, SPI i I²C.
* Przyjazne dla użytkownika środowisko pracy: łatwe ładowanie i uruchamianie skryptów, szablonów i podgląd przez bufor klatek.
* 16 MB pamięci SDRAM - taka ilość pamięci obecna w OpenMV2 pozwoli na uruchomienie systemu operacyjnego uClinux na module.
* Obróbka obrazu:
- algorytm detekcji obiektów Viola-jones (kompatybilny z kaskadami OpenCV),
- dopasowywanie do szablonów z wykorzystaniem znormalizowanej korelacji wzajemnej (NCC),
- FAST/FREAK - detekcja punktów kluczowych/deskryptorów i/lub spełniających zadany opis,
- dodatkowe operacje: RGB->LAB CLUT, klastrowanie średniej, filtr mediany, skalowanie, wycinanie fragmentów obrazu, skalowanie, blitting i alfa-blending.
* Hardware:
- Procesor STM32F4xx - mikrokontroler z rdzeniem ARM Cortex-M4, taktowany 168..180 MHz. Układ wyposażony jest w precyzyjne FPU, moduł DSP i co bardzo istotne dedykowany interfejs dla kamery cyfrowej - DCMI. To połączenie sprawia, że jest to idealny układ do tego rodzaju projektu.
- Czterowarstwowa płytka drukowana (PCB). Wykorzystanie takiego laminatu pozwala na lepsze zarządzanie sygnałami, zmniejszenie emisji EMI układu oraz minimalizację wymiaru całego modułu, szczególnie w momencie, gdy obsadzone elementami są obie strony PCB.
- Sensor obrazu: OpenMV1 współpracuje z wieloma sensorami i zespołami optyki, takimi jak: OV965x (1,3 MP), OV2640(2 MP/JPEG). Wykorzystanie w projekcie sensorów w takiej samej obudowie umożliwia proste eksperymentowanie z różnego rodzaju elementami. OpenMV2 współpracuje tylko z OV2540 z zewnętrzną optyką.
- Oprogramowanie/firmware - firmware wgrywa się do układu poprzez interfejs SWD, wyprowadzony na kontaktach (raster 2 mm). Można wgrywać firmware także poprzez USB.
- Moduły rozszerzające: Układ posiada wyprowadzenia w postaci pinów (raster 2,54 mm) na których znajdują się interfejsy takie jak SPI, I²C, USART czy PWM. Dostęp do nich zapewniony jest z poziomu Pythona, co umożliwia na przykład podpięcie wyświetlacza LCD do SPI i sterowanie nim poprzez Pythona.
- Komunikacja bezprzewodowa: Możliwe jest dołączenie modułu komunikacji WiFi opartego o moduł CC3K od Texas Instruments do kamer OpenMV1 i OpenMV2. Kamera jest w stanie wysyłać po sieci strumień MJPEG do różnego rodzaju urządzeń, w tym np. na Androida. Moduł CC3K jest na tyle szybki (54 Mbps), że umożliwia transmisję na żywo danych z kamery:
Oprogramowanie
OpenMV wykorzystuje dużo różnego oprogramowania do pracy: ChaN's FatFS, CC3K SDK, liblioteki ARM DSP/Math itp. Dodatkowo można pisać skrypty kontrolującę pracę kamery w Pythonie. Co niezwykle istotne skrypty te mają dostęp do niskopoziomowych funkcji sprzętu, takich jak interfejsy wejścia/wyjścia (SPI, I²C, UART), karty microSD, interfejsu sieciowego i oczywiście samego modułu akwizycji i przetwarzania obrazu.
IDE
Autor stworzył dla OpenMV przyjazne środowisko (IDE) z wykorzystaniem Pythona, Glade i PyGTK. IDE posiada funkcję podkreślania składni i umożliwia pisanie i ładowanie do układu skryptów napisanych w Pythonie, podgląd bufora ramki (klatki) kamery, uaktualnianie firmware, a może także realizować niektóre funkcje obróbki obrazów - zapisywanie szablonów obiektów czy deskryptorów i punktów kluczowych.
Autor planuje rozwój IDE tak, aby można było komunikować się z kamerami z wykorzystaniem gniazd (socketów) w transmisji bezprzewodowej WiFi. Dzięki temu można korzystać z OpenMV w pełni bezprzewodowo, wykorzystując sieć bezprzewodową do strumieniowania obrazów i nagrań oraz do konfiguracji kamery i ładowania do niej skryptów.
Specyfikacja OpenMV1
Procesor: STM32F407 (168 MHz)
Funkcje CPU: FPU/DSP/DCMI
RAM: 196 KB SRAM
Pamięć Flash: 512 KB
Sensor: OV965x(1.3MP)/OV2640(2MP/JPEG)
Interfejsy wejścia/wyjścia: USART/SPI/I2C/PWM
USB 2.0 FS
Interfejs karty microSD: SPI
Zużycie prądu: 120 mA
Wymiary: 1.0" x 1.3"
Specyfikacja OpenMV2
Procesor: STM32F429 (180 MHz)
Funkcje CPU: FPU/DSP/DCMI/2D Acceleration
RAM: 256 KB SRAM/16 MB SDRAM(rozszerzalne do 64 MB SDRAM)
Pamięć Flash: 2 MB
Sensor: OV2640 (2 MP/JPEG)
2 x diody podczerwone
2 x kontrolery serwomotorów
20 pinów wejścia/wyjścia: USART/SPI/I2C/PWM
USB 2.0 FS
Interfejs karty microSD: SDIO (w trybie 4 bitowym)
Zużycie prądu: nie znane (jeszcze)
Wymiary: 1.6" x 2.0"
Opisywany projekt uzyskał już finansowanie poprzez kampanię crowdsourcingową na kickstarterze - https://www.kickstarter.com/projects/botthoughts/openmv-cam-embedded-machine-vision/description. Strona projektu na Kickstarerze prezentuje także szereg bardzo ciekawych dodatków do samej kamery, jakie można było zakupić w ramach kampanii (i najpewniej będzie można zakupić później):
Ekran LCD
Ten moduł pozwala na wyposażenie kamery w prosty ekran LCD. Ekran ma rozdzielczość 128 x 160 px i przekątną 1,8". Jest to kolorowy ekran TFT pozwalający na prezentowanie zbieranych przez kamerę obrazów w czasie rzeczywistym.
Macierz termostosów
Macierz firmy Melexis (MLX90620 lub MLX90621) złożoną z termostosów, wykorzystywaną do obrazowania w dalekiej podczerwieni. Matryca ma rozdzielczość 16 x 4 piksele i pozwala na pomiar temperatury. Moduł OpenMV pozwala na nakładanie obrazu z termostosów na obraz z kamery, dzięki czemu możliwa jest korelacja obu obrazów i detekcja źródeł ciepła.
Płytka prototypowa
Prosta płytka prototypowa, pozwalająca na dobudowanie własnych modułów do OpenMV. Sprzedawana wersja pokryta jest soldermaską i opisem, a wykonane w niej otwory są metalizowane. Płytka ta daje dostęp do wszystkich interfejsów wyprowadzonych z kamery.
Źródło: Link
Realizacja projektu rozpoczęła się około roku temu. Autor był bardzo rozczarowany ówczesną ofertą, jeśli chodzi o uniwersalne kamery i moduły wizyjne dla systemów automatyki przemysłowej oraz hobbystów. To zmotywowało go do stworzenia własnego układu, będącego lepszą alternatywą dla produktów obecnych na rynku.
Kilka miesięcy później narodziła się pierwsza wersja OpenMV. Była ona w stanie realizować podstawowe algorytmu obróbki obrazów i stała się podstawą do wytworzenia bardziej wyszukanego oprogramowania. Kolejne wersje były w stanie realizować już bardziej wyszukane algorytmy, takie jak detekcja twarzy, ekstrakcja punktów kluczowych, wyszukiwanie szablonów etc. Sama kamera oprogramowana została w C. Posiada ona prosty szeregowy interfejs (SPI/I²C/PWM), ale autor chciał rozbudować trochę system, w związku z czym stworzył własne IDE, pozwalające na oprogramowywanie układu w MicroPythonie. Dzięki IDE można pisać proste skrypty w Pythonie i podglądać bufor kamery na żywo.
Aktualnie autor pracuje nad drugą wersją OpenMV (porównanie specyfikacji sprzętowych pierwszej i drugiej wersji poniżej). Druga wersja oparta jest o szybszy procesor i posiada większej pojemności pamięć RAM.
Podstawowe cechy układu:
* Możliwość pisania skryptów w Pythonie3.
* Koszt poniżej 15 USD (przy zamówieniu 1000 układów), wliczając w to koszt wykonania czterowarstwowej płytki drukowanej.
* Zintegrowana karta microSD i/lub wewnętrzna pamięć FLASH do przechowywania skryptów oraz nagranych filmów i zdjęć.
* Nagrywanie i strumieniowanie MJPEG - do karty microSD lub poprzez zewnętrzny moduł WiFi.
* Wyprowadzenia dla rozszerzeń: wyjścia UART, PWM, SPI i I²C.
* Przyjazne dla użytkownika środowisko pracy: łatwe ładowanie i uruchamianie skryptów, szablonów i podgląd przez bufor klatek.
* 16 MB pamięci SDRAM - taka ilość pamięci obecna w OpenMV2 pozwoli na uruchomienie systemu operacyjnego uClinux na module.
* Obróbka obrazu:
- algorytm detekcji obiektów Viola-jones (kompatybilny z kaskadami OpenCV),
- dopasowywanie do szablonów z wykorzystaniem znormalizowanej korelacji wzajemnej (NCC),
- FAST/FREAK - detekcja punktów kluczowych/deskryptorów i/lub spełniających zadany opis,
- dodatkowe operacje: RGB->LAB CLUT, klastrowanie średniej, filtr mediany, skalowanie, wycinanie fragmentów obrazu, skalowanie, blitting i alfa-blending.
* Hardware:
- Procesor STM32F4xx - mikrokontroler z rdzeniem ARM Cortex-M4, taktowany 168..180 MHz. Układ wyposażony jest w precyzyjne FPU, moduł DSP i co bardzo istotne dedykowany interfejs dla kamery cyfrowej - DCMI. To połączenie sprawia, że jest to idealny układ do tego rodzaju projektu.
- Czterowarstwowa płytka drukowana (PCB). Wykorzystanie takiego laminatu pozwala na lepsze zarządzanie sygnałami, zmniejszenie emisji EMI układu oraz minimalizację wymiaru całego modułu, szczególnie w momencie, gdy obsadzone elementami są obie strony PCB.
- Sensor obrazu: OpenMV1 współpracuje z wieloma sensorami i zespołami optyki, takimi jak: OV965x (1,3 MP), OV2640(2 MP/JPEG). Wykorzystanie w projekcie sensorów w takiej samej obudowie umożliwia proste eksperymentowanie z różnego rodzaju elementami. OpenMV2 współpracuje tylko z OV2540 z zewnętrzną optyką.
- Oprogramowanie/firmware - firmware wgrywa się do układu poprzez interfejs SWD, wyprowadzony na kontaktach (raster 2 mm). Można wgrywać firmware także poprzez USB.
- Moduły rozszerzające: Układ posiada wyprowadzenia w postaci pinów (raster 2,54 mm) na których znajdują się interfejsy takie jak SPI, I²C, USART czy PWM. Dostęp do nich zapewniony jest z poziomu Pythona, co umożliwia na przykład podpięcie wyświetlacza LCD do SPI i sterowanie nim poprzez Pythona.
- Komunikacja bezprzewodowa: Możliwe jest dołączenie modułu komunikacji WiFi opartego o moduł CC3K od Texas Instruments do kamer OpenMV1 i OpenMV2. Kamera jest w stanie wysyłać po sieci strumień MJPEG do różnego rodzaju urządzeń, w tym np. na Androida. Moduł CC3K jest na tyle szybki (54 Mbps), że umożliwia transmisję na żywo danych z kamery:
Oprogramowanie
OpenMV wykorzystuje dużo różnego oprogramowania do pracy: ChaN's FatFS, CC3K SDK, liblioteki ARM DSP/Math itp. Dodatkowo można pisać skrypty kontrolującę pracę kamery w Pythonie. Co niezwykle istotne skrypty te mają dostęp do niskopoziomowych funkcji sprzętu, takich jak interfejsy wejścia/wyjścia (SPI, I²C, UART), karty microSD, interfejsu sieciowego i oczywiście samego modułu akwizycji i przetwarzania obrazu.
IDE
Autor stworzył dla OpenMV przyjazne środowisko (IDE) z wykorzystaniem Pythona, Glade i PyGTK. IDE posiada funkcję podkreślania składni i umożliwia pisanie i ładowanie do układu skryptów napisanych w Pythonie, podgląd bufora ramki (klatki) kamery, uaktualnianie firmware, a może także realizować niektóre funkcje obróbki obrazów - zapisywanie szablonów obiektów czy deskryptorów i punktów kluczowych.
Autor planuje rozwój IDE tak, aby można było komunikować się z kamerami z wykorzystaniem gniazd (socketów) w transmisji bezprzewodowej WiFi. Dzięki temu można korzystać z OpenMV w pełni bezprzewodowo, wykorzystując sieć bezprzewodową do strumieniowania obrazów i nagrań oraz do konfiguracji kamery i ładowania do niej skryptów.
Specyfikacja OpenMV1
Procesor: STM32F407 (168 MHz)
Funkcje CPU: FPU/DSP/DCMI
RAM: 196 KB SRAM
Pamięć Flash: 512 KB
Sensor: OV965x(1.3MP)/OV2640(2MP/JPEG)
Interfejsy wejścia/wyjścia: USART/SPI/I2C/PWM
USB 2.0 FS
Interfejs karty microSD: SPI
Zużycie prądu: 120 mA
Wymiary: 1.0" x 1.3"
Specyfikacja OpenMV2
Procesor: STM32F429 (180 MHz)
Funkcje CPU: FPU/DSP/DCMI/2D Acceleration
RAM: 256 KB SRAM/16 MB SDRAM(rozszerzalne do 64 MB SDRAM)
Pamięć Flash: 2 MB
Sensor: OV2640 (2 MP/JPEG)
2 x diody podczerwone
2 x kontrolery serwomotorów
20 pinów wejścia/wyjścia: USART/SPI/I2C/PWM
USB 2.0 FS
Interfejs karty microSD: SDIO (w trybie 4 bitowym)
Zużycie prądu: nie znane (jeszcze)
Wymiary: 1.6" x 2.0"
Opisywany projekt uzyskał już finansowanie poprzez kampanię crowdsourcingową na kickstarterze - https://www.kickstarter.com/projects/botthoughts/openmv-cam-embedded-machine-vision/description. Strona projektu na Kickstarerze prezentuje także szereg bardzo ciekawych dodatków do samej kamery, jakie można było zakupić w ramach kampanii (i najpewniej będzie można zakupić później):
Ekran LCD
Ten moduł pozwala na wyposażenie kamery w prosty ekran LCD. Ekran ma rozdzielczość 128 x 160 px i przekątną 1,8". Jest to kolorowy ekran TFT pozwalający na prezentowanie zbieranych przez kamerę obrazów w czasie rzeczywistym.
Macierz termostosów
Macierz firmy Melexis (MLX90620 lub MLX90621) złożoną z termostosów, wykorzystywaną do obrazowania w dalekiej podczerwieni. Matryca ma rozdzielczość 16 x 4 piksele i pozwala na pomiar temperatury. Moduł OpenMV pozwala na nakładanie obrazu z termostosów na obraz z kamery, dzięki czemu możliwa jest korelacja obu obrazów i detekcja źródeł ciepła.
Płytka prototypowa
Prosta płytka prototypowa, pozwalająca na dobudowanie własnych modułów do OpenMV. Sprzedawana wersja pokryta jest soldermaską i opisem, a wykonane w niej otwory są metalizowane. Płytka ta daje dostęp do wszystkich interfejsów wyprowadzonych z kamery.
Źródło: Link
Fajne? Ranking DIY
