Skocz do zawartości

Obsługa prostej kamery


kamil4u

Pomocna odpowiedź

Witam.

Od dość dawna jestem zainteresowany jak obsłużyć kamerę w robocie. Postanowiłem, że zajmę się właśnie tym przez najbliższy czas. I związku z tym mam kilka pytań.

Informacje ogólne dotyczące kamery:

- czarno-biała

- rozdzielczość 128x128

- 10-30fps

Co chcę osiągnąć:

Postanowiłem, że bez korzystania z żadnych bibliotek typu openCV będę się uczył obsługiwać taką kamerę. Na początek proste operacje na obrazie typu negatyw, progrowanie itd.

Później jakieś bardziej praktyczne zastosowanie typu wykrywanie twarzy, wykrywanie jakiś prostych przedmiotów, itd.

A jeszcze później myślałem, żeby wykorzystać to w jakieś konkretnej, jeżdżącej konstrukcji, ale to jeszcze sporo czasu minie zanim to osiągnę, więc to strefa marzeń.

Podstawowy cel:

Nauka. Chcę wiedzieć co siedzi w środku. Poznać algorytmy. Może później wykorzystać to już praktycznie. Nie chcę korzystać z bibliotek, chcę wiedzieć dokładnie na jakich algorytmach się to opiera.

Co umiem:

W zasadzie programować. Jednak z reguły nie opierałem się na algorytmach tak skomplikowanych jak do obrazów, ale w końcu chcę spróbować. Z matematyką myślę, że też sobie poradzę. Mimo iż mistrzem całkowania nie jestem to wydaje mi się, że jak będę potrzebował to zrozumiem o co chodzi w danym algorytmie. Miałem styczność z AI, ale tylko w zakresie teoretycznym.

Z elektroniki jestem gorszy, jednak uczę się. Zrobiłem pierwsze miniSumo, który na zawodach we Wrocławiu nie poradził sobie najgorzej( według mojej opinii ).

Pytania:

1. Czy poniższy mikrokontroler wystarczy do obróbki grafiki z takiej kamery, żebym miał wyniki na bieżąco. Np. nie tracąc tych 30fps.

PIC32MX695F512H -> 80Mhz, 32bitowy, 128KB pamięci RAM

http://www.microchip.com/wwwproducts/Devices.aspx?dDocName=en545654

2. Czy kamera jest dobra do tego celu? Gdyby była zbyt porządna, mógłbym nie zdążyć z obróbką obrazu. Czy 128x128 da mi możliwość jakiś sensowych praktycznych operacji, opisanych powyżej?

3. Czy macie jakieś ogóle rady?

4. O czym w pierwszej kolejności powinienem poczytać?

Pozdrawiam

kamil4u

Link do komentarza
Share on other sites

Procesor powinien dać rady, tylko czy umiesz go oprogramować w C ? Natomiast pisząc program na komputer, i wybierając potem mikroprocesor, musisz pamiętać, że komputer zużyje na to samo nieco więcej zasobów i mocy obliczeniowej, bo w tle działa ci milin śmieci i system operacyjny.

Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

O ile jakoś szczególnie nie interesuje Ciebie sam aspekt korzystania z kamerki w miniaturowych systemach embedded to daj sobie spokój z mikrokontrolerami.

Ze względu na trudności z debugowaniem, samym podłączeniem kamery itd. będziesz tracił dużo czasu na pierdoły niezwiązane bezpośrednio z algorytmami obróbki obrazu.

Wystarczy użyć dowolnej biblioteki do ściągnięcia obrazu z kamery jako bitmapy (directx, opencv itd.) i potem sam piksel po pikselu możesz obrabiać obraz pod windowsem. W ten sposób możesz korzystać z monitora i szybko sprawdzać swoje algorytmy, a i sam proces obróbki będzie wielokrotnie szybszy ze względu na zasoby PC.

