Skocz do zawartości
FlyingDutch

CMOS Camera Sensor(OV7670) - filtr wykrywanie krawędzi.

Pomocna odpowiedź

Hej!

Bacznie obserwuję Twoje poczynania. Rzeczywiście, używanie BRAM-u to dość duży problem i na dłuższą metę nie da się tak nic poważneg zaimplementować bez jakiegoś wielkiego układu.  W ostatnim tygodniu dostałem płytki od QMTECH z XC7A100T oraz oraz Zynq7000, niestety tylko wciąż nie uporałem się ze swoim głównym zadaniem.

Czekam (z niecierpliwością) na dalsze postępy.

Pozdrawiam, J.

  • Lubię! 1

Udostępnij ten post


Link to post
Share on other sites

Cześć,

@diablo_911 cieszę się, że posiadasz już dwa fajne zestawy uruchomieniowe FPGA. Wspominałeś w swoim poście o chęci implementacji na układzie FPGA widzenia przestrzennego - "stereo vision". Ja też jestem zainteresowany tym tematem. Tak przy okazji szukania lepszego sensora kamery do moich eksperymentów natrafiłem na dwa tanie zestawy "podwójnych" kamer:

https://www.banggood.com/OV2640-Binocular-Camera-Module-CMOS-STM32-Driver-3_3V-16001200-3D-Measurement-with-SCCB-Interface-p-1548019.html?rmmds=mywishlist&cur_warehouse=CN

https://www.banggood.com/Sipeed-2-Megapixel-OV2640-Binocular-Camera-Module-For-Maix-BIT-Maix-GO-Development-Board-p-1469504.html?rmmds=mywishlist&cur_warehouse=CN

