Moje projekty

Genetyczne samochody (listopad 2012)


Jest to program na zaliczenie przedmiotu "Sztuczna inteligencja w badaniach operacyjnych". Na stworzonym przez użytkownika torze jeżdżą samochody. Wirtualne pojazdy mają za zadanie same nauczyć się jazdy po torze i omijania przeszkód. Dodatkowo ich zadaniem jest jak najszybsze pokonywanie okrążenia.

Program posiada edytor samochodów i torów.
W edytorze torów możemy zmodyfikować już istniejącą trasę lub stworzyć nową.
edytor posiada funkcje:
  • rysowania nowego wielokąta przedstawiającego przeszkodę o określonym kolorze wypełnienia oraz obramowania (lewym przyciskiem dodajemy kolejny punkt wielokąta, prawym kończymy rysowanie lub kasujemy już istniejący wielokąt w przypadku kliknięcia na niego)
  • rysowanie linii punktu kontrolnego (potrzebne do informowania pojazdu czy jedzie w dobrą stronę oraz wybrania najszybszego pojazdu)
  • rysowanie linii startu/mety
  • ustawianie pozycji startowej pojazdu pod dowolnym kątem
  • ustawianie koloru tła trasy
  • opcje ogólne (szerokość i wysokość toru w pikselach oraz jego nazwa)
Po wybraniu jednej z opcji, pod RadioButtonami pojawiają się właściwości specyficzne dla wybranej opcji. Np na powyższym obrazku dla opcji Obstacle (przeszkoda) możliwe jest wybranie koloru tła oraz obramowania.

W edytorze pojazdów możliwa jest edycja lub stworzenie nowego samochodu:
  • z rozwijanej listy wybierany jest obrazek auta
  • można przypisać mu nazwę
  • ustawić liczbę neuronów w warstwie ukrytej
Na powyższym obrazku widoczne są czujniki (sensory odległości). Wyprowadzają one promień od niebieskiego kwadratu w kierunku żółtych kwadratów. Pojazd posiada więc informacje o swojej odległości od przeszkód z ośmiu czujników. Dodatkowo przekazywana jest informacja czy pojazd jedzie w dobrym kierunku czy też nie (dzięki wprowadzeniu checkpointów). Można zobaczyć promienie wychodzące z czujników podczas symulacji po zaznaczeniu odpowiedniego CheckBoxa:



Te informacje podawane są na sieć neuronową na warstwę pierwszą. Następnie sygnały z czujników przechodzą przez warstwę ukrytą, której liczbę neuronów można ustalić z poziomu edytora pojazdów. Na wyjściu sieci otrzymywany jest sygnał jak mocno skręcić w lewo lub w prawo oraz jak szybko jechać.
Pojazd może skręcać maksymalnie pod określonym kątem, więc dla ostrych zakrętów będzie musiał nauczyć się zwalniać.

Za uczenie sieci neuronowej odpowiada algorytm genetyczny. Wagi połączeń między neuronami zostają zapisane w postaci chromosomu. Najlepsze jednostki (najszybsze pojazdy, które dojechały najdalej) są wybierane oraz krzyżowane ze sobą. Zastosowane zostało podejście z "wyspami", gdzie na każdej wyspie rozwijają się niezależnie poszczególne jednostki. Najlepsza z nich może przemieścić się na inną wyspę i przekazać na niej swoje geny jednostkom potomnym. 

Poniżej prezentacja ewolucji najlepszej sieci neuronowej dla pojazdu o dwóch neuronach w warstwie ukrytej:

Po chwili najlepsza jednostka zaczyna się ujawniać:


HotRobot VST Vocoder (sierpień 2012)


Jest to plugin do programu FL Studio. Napisany został w języku C# w technologii WPF. Integrację z FL Studio uzyskałem przez zastosowanie wrappera VST dostępnego na http://vstnet.codeplex.com/

VST jest standardem wtyczek efektowych oraz wirtualnych instrumentów stworzonym przez firmę Steinberg Media Technologies. Oprogramowanie wydawane w tym formacie to głównie syntezatory i efekty studyjne. Do wykorzystania wtyczki VST niezbędny jest program - host. W moim przypadku było to FL Studio, lecz standard VST obsługiwany jest przez wszystkie popularne programy do tworzenia muzyki.