Jak uprzesz się na mikrokontrolery to wiele z nich ma interfejsy przygotowane do ściągania dużej ilości danych z kamer. Nie wiem jak ten PIC, ale na pewno niektóre army np. z rodziny STM32 są do tego przygotowane

Link do komentarza
Share on other sites

Kamera "jest przygotowana" i w dość łatwy sposób mogę uzyskać tablicę z pikselami, to nie jest problem.

Chcę się nauczyć wykorzystywać kamerę w robotach mobilnych. Uważam, że jest to przyszłościowe. Nie chcę korzystać z komputera, ani bibliotek. Mój cel to na razie edukacja.

Procesor powinien dać rady, tylko czy umiesz go oprogramować w C ?

Rozumiem, że chodzi o PIC-ka? Mam jakie takie pojęcie na temat programowania na PIC. Oceniłbym siebie na coś pomiędzy początkującym, a średnio-zaawansowanym , ale ze względu, że w C trochę programowałem to nie boję się tego języka.

Znam: obsługę portów, obsługę PWM, przerwania( czasowe i zmiany stanów ), obsługę RS232, ADC i kilka innych mniejszych zagadnień.

Zakładając wątek chciałem się dowiedzieć czy ktoś miał do czynienia z tym od strony praktycznej i czy mógłby się podzielić swoim doświadczeniem i doradzić w nurtujących mnie sprawach. Na razie nie uzyskałem odpowiedzi na pytania. Może poza pierwszym, gdzie ~BlackJack twierdzi, że procesor da radę.

Pozdrawiam i dziękuje za dotychczasowe zainteresowanie tematem

Link do komentarza
Share on other sites

No to skoncentrujmy się na pytaniach:

1. Wszystko zależy co chcesz robić. 30fps to bardzo dużo, w praktyce zostaje Tobie w mikrokontrolerze tylko 80/30->~2mln operacji na klatkę. Sam obraz ma 128*128 = 16kB (zakładam, że jest to 8bitów skali szarości).

Nie znam dobrze procesora, ale zakładając, że na jakąś najprostszą operację potrzebujesz 10 cykli procesora to możesz wykonać kilka bardzo prostych operacji utrzymując 30fps. BARDZO prostych operacji.

Niestety jakakolwiek bardziej skomplikowana analiza obrazu będzie już dużym obciążeniem jak chcesz utrzymać 30fps, a bardziej zaawansowane algorytmy szybko tą liczbę pomniejszą.

Jak dojdziesz do algorytmów wyszukiwania twarzy czy przedmiotów to zaczniesz osiągi liczyć w sekundach na klatkę...

2. Kamerka ma zarówno słabą rozdzielczość jak i - wg. mnie największy mankament - brak koloru.

Kolor jest bardzo przydatnym i łatwym do wyłuskania elementem obrazu. Np mając niebieskie tło i czerwony obiekt, który chcemy śledzić, wystarczy wyszukać odpowiedniego koloru w obrazie - prosty filtr. Ze skalą szarości jest trudniej, bo dopiero bardziej zaawansowane algorytmy dają ciekawe efekty.

3. Nie mając na bierząco podglądu co widzi kamera, jak działa algorytm itd. trudno będzie coś sensownego zrobić. Osobiście trzymałbym się PCta jak najdłużej i dopiero po przygotowaniu odpowiedniego algorytmu próbowałbym dobrać sprzęt embedded i przenieść mój projekt na mikrokontrolery.

4. Podstawa to ściągnięcie obrazu z kamery i jego wyświetlenie gdzieś. Dopiero jak to zrobisz to możesz myśleć o jakichkolwiek algorytmach obróbki obrazu.

Dalej to już tylko szukanie po necie. dla przykładu pierwszy temat z google - http://stackoverflow.com/questions/4978630/how-do-facial-recognition-programs-work Jak angielski nie jest dla Ciebie problemem to materiałów jest niesamowita ilość, o książkach nawet nie wspomnę.

  • Pomogłeś! 1
