Projekty indywidualne i zespołowe
MENU

Tematyka projektów indywidualnych i zespołowych związana jest najczęściej z szeroko pojętym przetwarzaniem obrazów (zwłaszcza pod kątem wykorzystania informacji wizyjnej do podjęcia jakiegoś działania, a nie dla samego przetwarzania) oraz programowaniem robotów mobilnych czy manipulatorów. W szczególności, na wyposażeniu laboratorium znajduje się kilka robotów Lego NXT, dwa roboty Pioneer3DX, 2 manipulatory Scorboter-4u, kamery zwykłe i stereowizyjne oraz Kinect, a także tablety i komputer jednopłytkowy Raspberry Pi. Nie znaczy to jednak, że tematy niezwiązane z wyżej wymienionymi zagadnieniami się zupełnie nie zdarzają - są one jednak w mniejszości. Jeżeli Państwo macie jakiś własny pomysł, który chcielibyście zrealizować albo już nad czymś pracujecie i chcielibyście niejako przy okazji zaliczyć przedmiot, to proszę się ze mną skontaktować. Jestem otwarty na wszelkie inne propozycje, które choć trochę ocierają się o moją wiedzę i zainteresowania (o czym niektórzy zdołali się już przekonać). Wszelkie Państwa pomysły zostaną z należytą uwagą rozważone. Proponuję także zapoznać się z najciekawszymi zrealizowanymi projektami oraz propozycjami prac dyplomowych, które w okrojonej wersji mogą być realizowana jako projekty.

Do wielu projektów dostępne są u mnie materiały pomocnicze w postaci sprawozdań, artykułów, książek, a nawet gotowego kodu - mimo to, każdy projekt powinien rozpocząć się przeszukaniem Internetu i sprawdzeniem co w danej tematyce jest zrobione, co się robi, a co stanowi problem.

Pragnę zwrócić uwagę, że projekt NIE MUSI zakończyć się pełnym sukcesem. Robiąc założenia co do projektu, zazwyczaj nie mamy o tym pełnej wiedzy (właśnie po to jest projekt by ją zdobyć) i niektóre założenia mogą okazać się nierealizowalne. Liczyć się będzie głównie wkład pracy i poziom realizacji tego, co da sie zrobić. Poza tym tematy projektów są często formułowane dosyć ogólnie, aby dać Państwu możliwość wyboru konkretnych problemów do rozwiązania podczas pracy.

Projekt indywidualny czy nawet zespołowy może stać się zalążkiem pracy dyplomowej (było tak już w kilku przypadkach) - o wiele łatwiej jest napisać dobrą pracę, gdy poznało się już wcześniej dane zagadnienie i należy je "tylko" rozwinąć.

Jako język programowania zdecydowanie preferuję C/C++, ale nie jest to warunkiem koniecznym we wszystkich projektach. Jeśli chodzi o przetwarzenie obrazów to sugeruję wykorzystanie jednej z najlepszych (i do tego darmowych) bibliotek do przetwarzania i analizy obrazów jaką jest OpenCV. UWAGA: nie są wymagane wysokie umiejętności programowania w C++ czy też znajomość tajników przetwarzania obrazów. Wystarczą jedynie podstawy, gdyż większość kodu jest realizowana przez bibliotekę przetwarzania obrazów i nie pociąga to za sobą konieczności tworzenia skomplikowanych aplikacji, a sam kod jest stosunkowo prosty i zbliżony bardziej do standardowego C z elementami obiektowości.

W razie jakichkolwiek pytań zapraszam do pokoju SK-201 w godzinach konsultacji, a także w innych porach lub o kontakt emailowy.

Tematy projektów indywidualnych i zespołowych podawane są zbiorczo, gdyż dany temat można potraktować wężej lub szerzej - w zależności od aspiracji/czasu/chęci/umiejętności wykonawcy (dotyczy projektów indywidualnych) lub liczby pracujących nad nim osób (dotyczy projektów zespołowych).

Projekty indywidualne mogą być w większości przypadków realizowane przez kilka osób jednocześnie - wówczas wspólna moża być część techniczna projektu (uruchomienie aplikacji, urządzenia itp.), ale część badawcza pozostaje zazwyczaj niezależna.

Sugeruję także zapoznanie się z listą proponowanych tematów dyplomowych, gdyż wiele z nich można zrealizować w zawężonym zakresie w ramach projektów indywidualnych czy zespołowych.