Vocoder jest wtyczką efektową. Sama z siebie nie wytwarza żadnego dźwięku lecz przekształca dwa sygnały wejściowe w jeden sygnał wyjściowy. Przykład rasowego hardware'owego vocodera można znaleźć na youtube: http://www.youtube.com/watch?v=cOO6xTXTeiA

Pierwsze przetwarzanie dźwięku przez moją wtyczkę można zobaczyć na http://www.youtube.com/watch?v=b40od5GsFsI.
W tym momencie funkcjonowała ona z błędnie zaimplementowanym filtrowaniem opartym na odwrotnej transformacie fouriera.
  • Program-host podaje co pewien (nieokreślony lecz bardzo krótki) czas pewną ilość próbek dźwięku do wtyczki. Na lewy kanał zostaje podany wokal lub perkusja (modulator) a na prawy kanał sygnał "carrier", czyli dźwięk którym będziemy "mówić".
  • Stworzony został specjalny bufor przetrzymujący 1024 ostatnie próbki dźwięku (niezbędne dla FFT)
  •  Liczona jest szybka transformata fouriera dla lewego i prawego kanału
  • Na podstawie FFT z modulatora obliczane są wartości pasm przepustowych widocznych na powyższym screenie. 
  • Znając chwilowe "długości" pasm przepustowych i ich wartości wyznaczany jest kształt filtra (symetryczny, jednostki rzeczywiste i urojone)
  • Na wyznaczonym kształcie jeszcze raz wykonywana jest FFT, dzięki czemu uzyskujemy jądro filtra jako tablicę 2048 wartości zmiennoprzecinkowych. Połówki takiej tablicy należy następnie zamienić ze sobą miejscami.
  • FFT carriera oraz jądra filtru są przez siebie przemnażane wartość po wartości.
  • Uzyskany iloczyn odwracamy odwrotną transformatą fouriera uzyskując pożądany efekt. Należy jednak pamiętać o zastosowaniu metody "overlap-save processing" w przypadku filtrowania FFT. W przeciwnym wypadku uzyskamy efekt jak na powyższym linku z pierwszej prezentacji mojej wtyczki. Sygnał zwłaszcza przy dolnych częstotliwościach będzie "poszarpany"
  • Pomocny okazał się post http://stackoverflow.com/questions/2929401/dsp-filtering-in-the-frequency-domain-via-fft i po zastosowaniu się do wskazówek udało się uzyskać poprawną implementację filtrowania FFT i tym samym ukończyć efekt VST.
Poniżej prezentacja działania gotowego pluginu:
Perkusja działa jako modulator a carrierem jest lekko rozstrojona fala piłokształtna. Na końcu wypowiedziane jest "Design-S" (mój artystyczny pseudonim) :)
Każdy może ściągnąć moją wtyczkę i wypróbować ją u siebie. Specjalnie stworzony instalator automatycznie wgrywa wszystkie niezbędne pliki w odpowiednie miejsca. Wystarczy podać tylko folder z wtyczkami VST na swoim komputerze.



Sterowanie komputerem przy pomocy poleceń głosowych (grudzień 2012)


Jest to projekt na zaliczenie przedmiotu "Systemy z dostępem w języku naturalnym". Wykorzystane zostały narzędzia HTK (Hidden Markov model Toolkit), które posłużyły do generowania ukrytych modeli Markova a następnie do rozpoznawania mowy w czasie rzeczywistym. W głównym oknie programu można:

  • otworzyć edytor nagrań dźwiękowych
  • otworzyć edytor akcji jakie mają zostać wykonane po rozpoznaniu określonej sekwencji komend
  • wygenerować modele Markova oparte na wcześniej nagranych dźwiękach
  • rozpocząć rozpoznawanie mowy
W edytorze nagrań mamy dostępną listę wszystkich sampli słów. U góry umiejscowiony jest pasek postępu przedstawiający poziom natężenia dźwięku z mikrofonu. Dzięki temu prostemu narzędziu można Nagrać nowy sampel dźwiękowy w formacie .wav o nazwie pliku [fileName]-[fileNumber]. Wybierając okreslony sampel z listy można go odtworzyć lub usunąć.