Link do komentarza
Share on other sites

O taką odpowiedź mi chodziło. Wielkie dzięki.

Do 3 i 4pkt: Już kupiłem odpowiedni wyświetlacz, więc będę miał, gdzie podglądać co się dzieje. Mimo wszystko wolałbym operować na uC i się przy okazji uczyć programowania na nich i poznawać ich granice.

Do 2. Kamerę też już mam, jednak nic nie stoi na przeszkodzi kupić coś innego. Jednak mówisz, że jest mała rozdzielczość, ale dzięki temu szybciej przerobię odpowiednie dane. Czy Twoim zdaniem kamera 128x128 nie wystarczy do celów, o których mowa? Z kolorem to rzeczywiście może być problem, więc czy ew. kamera 128x128, ale kolorowa zdałby egzamin.

Przykładowe zdjęcia( nie moje ):

- http://s11.postimage.org/bbfcap10v/out6.gif?noCache=1355946477

- http://s1.postimage.org/bbnxepqiz/out2.gif?noCache=1355946579

Może coś doradzić w tym względzie?

Do 1. Jest to jeden z najszybszych uC od microchip-a. Wszyscy zachwalają ARM-y, tylko nie wiem czy chce się wszystkiego uczyć na nowo z nową rodziną. Twoim zdaniem opłaca się uczyć wszystkiego na nowo czy na razie iść razem z microchip-em i ew. w przyszłości jak zaczną się trudniejsze algorytmy spróbować z czymś mocniejszym?

Pozdrawiam

Link do komentarza
Share on other sites

Kiedyś też tak samo myślałem jak Ty, czyli dokładnie poznać uC, jego możliwości, sposoby obsłużenia wszystkiego co możliwe za jego pomocą, ale... W pewnym momencie zmieniłem zdanie. Jeżeli chcę robić jakiekolwiek bardziej zaawansowane operacje analizy obrazu niż binaryzacja to potrzebuję dużej mocy, a duże profesjonalne roboty mają i tak na pokładzie dwa - trzy komputery z linux'ami, więc zrezygnowałem z wchodzenia z kamerą do uC. Nie mniej jednak, jeżeli to ogarniesz i opiszesz na forum, to dostaniesz meeega piwo, bo chętnie bym zobaczył, jak to się robi.

Ale moją mało profesjonalną opinią, lepiej jest poznać prawdziwe algorytmy, bo prawdziwe roboty nie stoją na pojedynczych mikrokontrolerach, lecz na kilku komputerach 🙂