Propozycje tematów

  1. Wykorzystanie sieci głębokiego uczenia do rozpoznawania ...
    Od kilku lat rozwija się technika przetwarzania dużych ilości danych zwana głębokim uczeniem (deep learning). Opiera się ona na specjalnych sieciach neuronowych. Jednym z zastosowań tej techniki jest rozpoznawanie różnych obiektów w naturalnych scenach. To co jest szczególne, to to, że do nauczenia sieci rozpoznawania obiektów nie zastanawiamy się nad żadnymi cechami obiektów, ale dajemy po prostu przykłady tychże obiektów, a w efekcie otrzymujemy sieć, która jest w stanie rozpoznawać dość szybko WIELE różnych obiektów, a skuteczność tego rozpoznawania jest niezwykle wysoka (nie do osiągnięcia innymi, klasycznymi metodami). Nieco podobne metody istniały wprawdzie wcześniej, ale działały nieco inaczej, to znaczy wychwytując pewne, z góry zdefiniowane cechy obiektów. W efekcie otrzymywaliśmy detektor danej klasy obiektów, które to obiekty nie mogły się zbytnio różnić między sobą. Tak działa np. wykrywania twarzy w komórkach czy aparatach fotograficznych. Jest szybkie, ale wykrywa tylko twarze, no i wystarczy przekręcić głowę, aby detektor przestał widzieć to, czego się nauczył (no bo nauczył się prostej, a nie przekrzywionej głowy). W podejściu tzw. głębokiego uczenia jest nieco inaczej. Nie wyszukujemy konkretnych, z góry zdefiniowanych cech obiektów. Tu, cały obraz jest cechą/zbiorem cech, a sieć neuronowa swego rodzaju czarną skrzynką, która dostaje na wejściu obraz, decyduje co jest w nim istotne, a co nie, a na wyjściu wypluwa współrzędne rozpoznanych obiektów oraz poziom ufności danego rozpoznania. Co się dzieje w środku w sieci - do końca nie wiadomo. Tzn. wiadomo, że sieć ustawia swoje wagi i tyle. Co ciekawe, w przeciwieństwie do wcześniejszych podejść, jedna "głęboka" sieć może wykrywać wiele obiektów za jednym razem lub wiele wariantów tego samego obiektu. Stąd ich nazwy - YOLO - You Only Look Once czy SSD - Single Shot Detection. Aby jednak nauczyć taką sieć należy ją wytrenować na setkach, tysiącach czy nwręcz setkach tysięcy obrazów. To zajmuje masę czasu, ale wykorzystuje się do tego karty graficzne (CUDA), co znacznie przyspiesza uczenie. Oczywiście, poza samym uczeniem, żmudnym procesem jest przygotowanie zbioru danych, który najczęściej występuje w formie obrazu z zaznaczonymi na nim prostokątami obejmującymi obiekty danej klasy (np. pojazdy) albo w formie samych wyciętych prostokątów. Wyklikanie" kilku tys. zdjęć przez 1 osobę zajmie kilkanaście godzin męczącej pracy. A tyle zdjęć to wcale nie jest bardzo dużo. A jeśli chcemy rozpoznać np. przedmioty codziennego użytku, powiedzmy ze 20 różnych, to mamy klikania na tygodnie albo i miesiące. Na szczęście istnieją gotowe bazy danych obrazów i ich sekwencji, np:

    http://mscoco.org/home/

    a całą ich listę można znaleźć tu: http://homepages.inf.ed.ac.uk/rbf/CVonline/Imagedbase.htm

    Ostatnio pojawiły się implementacje tych systemów na Androida. Można więc pomyśleć nad stworzeniem/wytrenowaniem/wykorzystaniem gotowej sieci rozpoznającej ileś tam obiektów i wykorzystaniem jej na urządzeniu mobilnym. Takie rozwiązania już istnieją, niemniej pokazanie od A do Z jak to osiągnąć i/lub porównanie 2 środowisk realizujących to samo zadanie byłoby niewątpliwie ciekawe. Niewątpliwie byłoby też niełatwe. Trzeba by jeszcze wymyślić jakieś praktyczne zastosowanie, ale to chyba najmniejszy problem.

    Inną opcją, już nie mobilną, jest zajęcie się deep learningiem na komputerze. Cel podobny: pokazanie jak tego użyć, jak uczyć (tu by się przydała dobra karta graficzna) i które z wybranych środowisk daje jakie możliwości.

    Proszę zerknąć na te linki:
    https://groups.google.com/forum/#!forum/darknet
    https://github.com/unsky/yolo-for-windows-v2
    https://github.com/AlexeyAB/darknet#how-to-train-to-detect-your-custom-objects
    https://github.com/natanielruiz/android-yolo

    https://www.tensorflow.org/
    https://github.com/weiliu89/caffe/tree/ssd

    Powyższe zagadnienie jest bardzo nowe, aktywnie rozwijane i niezwykle obiecujące. Możliwości zastosowań są niemal nieskończone - wszak można to wykorzystać nie tylko z obrazami, ale z dowolnymi danymi, byle dysponować odpowiednią liczbą przykładów. Sam proces uczenia, choć czaso- i zasobochłonny, nie wymaga za to specjalistycznej wiedzy od użytkownika, tylko masy danych i czasu. Jest to i dobre i złe. Dobre, bo wystarczy "wrzucić i zamieszać", aby otrzymać efekty, a złe, bo nie wiemy do końca co się w środku dzieje. Zaletą tego podejścia jest jego uniwersalność, pozwalająca na zastosowanie go dosłownie wszędzie - jest to więc mocno przyszłościowy kierunek. Jednocześnie jest to niepokojące, bo jedynie kwestią czasu jest to, że systemy komputerowe będą lepsze w rozpoznawaniu/analizowaniu czegokolwiek od człowieka. Już dziś najlepsze tego typu systemy czytają lepiej z ruchu warg niż ludzcy eksperci. Wizja komputera Hal 9000 z Odysei Kosmicznej 2001 sprzed niemal równo pół wieku, który potrafił odczytać z ruchu ust załogi, że ma zostać odłączony jest w zasadzie rzeczywistością.

    Cały projekt powinien składać się z mniej więcej takich części:

    1. Krótkie wprowadzenie do sieci neuronowych głębokiego uczenia - czyli teoria o deep learningu
    2. Krótki opis istniejących rozwiązań - czyli jakie narzędzia są dziś dostępne
    3. Opis architektury/oprogramowania wykorzystanego w projekcie - czyli co i jak zrobić, żeby sieci użyć do rozpoznawania i ewentualnie jak ją wytrenować
    4. Nauczenie własnej sieci - czyli opis procesu uczenia, doboru struktury i parametrów sieci, testowanie, ewaluacja rezultatów
    5. Wykorzystanie gotowej/nauczonej sieci - czyli napisanie aplikacji wykorzystującej nauczoną sieć oraz testy

    To tak z grubsza. Powszechnie rozpoznawane obiekty to ludzie, pojazdy, obiekty w otoczeniu człowieka. Zastosowania to: wykrywanie/liczenie ludzi, liczenie i śledzenie pojazdów, wykrywanie różnych obiektów (dla robotów usługowych czy też w celu wspomagania niedowidzących).

    Osobna sprawa, to zebranie danych do uczenia sieci. Sieci głębokie potrzebują ogromnych zbiorów danych. W przypadku np. znaków drogowych sprawa jest nieco łatwiejsza, bo można taki zbiór danych wygenerować sztucznie. Wybrane, popularne znaki bierzemy z kodeksu drogowego czy po prostu z sieci i każdy znak modyfikujemy setki razy, symulując różne kąty patrzenia, intensywność kolorów, ogólną jasność i kontrast, zaszumienie, zamglenie, rozmycie, przysłonięcie itp. i wrzucamy je na typowe tła drogowe. W ten sposób, z jednego znaku źródłowego spokojnie zrobimy tysiące wariantów za pomocą dosłownie kilku linii kodu (podpowiem jak). To powinno, jak sądzę, wystarczyć do nauczenia sieci.

    Z ludźmi czy pojazdami tak łatwo już nie będzie, bo to są obiekty przestrzenne. Tu opcją jest skorzystanie z gotowej, poetykietowanej bazy rzeczywistych obiektów. Jest tego pełno w sieci, trzeba tylko poszukać.

    W internecie jest też sporo gotowych, już nauczonych sieci, które można od ręki wykorzystać we własnej aplikacji.

    Proponuję zacząć rozpoznanie tematu od wykładu:

    https://www.youtube.com/watch?v=vq2nnJ4g6N0

    w którym autor dość dokładnie pokazuje krok po kroku, co i jak. Wykład trwa 2,5 godziny, ale obejrzenie ze zrozumieniem i z równoległym zapuszczeniem uczenia, tak jak w wykładzie, zajmie pewnie ze 2 razy tyle. No ale dzięki temu będzie można, przynajmniej w jakimś podstawowym stopniu, zrealizować własną sieć rozpoznającą wasze obiekty.

    Jest też taka strona: http://www.deeplearningbook.org/
    I tam jest książka niby o deep learning, tylko że ona ma z 700 stron....

    Najlepsza biblioteka do przetwarzania obrazów (OpenCV) od niedawna wspiera także zagadnienia głębokiego uczenia (miesiąc temu wyszła najświeższa wersja z rozszerzonym wsparciem dla głębokich sieci), ale tylko w części wykorzystania gotowych sieci - w OpenCV nie można uczyć sieci - do tego służą różne struktury ramowe dedykowane do uczenia, np. Caffe, Torch czy Tensorflow.
    Proponuję zerknąć na tego bloga: https://www.pyimagesearch.com/
    Jest tam sporo ciekawych i treściwych wpisów pokazujących jak w prosty sposób rozpoznawać obiekty w OpenCV. Autor używa Pythona, ale ewentualne przepisanie tego na C++ nie powinno stanowić problemu.

    I jeszcze jeden ciekawy link:
    https://www.mathworks.com/matlabcentral/fileexchange/60659-deep-learning-in-11-lines-of-matlab-code

    oraz darmowy kurs online zajmujący około 10 godzin, nie licząc czasu poświęconego na przygotowanie oprogramowania i robienie prac domowych w ramach kursu - kurs jest dobry dla osób początkujących, nie mających większego pojęcia o głębokim uczeniu i Tensorflow. Ten kurs jest swego rodzaju bardziej szczegółową wersją wspomnianego wyżej 2,5-godzinnego wykładu o rozpoznawaniu liter. Jego rzetelne przerobienie pozwoli na pewną biegłość w temacie i nauczy jak wytrenować różnego rodzaju sieci (w trakcie kursu robi się własne sieci).
    https://in.udacity.com/course/deep-learning--ud730

    Jak widać, na początku jednym z większych problemów jest znalezienie punktu zaczepienia i dobrego wprowadzenia w tematykę. Dlatego też podrzucam tu ciekawe, moim zdaniem, materiały żeby ułatwić start chętnym. Teoretycznie po skończeniu w/w kursu każdy powinien umieć wytrenować głęboką sieć i użyć jej we własnej aplikacji. Niemniej, jak widać po innych linkach, nie trzeba robić takiego kursu, by nauczyć się używać wytrenowanych sieci. Możliwości jest multum.
  2. Odporny algorytm rozpoznawania tablic rejestracyjnych
    Projekt polega na rozszerzeniu istniejącej bazy zdjęć tablic i usprawnieniu istniejącego oprogramowania (do ściągnięcia stąd),  tak, aby jeszcze lepiej radziło sobie z odczytywainem tablic. Istotne jest tu zaimplementowanie odporności na wszelkiego rodzaju zabrudzenia, które są bardzo powszechne w porzez jesienno-zimowej.
  3. Śledzenie obiektów w sekwencjach obrazów
    Projekt polega na wszechstronnym przetestowaniu algorytmu śledzącego, znalezieniu jego wad i próbie ich zminimalizowania. http://info.ee.surrey.ac.uk/Personal/Z.Kalal/tld.html. Interesujące byłoby również porównanie działania tego algorytmu z algorytmem opracowanym w ramach pracy magisterskiej autorstwa Marcina Bzdawskiego.
  4. Wykrywanie samochodów przejeżdżających na czerwonym świetle
    Projekt polega na napisaniu aplikacji wykorzystującej bibliotekę OpenCV do analizy obrazu z kamery umieszczonej w pobliżu skrzyżowania. Kamera skierowana jest na sygnalizator świetlny, rozpoznaje światła i wykrywa samochody wjeżdżające na skrzyżowanie po zapaleniu się światła żółtego. W najprostszej wersji wystarczy wykryć zmianę obrazu w pewnej jego części po znalezieniu w nim żółtopomarańczowego kółka. Dalsza analiza byłaby dokonywana ręcznie (przez człowieka). Bardziej zaawansowane wersje mogą próbować nie podnosić alarmu, gdy na pasy wejdzie pieszy (taka zmiana obrazu "pod światłami" nie powinna być wychwytywana) czy jak samochód zjeżdża ze skrzyżowania. Kolejnym etapem może być automatyczne rozpoznawanie rejestracji tudzież marki pojazdu. W każdym razie potrzebnych będzie dużo zdjęć albomateriału filmowego.

  5. Wykrywanie pojazdów w sekwencjach obrazów
    Projekt polega na wykorzystaniu biblioteki do przetwarzania obrazów OpenCV do wyszukiwania samochodów w sekwencjach obrazów. Mechanizm ten jest znany i zaimplementowany. Przykładem jest tu bardzo powszechne dziś wykrywanie twarzy w komórkach czy aparatach fotograficznych. W ramach projektu należałoby zbudować odpowiedni klasyfikator, rozpoznający samochody widziane z przodu, tyłu, boku i lekko z góry. Sposób budowy klasyfikatora jest opisany. Jedyną trundość stanowi zebranie odpowiednio licznego materiału zdjęciowego i wstępne jego przetworzenie. Resztą zajmie się gotowy program. Problem polega na tym, że aby klasyfikator działał skutecznie, należy mu "pokazać" na etapie uczenia, przynajmniej kilka tysięcy zdjęć samochodów i jeszcze więcej innych zdjęć, nie zawierających samochodów. Przygotowanie takiej bazy zdjęć jest więc nieco pracochłonne.

  6. Wyszukiwanie obrazów na podstawie obrazów
    Projekt polega na napisaniu aplikacji, która znajdzie w stworzonej wcześniej bazie obrazów, obraz najbardziej zbliżony do danego. Np. poszukujemy konkretnego zegarka. W tym celu robimy zdjęcie tarczy zegarka, wyznaczamy pewne punkty charakterystyczne (automatycznie) i poszukujemy podobnych punktów na wszystkich zebranych w bazie zdjęciach zegarków. Wyświetlamy najbliższe dopasowania. W przeciwieństwie do dwóch tematów poniżej, tu zakładamy, że obiekty na obrazach mają wyraźne, powtarzalne cechy geometryczne, a więc odrzucamy obrazy typu nadmorska plaża czy zachód słońca. Interesuje nas dość dokładne dopasowanie (fragmentów) obrazów. Dla ułatwienia możemy założyć, że poszukiwany zegarek (wraz ze wzorcami w bazie) jest fotografowany na neutralnym tle..

  7. Mozaika
    Projekt polega na napisaniu aplikacji, która z wielu małych obrazów ułoży jeden duży obraz. Duży obraz należy podzielić na małe fragmenty i znaleźć możliwie podobne do nich obrazy z możliwie dużej bazy danych. Problem polega głównie na zdefiniowaniu podobieństwa obrazów - tu możliwości jest wiele. Istotny jest też czas przeszukiwania bazy danych i porównywania obrazów, a raczej ich cech. Temat ten został już wprawdzie zrealizowany, ale można go rozszerzyć czy napisać zupełnie inaczej.

  8. Wyszukiwanie/sortowanie obrazów
    Projekt polega na napisaniu aplikacji umożliwiającej posortowanie obrazów pod względem ich zawartości lub znalezienie obrazów najbardziej zbliżonych do danego. Jest to modyfikacja poprzednich tematów, ale tym razem obrazy nie muszą koniecznie mieć wyraźnych, unikalnych cech. Interesuje nas większa generalizacja - zamiast wyszukiwać konkretny model zegarga, wystarczy że znajdziemy wszystkie obrazy zegarków. Obrazy bez szczególnych cech geometrycznych też powinny być tu brane pod uwagę - np. scenka plażowa. Z tego względu, podejście tu będzie nieco inne - analiza kolorów i ich rozkładu, analiza tekstur itp.

  9. Zastosowanie metod optymalizacyjnych do porównywania obrazów
    Projekt polega na zastosowaniu metod optymalizacji nieliniowej w procesie porównywania obrazów, a ściślej wyszukiwania fragmentu obrazu w całości. Standardowe podejście zakłada przesuwanie naszego małego obrazka co piksel po całym obrazie i w każdym miejscu wyznaczania jakiegoś współczynnika podobieństwa. Po "przeleceniu" całego obrazu, punkt gdzie współczynnik podobieństwa osiągnął maksimum uznajemy za punkt najlepszego dopasowania fragmentu do całości. Taka metoda jest wykorzystywana do wyszukiwania jakichś obiektów w obrazach. Jest ona jednak bardzo czasochłonna, ale można ją znacznie przyspieszyć wykorzystując algorytmy optymalizacji nieliniowej (bezgradientowej). Zbliżona metoda ta została z powodzeniem zastosowana w pracy magisterskiej wspomnianej w temacie nr 2.

  10. Wykrywanie ruchu w sekwencjach obrazów
    Projekt polega na wykorzystaniu i porównaniu szeregu gotowych algorytmów służących do wykrywania obiektów ruchomych w sekwencjach obrazów. Bardzo dobrym przykładem może tu być ruch uliczny obserowowany nieruchomą kamerą. W ramach projektu należy zbadać dostępne algorytmy i ocenić ich jakość, wydajność itp.

  11. Stabilizacja obrazu w sekwencji
    Projekt polega na napisaniu aplikacji wykorzystującej bibliotekę OpenCV, a konkretnie zaimplementowane w niej algorytmy wykrywania ruchu do stabilizacji obrazu. Teoretycznie zagadnienie polega na wyznaczeniu wektora ruchu obrazu (takie wektory zwraca np. algorytm przepływu optycznego), który nie jest zamierzonym ruchem obrazu (np. przesuwaniem kamery), a ruchem przypadkowym (drgania charakteryzują się zbliżoną amplitudą i zmieniającym się znakiem) i przesunięciu obrazu o wektor przeciwny.

  12. Rozpoznawanie znaków drogowych
    Projekt polega na napisaniu aplikacji wykorzystującej bibliotekę OpenCV do rozpoznawania znaków drogowych sfilmowanych kamerą zamieszczoną w samochodzie. Aplikacja miałaby za zadanie wspomaganie kierowcy, przypominanie mu o ograniczeniach prędkości, ostrzeganie przed niebezpiecznym zakrętem czy przejściem dla pieszych. Główna trudność zadania polega na tym, że w różnych warunkach pogodowych znaki drogowe wyglądają bardzo różnie. Trzeba więc zrobić szereg zdjęć wybranych znaków w różnych warunkach i próbować dobrać do tych danych jakąś metodę rozpoznawania.

  13. Rozpoznawanie zegarka analogowego
    Projekt polega na napisaniu aplikacji, która automatycznie znajdzie w obrazie tarczę zegara analogowego a następnie odczyta godzinę. Wykorzystać należy bibliotekę OpenCV. 

  14. Rozpoznawanie banknotów i monet
    Projekt jest kontynuacją gotowej aplikacji do rozpoznawania banknotów (do ściągnięcia stąd). Polega na wszechstronnym jej przetestowaniu i próbie oszukania (czyli stworzenia takiego falsyfikatu, którego program nie rozpozna, co nie powinno być zbyt trudne), a następnie zaproponowaniu modyfikacji uniemożliwiającej oszustwa, a także otymalizacji jej działania.

  15. Lokalizacja obiektów w przestrzeni
    Projekt polega na wykorzystaniu gotowego oprogramowania służącego do lokalizacji obiektów w przestrzeni na podstawie 4 znanych punktów obserwowanych przez kamerę. Zasadnicza część projektu to zbadanie kilku różnych celów (wzorów), które obserwuje kamera i ich wpływu na dokładność lokalizacji. Powszechnie stosuje się szachownice lub kwadraty. Interesująca jest odpowiedź na pytanie, jaki wzór jest najłatwiejszy do rozpoznania, jaki daje najdokładniejsze wyinki, jaki jest wykrywalny z największej odległości itp.

  16. Wzbogacona rzeczywistość w OpenCV
    Projekt polega na wszechstronnym przetestowaniu algorytmu wykrywania znaczników, znalezieniu jego wad i próbie ich zminimalizowania, a także zaproponowaniu jakiejś aplikacji z wykorzystaniem tej technologii. http://www.uco.es/investiga/grupos/ava/node/26

  17. Rozpoznawanie obiektów 3D przy użyciu Point Cloud Library
    Projekt polega na przetestowaniu możliwości tytułowej biblioteki. http://pointclouds.org/

  18. Rozpoznawanie i interpretacja ruchów dłoni (analiza obrazów)
    Projekt polega na eksperymentalnym dobraniu parametrów powszechnie stosowanej w automatycznym rozpoznawaniu obrazów przestrzeni HSV w taki sposób, aby obraz ludzkiej skóry (rasa biała) był prawidłowo wydzielany spośród innych obiektów w różnym oświetleniu (dzienne, żarowe, jarzeniowe itp). Kolejnym etapem byłaby próba rozpoznania kształtu dłoni (sprowadza się to do wydzielenia kilku prostokątów oznaczających palce i środek dłoni).

  19. Analiza i dekompozycja gazet
    Projekt polega na napisaniu aplikacji wykorzystującej bibliotekę OpenCV do automatycznego poetykietowania strony z gazety (lub czasomisma ;), w taki sposób by każdy artykuł otrzymał unikalną etykietę. Jest to pierwszy etap procesu automatycznej analizy prasy.

  20. Metody wydzialania znaków
    Projekt polega na przetestowaniu/opracowaniu kilku metod wydzialania pojedynczych znaków z zeskanowanych wyrazów. Chodzi oczywiście o pismo drukowane. Często się zdarza, że znaki zlewają się ze sobą i proste algorytmy ich wydzielania nie zdają egzaminu. Chodzi o to by spróbować mimo wszystko wydzielić je z ciągu.

  21. Robot gra w warcaby
    Projekt polega na wykorzystaniu (niemal) gotowego oprogramowania do sterowania manipulatorem oraz rozpoznawania obrazów i lokalizacji obiektów do zaimplementowania rozgrywki w warcaby między robotem a człowiekiem.

  22. Robot gra w kółko i krzyżyk
    Projekt bardzo podobny do gry w warcaby, tylko tym razem robot ma mieć pisak i normalnie pisać na kartce. Kartka jest wdzięcznym obiektem do lokalizowania, bo jej wymiary są znormalizowane (no chyba, że ktoś złośliwie położy inną kartkę), więc łatwo jest wyznaczyć jej położenie w przestrzeni. Pewną trudność może stanowić zagadnienie rozpoznawania linii oraz kółek czy krzyżyków narysowanych przez człowieka, w porównaniu do gry w warcaby, gdzie mamy do czynienia z wyraźnymi pionkami.

  23. Współpraca robotów
    Projekt polega na wykorzystaniu (rozszerzeniu) oprogramowania do sterowania manipulatorami w taki sposób, by roboty były w stanie przekazywać sobie jakieś przedmioty. Problem sprowadza się do możliwie precyzyjnej kalibracji robotów oraz stworzenia tablicy korekcji, gdyż stosunkowa niska precyzja ruchów robotów spowoduje, że mimo iż będą sądzić że ich chwytaki znajdują się w jednym miejscu (i że mogą sobie przekazać jakiś przedmiot), w rzeczywistości rozminą się one o kilkadziesiąt milimetrów.

  24. Kalibracja robotów mobilnych
    Projekt polega na zbadaniu aktualnych właściwości jezdnych robotów pod kątem dokładności realizacji zadanej trajektorii (czy roboty jadą tak daleko i skręcają o tyle, ile im się rozkaże oraz czy robią to jednakowo), a następnie eksperymentalnym dobraniu kilku parametrów kalibracyjnych tak, aby roboty jeździły jak najdokładniej w stosunku do wydanych im poleceń. Pracę należy oprzeć na istniejącym sprawozdaniu i rozszerzyć.

  25. Gadający robot
    Projekt polega na napisaniu aplikacji wydającej komunikaty głosowe w zależności od sytuacji w jakiej znajdzie się robot. Pożądanym rozwiązaniem jest wykorzystanie syntetyzatora mowy, a nie uprzednio nagranych komunikatów. Rozszerzeniem tej aplikacji byłoby dodanie wizerunku głowy oraz próba rozumienia kilku wybranych słów i reakcja na nie.

  26. Strzał z armaty
    Projekt polega na opracowaniu (w miarę możliwości jak najdokładniejszej) symulacji  lotu kuli wystrzeliwanej z armaty z wykorzystaniem jakiegoś silnika fizyki. Docelowa aplikacja powinna umożliwiać wizualizację wyznaczonej trajektorii np. w postaci prostej gry, w której strzela się do celu.

  27. Strzał z armaty z Kinectem
    Projekt jest rozszerzeniem projektu powyżej o sposób wprowadzania danych. O ile w projekcie poprzednim dane są wprowadzane z klawiatury, tym razem dane mają pochodzić z czujnika Kinect. Innymi słowy, rzucamy kulkę, Kinect ją widzi i podaje nam jej współrzędne. Na podstawie kilku klatek wyznaczamy wektor jej prędkości. Reszta tak jak poprzednio. Interesujące byłoby porównanie wyliczonego w symulacji miejsca upadku kulki z faktycznym. Rozszerzeniem projektu byłoby zaprogramowaine robota w taki sposób, aby łapał kulkę (nie chwytakiem, bo robot jest za wolny i za mało dokładny, ale jakimś odpowiednio dużym pudełkiem czy siatką).

  28. Porównywanie dokumentów tekstowych
    Projekt polega przetestowaniu, usprawnieniu i rozszerzeniu istniejącej aplikacji do wykrywania plagiatów, ewentualnie do implementacji tej aplikacji w C++ (źródła są w Javie).

  29. Sterowanie obrotową kamerą
    Projekt polega na  takim wysterowaniu kamerą na ruchomej głowicy by ta zawsze widziała twarz człowieka. Program do rozpoznawania twarzy jest gotowy.

  30. Sklejanie obrazków
    Projekt polega na napisaniu aplikacji do automatycznego zszywania czy też sklejania obrazków w panoramy. Sporo jest na ten temat materiałów w sieci (image stitching)

  31. Synteza mowy
    Projekt polega na przetestowaniu dostępnych narzędzi do syntezy mowy i porównaniu ich pod kątem jakości, stabilności i możliwości implementacji z poziomu języka C. Dysponujemy oprogramowaniem firmy IVO.

  32. Analiza mowy
    Projekt polega na przetestowaniu dostępnych narzędzi do analizy mowy i porównaniu ich pod kątem jakości, stabilności i możliwości implementacji z poziomu języka C. Dysponujemy oprogramowaniem Dragon Naturally Speaking.

  33. Analiza senności kierowcy
    Projekt polega na napisaniu aplikacji, która wyznacza czas mrugnięcia okiem. Okazuje się, że im człowiek jest bardziej śpiący, tym ten czas jest dłuższy. Jednym ze sposobów rozpoznania oka i jego stanu (zamknięte, otwarte) jest wytrenowanie dwóch klasyikatorów, które będą rozpoznawać oczy otwarte i zamknięte. Inne metody też są oczywiście dopuszczalne. Wszystko do zrealizowania w bibliotece OpenCV. 

  34. Przetwarzanie obrazów na smartfonie/tablecie/komputerze jednopłytkowym (Raspberry Pie)
    Projekt polega na napisaniu aplikacji pod system Android wykorzystującej bibliotekę (lub jej fragmenty) OpenCV. Należy przetestować wydajność danego urządzenia i napisać jakąś ciekawą aplikację wykorzystującą mobilność urządzenia.

  35. Zastosowanie sieci neuronowych do predykcji przebiegów czasowych
    Projekt polega na przetestowaniu różnych konfiguracji sieci neuronowych (jest do tego gotowe oprogramowanie) w zadaniu wyznaczania przyszłych wartości sygnału. Uczenie sieci polega na podaniu na jej wejście fragmentu przebiegu, a na wyjściu znanej wartości sygnału następującej po fragmencie wejściowym. Odpowiednia architektura sieci i odpowiedni zbiór sekwencji uczących powinien umożliwić sieci przewidzenie przyszłej wartości sygnału. Interesujące jest sprawdzenie poprawności takiej predykcji na sygnałach okresowych (łatwo), okresowych zaburzonych/złożonych (trudniej) i nieokresowych - np. kurs akcji (trudno).

  36. ROS - Uniwersalny system operacyjny robotów
    Projekt polega na przetestowaniu możliwości tego uniwersalnego systemu operacyjnego robotów na naszych robotach (Lego NXT oraz Pioneer 3DX), a w wersij rozszerzonej na napisainu sterownika do ROSa dla nszego manipulatora ScorbotER-4u. http://www.ros.org/wiki/

  37. Programowanie wielowątkowe z użyciem OpenCV i TBB
    Projekt polega na weryfikacji wzrostu wydajności typowych algorytmów wizyjnych (i nie tylko) przy zastosowaniu biblioteki TBB do zrównoleglania zadań na procesorach wielordzeniowych. Większość algorytmów została już zoptymalizowana pod kątem wielowątkowości, wystarczy więc przetestować je na jednym i wielu rdzeniach. Warto jednak spróbować samodzielnie zrównoleglić jakieś zadanie wizyjne (ręczne zrównoleglanie zazwyczaj jest lepsze od automatycznego).  http://threadingbuildingblocks.org/

 

 


 


 

Tryb realizacji projektów

Doświadczenia lat ubiegłych pokazują, że brak kontroli ze strony prowadzącego podczas realizacji projektów prowadzi często to mizernych efektów. Aby tego uniknąć i zakończyć projekt sukcesem i w terminie (oznacza to ukończenie aplikacji, demonstrację jej działania oraz napisanie i przekazanie sprawozdania/dokumentacji) będę wymagał regularnego raportowania na temat stanu pracy, osiągnięć i problemów, planów na najbliższą przyszłość itd. Regularność i jakość tych raportów będzie w wpływać na ocenę końcową (w przypadku projektów zespołowych pozwoli na indywidualną ocenę jego uczestników i wyeliminuje tzw. martwe dusze) oraz będzie czynnikiem mobilizującym. Forma raportów i sposób ich przekazywania zostanie ustalony oddzielnie.

Copyright © 2012 Witold Czajewski