W edytorze akcji można przypisać rozpoznaną sekwencję do określonej czynności. Do wyboru jest:
  • wyświetlenie okna z powiadomieniem
  • otwarcie domyślnej przeglądarki na określonej stronie
  • uruchomienie procesu z opcjonalnymi argumentami
  • zamknięcie procesu
Po uruchomieniu automatycznego rozpoznawania mowy program poprosi o wypowiadanie paru dowolnych słów w celu wykrycia ciszy:
Po czterech sekundach można zacząć wypowiadać określone komendy. Np w przypadku wypowiedzenia "otwórz internet" sekwencja zostaje wykryta przez program a w przeglądarce otwiera się komunikat z określoną informacją (zostało to tak ustawione w edytorze akcji). Jednak nic nie stoi na przeszkodzie aby otworzyć domyślną przeglądarkę.



Filtr sygnałowy oparty na sieciach neuronowych (projekt inżynierski 2011/2012)

Implementacja filtra sygnałowego opartego na sieciach neuronowych do przetwarzania sygnałów w czasie rzeczywistym jako plugin VST.

Przy pomocy programu MATLAB wygenerowana została sieć neuronowa, a wagi połączeń między neuronami zostały wyeksportowane do pliku tekstowego. Następnie specjalnie napisany do tego celu program konwertował ten plik do postaci binarnej, który wczytywany był przez wtyczkę VST, gdzie sieć neuronowa była odtwarzana.
Przy pomocy pokrętła możliwa jest regulacja pasma przepustowego filtra (w tym przypadku "wytrenowano" filtr dolnoprzepustowy). 
Wytrenowano wiele sieci potrafiących filtrować sygnał dla różnych częstotliwości. W miarę przesuwania pokrętła, sygnał przetwarzała inna sieć.
Okazało się, że dla małych sieci niemożliwe staje się nauczenie przepuszczania tylko bardzo niskich częstotliwości. Duży wypływ na jakość filtracji miał także wybór ciągu uczącego podczas trenowania.

Zbyt duże sieci nie dały się tak łatwo wytrenować:


Obliczanie stosunków fluorescencji komórek dla kanałów CFP i YFP dla obrazów czterowymiarowych (maj 2012)

Projekt został wykonany na zaliczenie przedmiotu "Zastosowania informatyki w medycynie". Stworzona została aplikacja w C#, WPF wykorzystująca "za plecami" program CellProfiler. Zadaniem aplikacji było sprawić, aby użytkownik nie znając programu CellProfiler mógł zbadać stosunek fluorescencji komórek biologicznych. Aplikacja powinna być zatem prosta i intuicyjna i jednocześnie wykorzystywać możliwości CellProfilera do analizy obrazów.
Wygląd aplikacji przedstawia się następująco:

Do pełnego działania aplikacji wymaga się podania lokalizacji pliku wykonywalnego CellProfilera. Do kwadratowych pól po lewej stronie można przeciągnąć, lub kliknąć i wybrać z okna dialogowego pliki TIFF zawierające obrazy komórek w kolejnych odstępach czasu a także o określonej "głebokości" (stąd 4 wymiary). Pierwszy z plików przedstawia komórkę przed zastosowaniem sondy PKB, a drugi po.

Po wybraniu plików, program je analizuje i generuje odpowiedni plik konfiguracyjny do CellProfilera.
Przed rozpoczęciem analizy należy dla CellProfilera określić "promień najmniejszej komórki" w pikselach. Ponieważ określenie tego "na oko" może nie być poprawne uproszczono ten proces. Po wciśnięciu przycisku Change ukazuje się okno, w który możemy obrysować najmniejsza komórkę, a program wyliczy jej promień:


W celu rozpoczęcia analizy komórek klikamy na przycisk Calculate. W tle uruchamiany jest CellProfiler, a jego standardowe wyjście przekierowywane jest do TextBoxa aplikacji. W miarę postępu analizy, rośnie pasek w ProgressBarze pod przyciskiem Calculate.

Program potrafi również wyświetlać wykres stosunków fluorescencji kanałów, zapisywać oraz wczytywać ostatnie pomiary a także eksportować wszystko do Excela. 
Przykład działania aplikacji został pokazany na poniższym filmie:



RESZTA WKRÓTCE...


Brak komentarzy:

Prześlij komentarz