Raspberry wydaje się być bardzo dobrym pomysłem! To istna potęga. Można też pobawić się w jakiś friendlyARM (http://kamami.pl/index.php?ukey=product&productID=185163), ale to już troszkę droższa zabawa.

Link do komentarza
Share on other sites

Dzięki za odp.

Trochę myślałem nad tym co napisaliście i postanowiłem, że na razie zostanę przy swoim mikrokontrolerze i tej czarno-białej kamerze. Zobaczę jak mi to idzie i czy mi się podoba.

Później, gdy 80MHz przestanie wystarczać, zainteresuje się ARM-em( koło 700MHz ) i jakąś lepszą kamerą, zgodnie z Waszymi radami. Mam nadzieję, że nie będzie to słomiany zapał, bo zagadnienia z obrazem od zawsze mnie fascynowały. Mam też nadzieję, że algorytmy, aż tak mnie nie przerosną.

Jeszcze jakby ktoś mógłby mi doradzić jakiej kamery miałbym szukać na przyszłość. Żebym osiągnął kompromis, między ilością danych, a czasem ich przeróbki. Najlepiej gotowy model, ale w razie czego wystarczą przybliżone parametry. Jak szukałem to nawet to by się nadało, ale dopiero zaczynam, więc nie jestem pewien: http://www.ebay.pl/itm/OV6620-C3088-Digital-CMOS-Camera-Output-for-AVR-MCU-3-3V-5V-gi-/360502620594?pt=LH_DefaultDomain_0&hash=item53efa171b2

--edit--

Jakby ktoś miał coś jeszcze do dodania to proszę o napisanie.

Pozdrawiam

Link do komentarza
Share on other sites

Ja osobiście nie sądzę że brak kolorów, będzie jakimś wielkim problemem. Przetwarzanie takiego obrazu jest bardzo wygodne, bo mało czasochłonne obliczeniowo. Bardzo fajnie się pisze filtry wyostrzające, na czarno białe obrazy. Ogólnie to może się okazać szybko zaletą a nie wadą.

To że człowiek widzi świat kolorowy, nie oznacza wcale, że jest to jedyne słuszne pojmowanie świata., i komputer tez tak musi.

Link do komentarza
Share on other sites

Bardzo fajnie się pisze filtry wyostrzające, na czarno białe obrazy.

To znaczy, że pisałeś takie filtry czy tylko słyszałeś o tym? Jeśli to pierwsze to mógłbyś się podzielić informacjami na ten temat. Nie tyle chodzi mi o rozpisywanie krok po kroku jak działa algorytm, a raczej o jego nazwę, plus problemy jakie miałeś w trakcie programowania. I jak z efektem końcowym.

Już prawie mam płytkę z PIC + kamerą + lcd. Jeszcze trochę i będę mógł zacząć pisać pierwsze proste filtry. Nawiasem mówiąc, zbieram informacje na ten wszelkich filtrów temat.

Co do kamery to zacząłem czytać trochę o algorytmach. Skupiłem się na znajdowaniu twarzy. Faktem jest, że kolor może pomóc przy wyszukiwaniach( filtrujemy kolory na obszarze prostokątu( kolor zbliżony do koloru twarzy ) - przynajmniej z grubsza tak to wygląda. Jednak jest też metoda wykorzystująca sieci neuronowe i wtedy zaletą jest kamera czarno-biała. Nie mam pojęcia jak z efektami, ale mam nadzieję, że tę drugą metodę sobie odpowiednio przetestuję i ew. napiszę Wam rezultaty. Jednak jak pisałem jeszcze trochę czasu minie, bo te zagadnienia nie są proste, szczególnie dla kogoś to pierwszy raz będzie pisał sieć neuronową( teorię jako tako znam ).

Pozdrawiam

Link do komentarza
Share on other sites

Czytałem o tym, a właściwie w Młodym techniku, kiedyś był artykuł o przetwarzaniu obrazów, i tam właśnie był opisany filtr wyostrzający, działający właśnie na czarno białym obrazie.

Czy się tym bawiłem ? Trochę z ciekawości, ale jeszcze w czasach Pentium 100 i Turbo Pascalu na bitmapach próbowałem skalowania i połączenia prostych filtrów. Zresztą proponowałbym ci od tego zacząć, proste zoomy cyfrowe i filtry.

W załączniku masz skan do PDFa, tego archiwalnego już dziś bo to 1994 rok, artykułu z MT.

Przetwarzanie obrazu.pdf

  • Pomogłeś! 1
Link do komentarza
Share on other sites

Dzięki. Na pewno się przyda, bo raczkuje w tematyce. Oczywiście, że chcę zacząć od prostych filtrów, a za poważniejsze rozpoznawanie obrazu zabiorę się najwcześniej za kilka miesięcy, jak poznam podstawy. Nawet nie myślałem inaczej.

Nadal jakby ktoś sobie coś przypomniał, chciał coś dodać, to zachęcam do udzielenia się 🙂

Pozdrawiam

PS. MT też czytam, a nawet prenumeruję. Tyle, że od 2004 roku. Naprawdę polecam.

Link do komentarza
Share on other sites

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.