Jeśli masz fajne linki do teorii "stereo vision" chętnie bym poczytał tam dostępne informacje (również jeśli inni użytkownicy forum znają  jakieś strony w sieci dotyczące tej tematyki - proszę podzielcie się nimi. Mam nadzieję, że teraz po pewnym czasie podzielisz się swoimi próbami z układami FPGA na forum.

Pozdrawiam

Udostępnij ten post


Link to post
Share on other sites

Cześć @FlyingDutch, wybacz, że dołączę się do wątku jako laik, ale tak z ciekawości, jaka jest przewaga implementacji takiej obróbki obrazu na FPGA nad rozwiązaniami wysokopoziomowymi, choćby OpenCV? Rozumiem, że szybkość tego pierwszego rozwiązania jest "miażdżąca" względem tego drugiego? 🙂 Czy gdyby doszło do produkcji seryjnej jakiegoś urządzenia, to wówczas też zaoszczędzimy? To jest nauka i eksperymentowanie, czy dążysz do osiągnięcia jakiegoś konkretnego celu/zrealizowania jakiegoś projektu wizyjnego na FPGA? 🙂

  • Lubię! 1

Udostępnij ten post


Link to post
Share on other sites
(edytowany)

@FlyingDutch, dziękuję za obszerną i merytoryczną odpowiedź, a także przykład użycia FPGA w przetwarzaniu wizji 🙂 Robot ma być platformą mobilną i "patrzeć" na otoczenie?

Off-topic: Tak się składa, że też jestem w trakcie budowy ramienia 5DOF i szukam jakiejś aplikacji, która efektownie pokazała, co takie ramię może zrobić, myślałem o jakimś prostym bin-picking'u; ale cena gotowych kamer typu Intel Real Sense jest zaporowa, więc jakieś takie rozwiązanie depth camera, ale "low cost" byłoby idealne, najlepiej z gotowym podpięciem do RaspberryPi 🙂 

Edytowano przez wn2001
  • Lubię! 1

Udostępnij ten post


Link to post
Share on other sites
(edytowany)
1 godzinę temu, wn2001 napisał:

@FlyingDutch, dziękuję za obszerną i merytoryczną odpowiedź, a także przykład użycia FPGA w przetwarzaniu wizji 🙂 Robot ma być platformą mobilną i "patrzeć" na otoczenie?

Off-topic: Tak się składa, że też jestem w trakcie budowy ramienia 5DOF i szukam jakiejś aplikacji, która efektownie pokazała, co takie ramię może zrobić, myślałem o jakimś prostym bin-picking'u; ale cena gotowych kamer typu Intel Real Sense jest zaporowa, więc jakieś takie rozwiązanie depth camera, ale "low cost" byłoby idealne, najlepiej z gotowym podpięciem do RaspberryPi 🙂 

Cześć,

ta ostatnia "stereo-kamera" :

https://www.banggood.com/OV2640-Binocular-Camera-Module-CMOS-STM32-Driver-3_3V-16001200-3D-Measurement-with-SCCB-Interface-p-1548019.html?rmmds=mywishlist&cur_warehouse=CN

jak na jej stronie WWW klikniesz link "Manual Click here to open" możesz pobrać przykłady kodu dla STM32F4 (Arm-CortexM4) i bardzo podstawową dokumentację. Co prawda komentarze w kodzie są po chińsku, ale zawsze jest to jakiś punkt wyjścia. Zamówiłem tą kamerę w banggood.com ale teraz trzeba z miesiąc poczekać, aż przyjdzie. Ten sam model jest na Aliexpress.com chyba poniżej 100 PLN. Nie wiem dokładnie co ten przykładowy kod realizuje - jeszcze go nie analizowałem (z tytułów projektów można wnioskować, że jest to widzenie czarno-białe, w odcieniach szarości i w kolorze). Wydaje mi się, że jest to bardzo prosty kod do skonfigurowania kamery i wysłania "na zewnątrz" strumieni danych z kamer - całą logikę związaną z przetwarzaniem trzeba by samemu "wyrzeźbić". Można też poszukać w sieci, może ktoś użył właśnie tego modelu kamery i udostępni jakich kod realizujący bardziej skomplikowane funkcje. Ja na razie chcę poszukać jakiejś teorii jak się przetwarza obraz z takich kamer  (i jak na jego podstawie zbudować model 3D otoczenia). Kinect Microsoftu udostępnia domyślnie mapę głębi ale jest dość duży i najlepsze API do niego jest niestety pod OS Windows (stąd użycie go w mobilnym robocie wymaga jakiegoś SBC mogącego uruchomić Windowsa - co jest drogie).

Co do pytania o robota - to tak ma być platformą mobilną.

Pozdrawiam

 

Edytowano przez FlyingDutch
  • Pomogłeś! 1

Udostępnij ten post


Link to post
Share on other sites
(edytowany)

Odnośnie SBC z Windowsem, zawsze można na robocie zamocować 13" notebook'a 😄 Nie będzie to zbyt eleganckie, ale powinno działać. Też ten manual pobrałem, ale nie zaglądałem do środka jeszcze. Mi chodzi właśnie o jakieś rozwiazanie "ready-to-use", :), więc chętnie na ten Kinect popatrzę, bo jak buduję "makietę stacjonarną z tym ramieniem"  to ani nie jestem ograniczony rozmiarami, ani użyciem laptopa z Windowsem, więc dziękuję za polecenie rozwiązania

Edit: Z drugiej strony, Kinect nie nadaje się raczej do pomiarów bliskich, czyli mniej niż metr. Myślałem też o umieszczeniu kamery na ramieniu robota, robię dwa zdjęcia z różnych punktów i składam już za pomocą OpenCV w mapę głębokości. Szkoda, że RPi nie ma 2 wejść dla kamer 😄

Edytowano przez wn2001

Udostępnij ten post


Link to post
Share on other sites
1 godzinę temu, wn2001 napisał:

Odnośnie SBC z Windowsem, zawsze można na robocie zamocować 13" notebooka 😄 Nie będzie to zbyt eleganckie, ale powinno działać. Też ten manual pobrałem, ale nie zaglądałem do środka jeszcze. Mi chodzi właśnie o jakieś rozwiazanie "ready-to-use", :), więc chętnie na ten Kinect popatrzę, bo jak buduję "makietę stacjonarną z tym ramieniem"  to ani nie jestem ograniczony rozmiarami, ani użyciem laptopa z Windowsem, więc dziękuję za polecenie rozwiązania

Cześć,

obawiam się, że nowego Kinect'a możesz już nie dostać (Microsoft chyba zaprzestał jego produkcji). Kinect powstał jako kontroler 3D dedykowany dla konsoli Microsoft'u XBox360. Były jednak też dostępne wersje dedykowane dla OS Windows (i z API dla Windows), które można było bez stosowania żadnych "hacków" podłączyć do komputera PC (z taką wersją miałem do czynienia gdzieś około 2012 roku). Wiem, że było kilka komercyjnych robotów mobilnych, które wykorzystywały Kinect'a jako głównego skanera otoczenia. Szkoda, że Microsoft zaprzestał jego produkcji, bo według mnie był to bardzo udany produkt (i do tego niedrogi - kosztował w swoim czasie około 300 PLN) - teraz pozostaje tylko rynek wtórny (najłatwiej kupić go razem z Starą konsolą XBox360 na aukcji). Niestety aby podłączyć wersję dedykowaną dla konsoli XBox360 trzeba użyć dodatkowego Hack'a sprzętowego.

Pozdrawiam

  • Pomogłeś! 1

Udostępnij ten post


Link to post
Share on other sites
(edytowany)
Dnia 16.08.2020 o 17:29, FlyingDutch napisał:

Cześć,

@diablo_911 cieszę się, że posiadasz już dwa fajne zestawy uruchomieniowe FPGA. Wspominałeś w swoim poście o chęci implementacji na układzie FPGA widzenia przestrzennego - "stereo vision". Ja też jestem zainteresowany tym tematem. Tak przy okazji szukania lepszego sensora kamery do moich eksperymentów natrafiłem na dwa tanie zestawy "podwójnych" kamer:

https://www.banggood.com/OV2640-Binocular-Camera-Module-CMOS-STM32-Driver-3_3V-16001200-3D-Measurement-with-SCCB-Interface-p-1548019.html?rmmds=mywishlist&cur_warehouse=CN

https://www.banggood.com/Sipeed-2-Megapixel-OV2640-Binocular-Camera-Module-For-Maix-BIT-Maix-GO-Development-Board-p-1469504.html?rmmds=mywishlist&cur_warehouse=CN

Jeśli masz fajne linki do teorii "stereo vision" chętnie bym poczytał tam dostępne informacje (również jeśli inni użytkownicy forum znają  jakieś strony w sieci dotyczące tej tematyki - proszę podzielcie się nimi. Mam nadzieję, że teraz po pewnym czasie podzielisz się swoimi próbami z układami FPGA na forum.

Pozdrawiam

@FlyingDutchdzięki za linki do kamer 😉  Oczywiście, jak tylko coś powstanie, to się podzielę. Na razie trochę walczę z czasem. 

Jeśli chodzi o materiały dotyczące wizji. Cóż, ja pierwsze boje z Computer Vision zaczynałem od OpenCV i tutoriali (https://docs.opencv.org/master/index.html). Jakieś testy na obrazkach etc. Niektóre tutoriale/opisy mają trochę teorii dołączonej. (Czasami warto też poczytać źródła OpenCV) Później, przeglądałem Github-a i szukałem jakiejś prostej implementacji Stereo Visual Odometry, po czym zaimplementowałem to sobie w jakimś Pythonie i C++. Testy robiłem na zbiorze danych KITTI. Jeśli chodzi o czystą teorię, ten kurs Fotogrametrii wydawał mi się fajny, chociaż sam jeszcze wszystkiego nie wysłuchałem LINK.

Pozdrowienia, J

Edit:

Odnalazłem jeszcze gdzieś głęboko zakopane linki 🙂 Nie dotyczą one tylko stereo wizji, a raczej są to materiały na temat odometrii, w której czasami używa się stereo wizji.

Odometria (mono): Gh, blog post
Odometria (stereo): Blog post
Odometria (DSO) Gh, [warto przejżeć: Jakob Engel, research lead w Oculus labs]
Kolejna implementacja odometrii 🙂 Gh
Na koniec strona Computer Vision Group z TUM, można tam znaleźć dużo paperów i czasami implementacji (nie wiem, czy state-of-the-art, ale zawsze coś :)) LINK

Edytowano przez diablo_911
dodatkowe materiały
  • Lubię! 1
  • Pomogłeś! 1

Udostępnij ten post


Link to post
Share on other sites

Podłączę się pod temat z innym pytaniem. Robię projekt z czujnikiem CMOSIS CMV12000, przy próbie odczytu obrazu dostaję dziwne wartości pikseli, niezgodne w żaden sposób z rzeczywistością, niezależne w żaden sposób od oświetlenia itp. Obraz w zasadzie jest szary. Jeżeli zmienię wartość jednego rejestru czujnika, tak, żeby wysyłał wzorcowy obraz, to wówczas otrzymuję poprawne dane. Zmiana cyfrowego wzmocnienia powoduje, że obraz staje się inny (np. czarny), ale nadal nie odwzorowuje rzeczywistości. Czy macie może pomysł, co może być przyczyną takiego zachowania się czujnika? Piksele odbieram w standardowym trybie 10 bitów, a do wyświetlenia używam najstarszych 8 bitów.

  • Lubię! 1

Udostępnij ten post


Link to post
Share on other sites
(edytowany)
2 godziny temu, piotr96 napisał:

Podłączę się pod temat z innym pytaniem. Robię projekt z czujnikiem CMOSIS CMV12000, przy próbie odczytu obrazu dostaję dziwne wartości pikseli, niezgodne w żaden sposób z rzeczywistością, niezależne w żaden sposób od oświetlenia itp.

Cześć @piotr96,

dla mnie taki czujnik to "Hihg-End" i nie jest mi znany (dopiero zaczynam swoją przygodę z obróbką obrazu opartą na układach FPGA). Dopiero po przestudiowania data-sheet'a można się zastanowić o co zapytać. Interfejs sterujący sensorem to SPI ? Widzę, że trzeba wysłać określone sekwencje do wewnętrznych rejestrów sensora, jesteś pewien, że to co wysyłasz jest odpowiednie (także jeśli chodzi o timing) ? Może też jakieś parametry elektryczne nie są zachowane - piszą miedzy innymi o kondensatorach ceramicznych 100 nF na każdym pinie zasilającym czujnika. Dane są wysyłane na pinach LVDS, może na nich są jakieś niewłaściwe parametry elektryczne (piszą też że zegar LVDS nie powinien mieć mniej niż 100 MHz). Tak z ciekawości na jakim układzie FPGA chcesz to przetwarzać? Mam nadzieję, że znajdzie się na forum ktoś bardziej doświadczony ode mnie w tych sprawach i będzie w stanie Ci pomóc.

BTW: wyświetlasz to za pomocą HDMI czy jakimś innym protokołem?

Pozdrawiam

Edytowano przez FlyingDutch
  • Lubię! 1

Udostępnij ten post


Link to post
Share on other sites

Dziękuję za odpowiedź i zainteresowanie.

Tak, interfejs sterujący to SPI. Tu myślę, że sprawę mam opanowaną w zakresie komunikacji – jest 128 rejestrów 16 bitowych, potrafię odczytać i zmienić ich wartość. Pewności, że to co wysyłam jest odpowiednie, nie mam.

Na razie chcę otrzymać najprostszy obraz, przy domyślnych ustawieniach (jedynie zmieniam wartości kilku rejestrów SPI oznaczonych w dokumentacji jako FIXED – zrozumiałem, że po uruchomieniu trzeba zmienić ich wartości). Zegar dla linii LVDS (tylko 16 z 64 używam) taktuję częstotliwością 600 MHz, maksymalną dopuszczalną, czasem mam problem z odbiorem danych, ale myślę, że nieistotny (i nie zawsze występujący), ponieważ w sytuacji wysyłania obrazu (wzorca) testowego otrzymuję prawidłowe wartości pikseli.

Myślę, że parametry elektryczne powinny być zachowane, chociaż PCB dla czujnika nie projektowałem, ale widziałem schemat i był raczej poprawny, mierzyłem wszystkie napięcia i mieściły się w zakresach (jednak występowały trochę dziwne sytuacje, które jednak zostały uznane przez osobę nadzorującą projekt za poprawne). To może być jakiś trop, ponieważ płytka była chyba projektowana dla starszej wersji czujnika. Przeanalizuję jeszcze raz schemat.

Wykorzystuję układ Zynq na płytce Zedboard. Wartości pikseli przekazuję poprzez AXI DMA (2 moduły, tryb Scatter-Gather) do procesora ARM, stąd dopiero przesyłam poprzez UDP do komputera (dzielę na pakiety, dodaję numer ramki obrazu i numer pakietu UDP) i wyświetlam we własnej aplikacji napisanej w Qt. Przesyłam tylko część ramek ze względu na duży ich rozmiar i problemy z biblioteką LWIP (przez UDP uzyskuję jedynie przepustowość ok. 200 Mb/s, maksymalnie udało mi się uzyskać 650 w czasie braku działania DMA).

  • Lubię! 1

Udostępnij ten post


Link to post
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.


×
×
  • Utwórz nowe...