Podsumowanie prac w I semestrze. - Assembla

Document Sample
Podsumowanie prac w I semestrze. - Assembla Powered By Docstoc
					   Pracownia Projektowa
     Wydział Elektroniki, Automatyki, Informatyki i Elektrotechniki

                                 Informatyka




                                 Gliwa Bogdan
                              Gorzołka Waldemar
                                Świątek Marcin



Prowadzący: dr inż. Łukasz Czekierda
Zawartość
SEMESTR I ..................................................................................................................................................... 5
Prace w I semestrze5
   Temat i cele projektu ................................................................................................................................ 5
   Ogólne założenia i etapy projektu ............................................................................................................ 5
Rozpoznanie bibliotek ................................................................................................................................... 5
   OpenCV ..................................................................................................................................................... 5
       Ogólny opis ........................................................................................................................................... 5
       Cechy ..................................................................................................................................................... 5
       Wymagania ........................................................................................................................................... 6
       Licencja.................................................................................................................................................. 6
       Dokumentacja ....................................................................................................................................... 6
       Uwagi .................................................................................................................................................... 6
   ObjectDet .................................................................................................................................................. 6
       Ogólny opis ........................................................................................................................................... 6
       Cechy ..................................................................................................................................................... 6
       Wymagania ........................................................................................................................................... 6
       Licencja.................................................................................................................................................. 6
       Dokumentacja ....................................................................................................................................... 6
       Uwagi .................................................................................................................................................... 7
   Mimas Toolkit ........................................................................................................................................... 7
       Ogólny opis ........................................................................................................................................... 7
       Cechy ..................................................................................................................................................... 7
       Wymagania ........................................................................................................................................... 7
       Licencja.................................................................................................................................................. 7
       Dokumentacja ....................................................................................................................................... 7
       Uwagi .................................................................................................................................................... 7
   Ravl............................................................................................................................................................ 7
       Ogólny opis ........................................................................................................................................... 7
       Cechy ..................................................................................................................................................... 7
       Wymagania ........................................................................................................................................... 8
       Licencja.................................................................................................................................................. 8
                                                                                                             Pracownia projektowa |                     2
       Dokumentacja ....................................................................................................................................... 8
       Ograniczenia ......................................................................................................................................... 8
   LTI Lib ........................................................................................................................................................ 8
       Ogólny opis ........................................................................................................................................... 8
       Wymagania ........................................................................................................................................... 8
       Licencja.................................................................................................................................................. 8
       Dokumentacja ....................................................................................................................................... 8
       Ograniczenia ......................................................................................................................................... 8
   SNVision Lib............................................................................................................................................... 8
       Ogólny opis ........................................................................................................................................... 8
       Wymagania ........................................................................................................................................... 9
       Licencja.................................................................................................................................................. 9
       Dokumentacja ....................................................................................................................................... 9
       Ograniczenia ......................................................................................................................................... 9
   VisionLab ................................................................................................................................................... 9
       Ogólny opis ........................................................................................................................................... 9
       Wymagania ........................................................................................................................................... 9
       Licencja.................................................................................................................................................. 9
       Dokumentacja ....................................................................................................................................... 9
       Ograniczenia ......................................................................................................................................... 9
Gandalf ........................................................................................................................................................ 10
       Ogólny opis ......................................................................................................................................... 10
       Licencja................................................................................................................................................ 10
       Dokumentacja ..................................................................................................................................... 10
   DIPLib ...................................................................................................................................................... 10
       Ogólny opis ......................................................................................................................................... 10
       Wymagania ......................................................................................................................................... 10
       Licencja................................................................................................................................................ 10
       Dokumentacja ..................................................................................................................................... 11
       Ograniczenia ....................................................................................................................................... 11
   CImg ........................................................................................................................................................ 11
       Ogólny opis ......................................................................................................................................... 11
                                                                                                             Pracownia projektowa |                     3
       Wymagania ......................................................................................................................................... 11
       Licencja................................................................................................................................................ 11
       Dokumentacja ..................................................................................................................................... 11
       Ograniczenia ....................................................................................................................................... 11
Wybór biblioteki.......................................................................................................................................... 12
   Kryteria wyboru ...................................................................................................................................... 12
   Podsumowanie i argumentacja wyboru ................................................................................................. 12
   Testowanie .............................................................................................................................................. 12
   Inne źródła .............................................................................................................................................. 12
Implementacja ............................................................................................................................................ 12
Testy ............................................................................................................................................................ 13
Wyniki testów ............................................................................................................................................. 15
Podsumowanie prac w I semestrze. ........................................................................................................... 16
SEMESTR II .................................................................................................................................................. 17
Prace w II semestrze ................................................................................................................................... 17
   Założenia ................................................................................................................................................. 17
Architektura ................................................................................................................................................ 17
   Opis architektury..................................................................................................................................... 18
Limit przesyłania danych przez środowisko Ice .......................................................................................... 20
Obsługa kamery .......................................................................................................................................... 20
Klient dla Windows Mobile ......................................................................................................................... 21
Testy ............................................................................................................................................................ 21
   Testowanie w sieci WIFI .......................................................................................................................... 22
Testy poprawności rozpoznawania ............................................................................................................. 23
Instrukcja instalacji i uruchomienia klienta w Androidzie .......................................................................... 24
Instrukcja instalacji i uruchomienia serwera w Visual C++ 2008 ................................................................ 25
Aplikacja w działaniu ................................................................................................................................... 26




                                                                                                              Pracownia projektowa |                    4
                        SEMESTR I
Prace w I semestrze

Temat i cele projektu
Celem projektu jest stworzenie modułu, który ma ułatwid osobom niewidomym na poruszanie się
w terenie. Moduł ten ma zostad zintegrowany z innymi modułami tworząc projekt „BlindGuide”, który
jest realizowany w ramach pracy magisterskiej.

Ogólne założenia i etapy projektu
Dotychczasowe prace nad projektem można podzielid na dwa główne etapy:

      Poszukiwania odpowiednich bibliotek, które mogłyby się przydad w projekcie. Chodzi tutaj
       głównie o biblioteki do rozpoznawania obrazu, wykrywania obiektów oraz śledzenia obiektów
       w sekwencjach wideo.
      Pierwsze kroki implementacyjne. W związku z wielkością problemu musieliśmy zająd się pewną
       wąską poddomeną problemu. Ustaliliśmy, że wykrywanie świateł na przejściu dla pieszych
       będzie się doskonale do tego nadawało.


Rozpoznanie bibliotek
Podczas naszych poszukiwao natrafiliśmy na sporo bibliotek i aplikacji, które poddaliśmy późniejszej
analizie.

OpenCV
       Ogólny opis
       Jest to bardzo bogata biblioteka zawierająca ponad 500 algorytmów do tzw. „real time computer
       Vision”. Początkowo była tworzona przez firmę Intel. Jej nazwa jest skrótem od Open source
       Computer Vision libr ary.

       Cechy
           przetwarzanie obrazów(filtrowanie, wykrywanie krawędzi, rogów (edge and corner
             detection), histogramy, operacje morfologiczne, sampling, interpolacja)
           image and video I/O (wczytywanie danych z plików, z kamery, zapis jako obraz lub plik
             wideo)
           analiza strukturalna (template matching, transformacja Hougha, line fitting, ellipse
             fitting, wykrywanie i przetwarzanie konturów)
           analiza ruchu (optical flow, segmentacja ruchu)
           identyfikacja obiektów
           rozpoznawanie twarzy, gestów

                                                        Pracownia projektowa | SEMESTR I    5
            manipulacje na macierzach i wektorach
            basic GUI
            wykorzystuje metody machine learning (k-means, classifiers, neural networks)
            może byd zoptymalizowana pod procesory firmy Intel, pod warunkiem zainstalowania
             komercyjnej niskopoziomowej biblioteki IPP (INTEL Integrated Performance Primitives).
             OpenCV automatycznie wykrywa i używa IPP jeśli tylko jest ona zainstalowana.

     Wymagania
     Biblioteka jest przenośna, działa na systemach Linux, Windows, Mac OS X. Napisana jest
     w języku C, ale posiada wrappery do języków C# i Python.

     Licencja
     Biblioteka objętą jest licencją BSD, z czego wynika, że jest darmowa zarówno do zastosowao
     komercyjnych jak i naukowych

     Dokumentacja
     Dokumentacja do projektu znajduje się pod adresem http://opencv.willowgarage.com/
     wiki/Welcome

     Uwagi
     Biblioteka jest ciągle rozwijana. W Internecie można znaleźd sporo tutoriali oraz przykładów.
     Można nabyd także książkę poświęconą tejże bibliotece (Learning OpenCV). Z jednej z prac
     magisterskich, gdzie przetestowano kilka bibliotek do przetwarzania obrazu, wynika że OpenCV
     jest bardzo wydajna. Dodatkowo ważną zaletą oraz pewną wskazówką jest fakt, że biblioteka
     jest szeroko wykorzystywana w różnych projektach


ObjectDet
     Ogólny opis
     Jest to biblioteka bazująca na OpenCV, ukierunkowana na rozpoznawanie obiektów. Jest ona
     implementacją metody rozpoznawania klasy obiektów bazującej na metodzie "Boosted
     Histograms", opisanej w I. Laptev, "Improvements of Object Detection Using Boosted
     Histograms" (2006)

     Cechy
     Biblioteka charakteryzuje się tym, że można ją dostosowywad do swoich potrzeb. Oprócz
     rozpoznawania obiektów nie posiada innej funkcjonalności.

     Wymagania
     Bazuje na OpenCV, więc tak jak ona, jest przenośna. Została napisana w C++.

     Licencja
     Biblioteka powstała na licencji GNU Lesser General Public License.

     Dokumentacja
     Niestety, ale nie udało nam się znaleźd dokumentacji do tej biblioteki.



                                             Pracownia projektowa | Rozpoznanie bibliotek   6
       Uwagi
       Ogromną wadą jest, że biblioteka ta nie jest już rozwijana. Ostatni release nastąpił 12.2006. Inną
       wadą jest to, że jest za bardzo jest ograniczona funkcjonalnie.

Mimas Toolkit
       Ogólny opis
       Mimas jest biblioteką dla języka C++ (real time computer vision library). Opiera się na kilku
       innych bibliotekach m.in. boost, lapack. Nazwa Mimas pochodzi od jednego z księżyców Saturna.
       Biblioteka była używana do budowy kilku przemysłowych systemów wizyjnych. Istnieje wersja
       biblioteki przeznaczona do języka Ruby - Hornetseye [http://sourceforge.net/projects/
       hornetseye/ ]

       Cechy
       Oto do czego można wykorzystad bibliotekę:
           rozpoznawanie krawędzi, rogów - edge/corner detection
           posiada wiele filtrów
           wspiera transformacje Hougha oraz wiele innych transformacje
           wykorzuje sieci neuronowe
           optic flow

       Wymagania
       Linux (kernel 2.2 and above) lub Solaris (2.5 and above) oraz GNU C++ compiler (version 2.95
       and above).

       Licencja
       Open source, licencja LGPL (GNU Lesser General Public License).

       Dokumentacja
       Dokumentację biblioteki można znaleźd pod adresem
       http://vision.eng.shu.ac.uk/jan/mimas/docs/.

       Uwagi
       Ostatnia wersja biblioteki 2.1 została wydana 30.10.2006. Wersja ta jest production/stable, ale
       już chyba nie jest rozwijana. Nie ma żadnych tutoriali. Istnieje za to dokumentacja
       wygenerowana w doxygen.


Ravl
       Ogólny opis
       Strona biblioteki znajduje się pod adresem http://www.ee.surrey.ac.uk/CVSSP/Ravl/]. Jest to
       akronim: Recognition and Vision Library. Projekt początkowo rozwijany był wewnątrz
       Uniwersytetu w Surrey (UK), a potem przeniesiony jako open source.

       Cechy
       Biblioteka posiada możliwośd pisania aplikacji współbieżnych. Realizacja operacji wejścia-wyjścia
       jest niezależnie od głównego kodu. Posiada on interfejsy podobne to tych z języka JAVA.

                                              Pracownia projektowa | Rozpoznanie bibliotek       7
      Unikane jest stosowanie pointerów. Dodatkowo cechuje się łatwym i potężnym systemem do
      budowy projektu (Qmake).

      Wymagania
      Wymagania dla działania biblioteki to Linux / GNU C++ , Windows / Visual Studio

      Licencja
      Biblioteka jest udostępniana na licencji Lesser Gnu PUBLIC LICENCE. Wynika z tego, że można jej
      używad także do dla wewnętrznych (prioprietary) rozwiązao.

      Dokumentacja
      Spora dokumentacja z możliwością przeszukiwania znajduje się pod adresem
      http://www.ee.surrey.ac.uk/CVSSP/Ravl/RavlDoc/share/doc/RAVL/Auto/Basic/Tree/Ravl.html.

      Ograniczenia
      Niestety ale dużą wadą biblioteki jest to że ostatni release odbył się 27 kwietnia 2007.


LTI Lib
      Ogólny opis
      Strona projektu znajduje sie pod adresem http://ltilib.sourceforge.net/doc/html/index.shtml.
      Jest to projekt stworzony na jednym z niemieckich uniwersytetów. Udostępnia szeroki zbiór
      algorytmów pomocnych przy przetwarzaniu obrazu. Biblioteka jest zorientowana obiektowo
      w C++. Zawiera biblioteki algebry liniowej, klasyfikacji i grupowania, rozpoznawania obrazów
      oraz wizualizacji (jak piszą jest ONA prosta w obsłudze).

      Wymagania
      Wymagania biblioteki to Linux/ GCC lub Windows / VisualC++. Biblioteki nie testowano na
      innych platformach.

      Licencja
      Biblioteka jest udostępniana na zasadzie GNU Lesser General Public License .

      Dokumentacja
      Dokumentacja jest dostępna w doxygenie lub online pod adresem http://ltilib.sourceforge.net/
      doc/html/index.shtml. Na pierwszy rzut oka wydaje się, że dokumentacja jest dośd obszerna.

      Ograniczenia
      Jest to kolejna biblioteka, która nie była dawno releasowana. Ostatni release odbył się w roku
      2005.

SNVision Lib
      Ogólny opis
      Twórcy promują bibliotekę twierdząc, że bazuje na podobnej zasadzie jak ludzki system
      widzenia. Biblioteka SNVision   ozbradostępna jest pod adresem http://www.spikenet-
      technology.com/SNVisionLIB.htm. Przedstawiona ona jest tutaj bardziej do porównania, gdyż
      jest ona platna.

                                              Pracownia projektowa | Rozpoznanie bibliotek       8
     Wymagania
     Biblioteka działa pod Windows 9x, ME, NT4, 2000 or XP na procesorze
     Pentium3 (800 MHz) lub wyższym z 32 MB RAM. Można ją używad wraz z C++, .NET oraz
     VisualBasic.

     Licencja
     Biblioteka dostępna jest w wersji płatnej oraz demonstracyjnej. Pozwala na otwieranie
     obrazków, uczenie się modeli oraz testowanie systemu. Nie pozwala na wyświetlanie lub
     zapisywanie wyników, ani na wczytywanie modeli.

     Dokumentacja
     Dokumentacja jest dostępna zarówno do Model Buildera (http://www.spikenet-
     technology.com/download/SNVisionMBUserGuide.chm) jak i również do samej biblioteki
     (http://www.spikenet-technology.com/download/SNVisionLibraryReferenceManual.chm)

     Ograniczenia
     Aby móc używad tej biblioteki trzeba mied licencje na dystrybucje.

VisionLab
     Ogólny opis
     Strona projektu znajduje się pod adresem http://www.mitov.com/html/visionlab.html. Firma
     zajmująca się rozwojem biblioteki wygląda na dośd solidną. Rozwija jednocześnie wiele
     produktów. Wersje demonstracyjne, są zachęcające.

     Oto przykłady zastosowad, do których można wykorzystad bibliotekę:
         Motion Detection - możliwa jest bieżąca analiza obrazu pobranego z kamery, aplikacja
             wykrywa ruchy, kierunek oraz szybkośd ruchu,;
         Targets Tracking - na bieżąco aplikacja wykrywa obiekty, a następnie je śledzi;
         Hough Circles - znajdowanie zaokrąglonych kształtów;
         Hough Lines - wykrywanie linii;
         Contour Detection - wykrywanie konturów.


     Wymagania
     Są trzy linie rozwoju biblioteki: CL - Delphi / C++ Builder , MFC compatible Visual C++ oraz
     .NET 2.0 version, compatible with Visual Studio 2005, Visual Basic.NET, C# and J#.

     Licencja
     Dla szkolnych oraz niekomercyjnych projektów biblioteka jest bezpłatna.

     Dokumentacja
     Można znaleźd zarówno manuale, tutoriale, Wiki jak i forum. Po zainstalowaniu dostępne są
     takżę pliki pomocy.

     Ograniczenia
     nie mamy kodu bibliotek bo potrzebna jest licencja ( nie jest to jednak coś wymaganego )



                                             Pracownia projektowa | Rozpoznanie bibliotek       9
Gandalf
     Ogólny opis
     Gandalf jest biblioteką obliczeo numerycznych napisaną w języku C. Gandalf obecnie składa się z
     czterech pakietów:
          Common - pakiet prostych struktur i funkcji używanych przez inne pakiety, jak alokacja
             pamięci, obsługa błędów
          Linear algebra - pakiet z funkcjami do operacji na wektorach i macierzach
          Image - pakiet definiujący ogólną strukturę obrazów oraz niskopoziomowe operacje na
             nich (operacje na kolorach, pixelach). Pozwala także na prezentację obrazów.
          Vision - pakiet zawierający funkcje geometryczne, przetwarzania obrazów na wyższym
             poziomie niż jest to realizowane w Image. Posiada on funkcje detekcji krawędzi oraz
             rogów

     Licencja
     Gandalf jest free zarówno dla celów badao naukowych, jak i użytku komercyjnego na zasadach
     licencji LGPL (Lesser Gnu Public License).

     Dokumentacja
     Dokumentacja do biblioteki zawarta jest tutaj oraz w formacie PDF

DIPLib
     Ogólny opis
     DIPlib jest niezależną platformowo biblioteką do analizy obrazów napisaną w języku C. Dostarcza
     ona funkcji do wykonywania transformacji, operacji filtrowania, generacji i pomiaru obiektów
     oraz statystycznej analizy zdjęd.

     Obecne wydanie składa się z ponad 500 udokumentowanych funkcji, z czego ponad 300 z nich
     dostarcza funkcjonalności przydatnej do analizy obrazów. Funkcjonalnośd wejścia/wyjścia
     zapewniana jest przez niezależną bibliotekę i wspiera formaty plików ICS, TIFF oraz JPEG

     Biblioteka ta jest przewidziana do współpracy z MATLAB'em. Jednak możliwe jest wykorzystanie
     jej w niezależnych programach w połączeniu z biblioteką dipIO, która umożliwia wczytanie,
     przetwarzanie oraz zapis obrazów na dysku.

     Wymagania
     Biblioteka posiada wsparcie dla platform:
          Linux 32-bits, MATLAB 6.5/R13 and higher
          Linux 64-bits, MATLAB 7.0.1/R14SP1 and higher
     MacOS X (Intel), MATLAB 7.4/R2007a and higher
          Windows XP 32-bits, MATLAB 6.0/R12 and higher
          Windows XP 64-bits, MATLAB 7.2/R2006a and higher

     Licencja
     Biblioteka jest dostarczana na podstawie kilku rodzajów licencji. Interesująca dla nas jest licencja
     typu A (uniwersytecka) do użytku niekomercyjnego przez studentów i pracowników uczelni w
     projektach badawczych bez sponsorów przemysłowych. Redystrybucja software'u lub jego części

                                                            Pracownia projektowa | Gandalf      10
       nie jest jednak dozwolona. Licencja jest typu free. Może zostad uzyskana poprzez wskazówki na
       stronie

       Dokumentacja
       Dokumentacja zawierająca przewodnik dla programisty, wykaz funkcji oraz przykładowe
       programy wykorzystujące bibliotekę może zostad znaleziona tutaj w formacie PDF oraz HTML

       Ograniczenia
       Ograniczeniem jest to, że biblioteka jest płatna i może posłużyd wyłącznie do celów badao
       naukowych. Obserwując czasy operacji na obrazach można stwierdzid, że biblioteka nie jest
       specjalnie szybka, OpenCV wypada dużo lepiej pod tym względem. Kolejną wadą jest to, że
       biblioteka nie potrafi przetwarzad strumienia video.

       Dla przykładu dla obrazu jpeg o rozdzielczości 2816x2112 czas wczytania, zastosowania filtra
       smoothingu oraz zapisania na dysku na procesorze Intel Core 2 Duo 2.4 GHz oraz pamięcią
       operacyjną 4 GB wyniósł ok 850 ms. Czas wykonania wymienionych operacji dla mniejszego
       pliku 256x256 wyniósł ok 30 ms


CImg
       Ogólny opis
       CImg jest biblioteką typu open source w języku C++ stanowiącą zestaw narzędzi do
       przetwarzania obrazów. CImg definiuje proste klasy i metody do operowania na obrazach.
       Pozwala na ładowanie i zapis różnych formatów plików, dostęp do pixeli, wyświetanie, zmianę
       rozmiaru, obrót, odbicia lustrzane, filtrowanie, rysowanie prostych elementów (teksty, krzywe,
       obiekty 3D) liczenie statystyk, interakcję użytkownika itd.

       Wymagania
       Biblioteka jest przenośna, która współpracuje z następującymi systemami operacyjnymi: Unix,
       Windows, MacOS X, BSD oraz z różnymi kompilatorami: Visual C++, GNU g++, Intel icc, Borland
       bcc.

       Licencja
       CImg jest biblioteką free, open source, rozpowszechnianą na zasadach licencji CeCILL-C (bliskiej
       do GNU LGPL) lub CeCILL (kompatybilnej z GNU GPL). Biblioteka może byd używana
       w komercyjnych aplikacjach.

       Dokumentacja
       Dokumentacja znajduje się pod tym adresem .

       Ograniczenia
       Pewnym ograniczeniem jest fakt, że funkcje operują na dosyd niskim poziomie.




                                                            Pracownia projektowa | Gandalf    11
Wybór biblioteki

Kryteria wyboru
Przy wyborze biblioteki, przy pomocy której zrealizujemy projekt stosowaliśmy następujące kryteria:

       Funkcjonalnośd – Dana biblioteka musiała spełniad pewne kryteria funkcjonalności przez nas
        wymagane
       Wsparcie – wszelkiego rodzaju dokumentacja oraz źródła mogące nam pomóc w wyborze
       Wydajnośd – docelowo aplikacja powinna działad szybko

Podsumowanie i argumentacja wyboru
Biorąc pod uwagę biblioteki OpenCV, Mimas oraz objectdet, to ta pierwsza jest zdecydowanym
faworytem. Ostatnia zdecydowanie odpada, gdyż ma najmniejsze możliwości, wykorzystuje OpenCV do
stworzenia implementacji jednej z metod rozpoznawania obiektów. Mimas ma dużo mniejszą ilośd
funkcji w porównaniu do OpenCV, poza tym ta biblioteka przestała byd rozwijana, a dokumentacja nie
należy raczej do zbyt bogatych.

Spośród bibliotek DIPLib, CImg oraz Gandalf trudno jest wybrad faworyta. Każda z nich ma pewne zalety
i wady. Żadna z nich nie dorównuje jednak bibliotece OpenCV. DIPLib ma duże możliwości jeżeli chodzi o
funkcjonalnośd, jednak jej licencja jest płatna (dla celów innych niż akademickie) i nie jest zbyt szybka.
CImg jest zdecydowanie szybsza, cechuje się dobrą przenośnością i obsługą wielu formatów plików
obrazów jednak jej możliwości są dosyd skromne. Gandalf posiada ciekawe funkcje m.in. do operowania
kamerą obrazu, nie jest jednak zbyt popularna. Żadna z tych bibliotek nie potrafi jednak operowad na
plikach lub strumieniu video.


Testowanie
Pod adresem http://barrabanda.pl/blindguide/ znajdują się nagrania do testów.


Inne źródła
Inne materiały, które znaleźliśmy w sieci:
Książka do biblioteki Open CV - Learning OpenCV - Gary Bradski and Adrian Kaehler
Praca magisterska Mariusza Szablowskiego oraz jego cenne rady


Implementacja
Udało nam się stworzyd program, który stara się rozpoznad światła drogowe. W odpowiednich folderach
przechowujemy wzorce na podstawie, których biblioteka stara się szukad wszystkiego co może byd
światłem. Biblioteka niestety nie zapewniała automatycznego skalowania, co zmusiło nas do
samodzielnej implementacji tego mechanizmu. Skalowanie przeprowadzane jest z krokiem 1,5.
Dodatkowo po znalezieniu patternu sprawdzamy czy w pewnej odległości nie znajduje się słup.
Wykorzystywane jest tutaj wykrywanie linii.

Kody źródłowe znajdują się na płycie dołączonej do projektu.


                                                     Pracownia projektowa | Wybór biblioteki     12
Testy
Oto wyniki dla przykładowych zdjęd testowych. Filmiki oraz zdjęcia są dołączone na płycie.




                                                                Pracownia projektowa | Testy   13
Pracownia projektowa | Testy   14
Wyniki testów
Przeprowadziliśmy testy aplikacji dla trzech przypadków. Pierwszy - gdy nie uwzględnialiśmy linii
pionowych (nie wykrywaliśmy słupa). W pozostałych dwóch przypadkach wykrywaliśmy linie. Jednak
w jednym z nich stosowaliśmy binaryzację przed procesem wykrywania linii (transformata Hougha),
a w drugim nie. W sumie testy były przeprowadzane na 83 zdjęciach, co wymagało długiej i monotonnej
pracy.

                                                       Ilość
                                 Ilość wykryć       wystąpień      Ilość poprawnie       Ilość fałszywie
     Tryby wykrywania
                                   zielonego        zielonego          wykrytych            wykrytych
                                    światła          światła       zielonych świateł    zielonych świateł
     z liniami i progiem               69               38                20                    49
     z liniami, bez progu              92               38                21                    71
            bez linii                  99               38                24                    75



                                                      Ilość         Ilość poprawnie      Ilość fałszywie
     Tryby wykrywania            Ilość wykryć       wystąpień          wykrytych            wykrytych
                                  czerwonego       czerwonego         czerwonych           czerwonych
                                    światła          światła             świateł             świateł
     z liniami i progiem               39              47                  30                    9
     z liniami, bez progu              49              47                  30                   19
            bez linii                  55              47                  34                   21


Poniżej przedstawiamy porównanie procentowe uzyskanych wyników. Procent poprawnie wykrytych to
stosunek ilości dobrych wykryd do rzeczywistej ilości wystąpieo danego koloru światła. Z kolei procent
błędów to stosunek ilości fałszywych wykryd do całkowitej ilości wykryd przez naszą aplikację dla danego
zdjęcia.

Zielone światła



                                                 % poprawnie
                      Tryby wykrywania                                 % błędów
                                                  wykrytych


                     z liniami i progiem           52,63157895           65,33333333
                     z liniami, bez progu          55,26315789           77,17391304
                            bez linii              63,15789474           75,75757576




                                                      Pracownia projektowa | Wyniki testów     15
Czerwone światła


                                                % poprawnie
                     Tryby wykrywania                                 % błędów
                                                 wykrytych

                     z liniami i progiem            63,82978723         23,07692308
                     z liniami, bez progu           63,82978723          38,7755102
                            bez linii               72,34042553         38,18181818


Na procesorze Intel Pentium T7300 2.0GHz i pamięci operacyjnej 2Gb testowaliśmy średnie czasy
(z uruchomieo dla kilku plików) wykonania dla każdej z wersji aplikacji.

                             Tryby wykrywania              Czas [s]
                             z liniami i progiem            4,49
                             z liniami, bez progu           1,85
                                    bez linii               1,21


Podsumowanie prac w I semestrze.
Niestety z powyższych testów wynika, iż procent błędów jest zbyt wysoki. Przez błąd rozumiemy
fałszywe wykrycie światła. Jest on większy dla światła zielonego niż czerwonego. Dodanie wykrywania
słupów na podstawie pionowych linii w pewnym otoczeniu wykrytego patternu spowodowało
zmniejszenie liczby fałszywych wykryd, ale zmniejszyła sie tez liczba poprawnych wykryd (niektórych
nieuniknionych w takim przypadku – np. gdy przechodnie zasłaniają słup od świateł, z kolei w innych nie
zawsze wykrywa pionowe linie od słupa gdy jest mały kontrast z otoczeniem).
Skalowanie okazało się nieuniknione, gdyż w ten sposób uniezależniliśmy się od stopnia zbliżenia do
świateł (wykorzystywane funkcje z OpenCV API do "pattern matching" nie wykonywały tego
automatycznie dlatego istniała potrzeba implementacji).

Nasza aplikacja jest w fazie rozwoju. Musimy ją dopracowad oraz zastanowid się nad sposobami jej
udoskonalenia. Gdy już to będzie gotowe będziemy mogli przejśd do kolejnego etapu i spróbowad
wykrywad bardziej skomplikowane elementy.




                                 Pracownia projektowa | Podsumowanie prac w I semestrze.      16
                       SEMESTR II
Prace w II semestrze


Założenia
Celem drugiego semestru były stworzenie klienta działającego na urządzeniu mobilnym, który
miałby pobierad informacje ze świata zewnętrznego (robid zdjęcia), następnie wysyład je do
serwera, którego zadaniem byłoby je odpowiednio przetworzyd i wynik odesład do klienta.
Bardzo ważnym aspektem prac była komunikacja.




Architektura
Oto architektura systemu.




                                         Klient2
             Klient1                                                      Klient3




                                      SIED



                                         NAT
                                                               Firewall


                                     SERWER


                                                   Pracownia projektowa | SEMESTR II   17
Opis architektury
Serwer odbiera żądanie od klienta. Klientem jest telefon komórkowy z systemem Android.
Klient w żądaniu przesyła zdjęcie do analizy. Jako środowisko middleware do komunikacji został
użyty Ice (oraz IceE – Ice Embedded dla platform mobilnych). Zdjęcie to jest przetwarzane,
zgodnie z algorytmami stworzonymi w I semestrze. Po wykonaniu obliczeo, na podstawie
wyników algorytm decyduje czy osoba może, czy nie może przejśd przez jezdnię. Użytkownik
telefonu otrzymuje taką informację w formie głosowej.

IceE, czyli "embedded Ice" jest implementacją Ice przeznaczoną na urządzenia o ograniczonych
zasobach, takich jak urządzenia mobilne. Mimo to IceE nie traci przy tym swej szybkości.
Skorzystaliśmy z wersji przeznaczonej na platformę Android.

IceE pozwala korzystad z komunikacji AMI(Asynchronous Method Invocation). Jednak ze
względu na fakt, że chcieliśmy, aby cała komunikacja odbywała się w jednym połączeniu
(obsługa NAT) – bidirectional connection, skorzystaliśmy z callback'ów.

Klient łącząc się jest rejestrowany przez serwer. Za każdym razem, gdy przesyła obraz do
analizy, tworzony jest nowy wątek. Rozmiar dostępna pula wątków może byd regulowany. Gdy
liczba działających wątków zostanie przekroczona, ostatni z listy jest usuwany (FIFO). Z punktu
widzenia praktycznego analiza starszych zdjęd od danego klienta jest już mniej przydatna.


                      Klient1                          Klient2




Wątek1 Wątek2 Wątek3 Wątek4 Wątek5 Wątek6 ...                                   Wątek n
 obraz1




             obraz2



                         obraz3




                                    obraz4



                                              obraz5




                                                       Pracownia projektowa | Architektura   18
Opis użytego slice (specyfikacja użytych interfejsów) do Ice
module BlindGuideComm
{

         sequence<byte> ImageData;                                //raw file bytes

         struct Image{
                 ImageData data;
                 string description;
         };

         interface ResponseCallback{
                 void response(float result, long ID);
         };

        /* returned type float can represent either boolean value or
probability */
        interface ClientServer{
                void registerUser(string userName, Ice::Identity ident);
                void unregisterUser(string userName);
                void analyzeImage(Image img, string userName, long ID);
        };
};



Plik ten składa się z jednego modułu BlindGuideComm, który z kolei jest zdefiniowany przez
interfejsy ClientServer, ResponseCallback oraz strukturę Image.

Struktura Image przechowuje informację o aktualnie przesyłanej klatce. Jest to sekwencja
bajtów oraz string description zawierający dodatkowy opis przesyłanych danych.

Interfejs ClientServer składa się z metod do rejestracji oraz wyrejestrowania klienta w serwerze,
a także z metody o nazwie analyzeImage. Przyjmuje ona parametr typu Image, identyfikator
użytkownika (jego nazwę) raz parametr ID typu long. Parametr ID wskazuje nam unikalny
numer klatki.

Korzystamy również z callback'u ResponseCallback. Zawiera on jedną metodę - response, z
parametrami result jako float oraz ID jako long. Wartośd result niesie ze sobą informację o
prawdopodobieostwie z jakim pieszy może przejśd przez przejście. Wartośd ta jest z zakresu 0-1.
Wartości bliskie 0 odpowiadają za wykrycie światła czerwonego, bliskie 1 - zielonego, a ok 0.5 -
brak świateł lub brak jednoznacznej informacji odnośnie koloru świateł. Znaczenie parametru
ID jest takie samo jak wcześniej omówione.

Dzięki użyciu callback’u komunikacja klienta z serwerem odbywa się na jednym połączeniu
(bidirectional connection) - co pozwala pracowad w środowisku, gdzie klient znajduje się za
NAT'em.




                                                    Pracownia projektowa | Architektura   19
Wartość zwracana przez serwer

Serwer zwraca wartości ciągłe w przedziale 0-1 zgodnie ze wzorem:




W kliencie jest podejmowana decyzja co do akcji na podstawie odpowiedzi od serwera.
Przedział jest podzielony na 3 podprzedziały:

      0 – 0.4 - oznacza akcję „Stój” (wykryte tylko czerwone światła lub przewaga wykrytych
       czerwonych świateł nad zielonymi)
      0.4 – 0.8 - algorytm nie był wstanie określid, czy na zdjęciu znajduje się czerwone
       światło, czy nie (brak wykrytych świateł lub mniej więcej jednakowa ilośd wykrytych
       świateł zielonych jak i czerwonych)
      0.8 – 1.0 - algorytm wykrył zielone światło (tylko same zielone światła lub znaczna
       przewaga wykrytych zielonych świateł nad czerwonymi)



Limit przesyłania danych przez środowisko Ice
        Domyślny limit przesyłania danych przez Ice wynosi ok. 1MB (wraz z narzutami
nagłówków). Można go zwiększyd przez ustawienie property (w projekcie w pliku config.txt w
kliencie i serwerze): Ice.MessageSizeMax=1500 (1500 to przykładowa wartośd w kB).


Obsługa kamery
       W Androidzie dośd łatwo można robid zdjęcia używając kamery. Ale obsługa kamery ma
 kilka ograniczeo – przede wszystkim rozbudowane API do jej obsługi jest od wersji API 5
 (Android 2.0) – urządzenie testowe miało API 3 (Android 1.5) , a urządzenia dostępne w
 laboratorium były dostępne w wersji Androida 1.5 i 1.6. W dostępnym API dla telefonu
 testowego nie można było ustawiad rozmiarów robionego zdjęcia, tylko jest robione w
 maksymalnej dostępnej rozdzielczości (w tym wypadku 5 MPx), co pociągało za sobą znaczne
 rozmiary zdjęd (ok. 2 MB).
  Rozwiązaniem było robienie zdjęd jako bitmapa, zmniejszanie jej przez pół (jest do tego
 funkcja dla bitmap i jest to robione dośd efektywnie), następnie konwertowanie do formatu
 JPEG. Dzięki temu wynikowe obrazki mają wymiary 1280x960 i zajmują około 100-250 KB.
 Zrobione zdjęcia po skonwertowaniu były nieco rozmyte – udało się to nieco zredukowad


                    Pracownia projektowa | Limit przesyłania danych przez środowisko Ice   20
 przez użycie autofocusa (dzięki temu podczas robienia zdjęcia optyka aparatu jest dostrajana
 do odległości od przedmiotów i zdjęcia otrzymywane są w trochę lepszej jakości).


Ograniczenia dla klienta w Androidzie
Istnieje limit na alokację pamięci dla całej aplikacji i wynosi on 16 MB. W przypadku używania
bitmap, można łatwo przekroczyd tę granicę.

W API dla Androida w wersji 2.0 jest możliwośd konfiguracji takiego limitu (my korzystamy z API
1.5).

Minimalne wymagania sprzętowe dla Androida to 32 MB RAM’u oraz procesor o taktowaniu
200 MHz.


Klient dla Windows Mobile
Wcześniej został zaimplementowany klient na platformę Windows Mobile z obsługą
komunikacji przy użyciu biblioteki IceE. Trudnym elementem była konfiguracja środowiska
programistycznego na tę platformę. Biblioteki IceE trzeba było skompilowad samodzielnie.
Stworzenie i uruchomienie klienta komunikującego się z serwerem zakooczyło się
powodzeniem, jednak pojawiły się problemy z obsługą kamery, gdyś .NET Compact Framework
nie jest przewidziany dla języka C++. Z tego powodu zdecydowaliśmy się przejśd na platformę
Android, której skonfigurowanie i uruchomienie zajęło nieporównywalnie mniej czasu.



Testy
Testy przeprowadzone były na telefonie Samsung Galaxy i7500 z
platformą Android w wersji 1.5.

Specyfikacja techniczna telefonu:
Procesor:            Qualcomm MSM7200a 528 MHz
System Operacyjny: Android
Pamięd:              8 GB Flash, 128 MB RAM
Wyświetlacz:         3,2" AMOLED dotykowy, rozdzielczośd
                     320x480 HVGA, 24 bity




                            Pracownia projektowa | Ograniczenia dla klienta w Androidzie   21
Wszystkie testy zostały powtórzone 10 krotnie z zachowaniem maksymalnej możliwej
powtarzalności (robione w obrębie tych powtórzeo, testy były dla dokładnie tego samego
obrazka, któremu zostało robione zdjęcie przez mobilnego klienta).

Podczas testowania następujące parametry były mierzone:
    czas autofocusu – czas, jaki potrzebuje aparat na automatyczne dostosowanie ostrości,
      wykonywane zaraz przed zrobieniem zdjęcia
    czas robienia zdjęcia – czas od momentu rozpoczęcia robienia zdjęcia do momentu, gdy
      są dostępne dane (tablica bajtów jako obrazek - bitmapa)
    czas konwersji obrazka – konwersja obejmuje zmniejszanie rozmiaru bitmapy (każdy
      wymiar dwukrotnie), następnie konwersję do formatu JPEG z poziomem jakości 90 %.
    czas przetwarzania na serwerze – czas potrzebny do uzyskania informacji o wykrytych
      światłach
    czas komunikacji – czas przesyłu przez sied w obie strony
    czas inicjalizacji odtwarzacza dźwięków
    całkowity czas
    rozmiar przesyłanego zdjęcia

Testy w sieci WIFI
Klient w sieci WIFI łączy się do serwera z publicznym IP

Kolumny oznaczone cyframi 1-3 oznaczają 3 różne obrazki (testy dla każdego obrazka
powtórzone 10 krotnie)

                           Parametry                   1      2      3   Średnia
         Czas autofocusu [s]                          1,10   1,42  1,61    1,38
         Czas robienia zdjęcia [s]                    2,36   2,33  2,23    2,31
         Czas konwersji obrazka [s]                   1,90   2,03  1,80    1,91
         Czas przetwarzania na serwerze [s]           2,04   2,41  2,34    2,26
         Czas komunikacji [s]                         0,71   0,86  0,30    0,62
         Czas inicjalizacji odtwarzacza dźwięków [s] 0,16    0,12  0,21    0,16
         Całkowity czas [s]                           8,29   9,19  8,50    8,66
         Rozmiar przesyłanego zdjęcia [kB]           216,80 269,00 83,90 189,90


Wyznaczone rzeczywiste prędkości sieci wifi przez program Speed test (łączy się on z jednym ze
zdalnych serwerów):
      download - 4,75 Mb/s
      upload – 0,95 Mb/s


                                                           Pracownia projektowa | /Testy   22
Testy przez sieć komórkową
Klient w sieci komórkowej łączy się z serwerem, który posiada publiczne IP

Testy przez sied komórkową zostały wykonane dla jednego obrazka (powtórzone 10 krotnie) .

                                        Parametry                   1
                      Czas autofocusu [s]                          0,97
                      Czas robienia zdjęcia [s]                    2,52
                      Czas konwersji obrazka [s]                   2,19
                      Czas przetwarzania na serwerze [s]           2,19
                      Czas komunikacji [s]                        13,21
                      Czas inicjalizacji odtwarzacza dźwięków [s] 0,27
                      Całkowity czas [s]                          21,42
                      Rozmiar przesyłanego zdjęcia [kB]           229,20


Wyznaczyliśmy rzeczywiste prędkości sieci komórkowej (program Speed test):
      download – 0,42 Mb/s
      upload – 0,12 Mb/s

Podsumowując wyniki można zauważyd, że czas od momentu wywołania akcji „zrób zdjęcie” do
momentu wysyłania obrazka przez sied trwa dośd długo – ponad 5 sekund. Całkowite czasy do
odpowiedzi przy testowaniu przez sied wifi oraz sied komórkową, różnią się ponad 12 sekund i
jest to czas, jakim różni się czas komunikacji przez sied komórkową od komunikacji przez sied
wifi.


Testy poprawności rozpoznawania
Test przeprowadziliśmy na 36 obrazkach, przedstawiających przejście dla pieszych ze światłami
(obrazki zostały wyświetlane na ekranie monitora i zostało im robione zdjęcie). Poniżej znajdują
się wyniki:

                        Wykryte poprawnie                      19
                        Komunikat „poproś o pomoc”             10
                        Błędnie wykryte                        7




                                Pracownia projektowa | Testy poprawności rozpoznawania   23
Instrukcja instalacji i uruchomienia klienta w Androidzie


  1. Ze strony http://www.zeroc.com/download.html należy pobrad wersję binarną Ice, czyli
      przykładowo Windows Installer for Visual Studio 2008.
  2. Wymagane jest zainstalowanie w systemie SDK dla Androida.
  3. Dla środowiska Windows potrzebna jest instalacja Cygwin – można ją pobrad ze strony
      http://www.cygwin.com/ (potrzebne jest polecenie sed w konsoli)
  4. W głównym katalogu należy edytowad plik makefile i umieścid poprawną ścieżkę do
      instalacji Ice w wersji binarnej (do katalogu, gdzie zainstalowaliśmy wersję binarną Ice z
      punktu 1 – przykładowo C:\Ice-3.3.1-VC90)
  5. Z konsoli przejśd do głównego katalogu projektu i wywoład polecenie make client. To
      spowoduje, że dla klienta na Androida zostanie stworzony plik slice dla Ice z aktualną
      ścieżką.
  6. Wygodne jest używanie Eclipse w pisaniu aplikacji. Używając Eclipse należy zainstalowad
      wtyczkę Slice2Java, która pozwala na automatyczne generowanie odpowiednich klas dla
      Javy na podstawie pliku Slice. Można ją pobrad bezpośrednio z poziomu Eclipse ze strony
      http://www.zeroc.com/download/eclipse. Szczegółowa instrukcja instalacji znajduje się
      pod adresem http://www.zeroc.com/eclipse.html. Aby wskazad w Eclipse, że używamy
      w projekcie tej wtyczki, w menu kontekstowym projektu wybieramy Slice2Java->Add
      Slice2Java builder.
  7. Pod adresem http://www.zeroc.com/labs/android/download.html znajdują się
      biblioteki Ice dla Androida. Należy je pobrad, wypakowad i w ścieżce z bibliotekami w
      projekcie podad lokalizację pliku IceAndroid.jar znajdującego się po rozpakowaniu w
      katalogu ..\java\lib. Opcjonalnie można również dodad plik IceTest.jar w celu testów.
  8. W katalogu ..\android\demo znajdują się 3 przykładowe projekty, które dosyd dobrze
      obrazują możliwości Ice.
  9. Na stronie http://www.zeroc.com/doc/screencasts.html znajduje się film Ice In 20
      Minutes, który bezboleśnie wprowadza w programowanie w języku Java z Ice używając
      Eclipse.
  10. Aby uruchomid klienta należy ustawid ścieżkę do pliku konfiguracyjnego z opcjami Ice.
      Ścieżkę w projekcie (naszym) ustawia się w res->values->strings.xml->config_path a
      następnie w podanej lokalizacji należy umieścid plik konfiguracyjny. Przykładowy plik
      znajduje się w projekcie w config->config.txt. Dla ClientServer.Proxy należy podad IP
      komputera, na którym uruchomiony jest serwer. Porty (opcja –p) muszą się zgadzad dla
      serwera i klienta. Warto aktywowad opcję Ice.ACM.Client=0, w której ustawia się czas
      dla Active Connection Management. Domyślnie wynosi on 60 sekund i powoduje, że po
      tym czasie połączenie z serwerem jest zrywane.

          Pracownia projektowa | Instrukcja instalacji i uruchomienia klienta w Androidzie   24
W celu uruchomienia naszego projektu wystarczy przeprowadzid kroki 1-6 (bez wskazywania na
użycie Slice2Java buildera) oraz 10.




Instrukcja instalacji i uruchomienia serwera w Visual C++ 2008
   1. Należy mied zainstalowane Visual Studio 2008.
   2. Ze strony http://www.zeroc.com/download.html należy pobrad wersję binarną Ice -
      Windows Installer for Visual Studio 2008 – chyba, że to już zostało zrobione podczas
      instalacji klienta.
   3. Do zmiennej środowiskowej PATH należy dodad wpis do katalogu bin dla zainstalowanej
      w poprzednim punkcie wersji binarnej Ice (przykładowo: C:\Ice-3.3.1-VC90\bin)
   4. Dla środowiska Windows potrzebna jest instalacja Cygwin – można ją pobrad ze strony
      http://www.cygwin.com/
   5. W głównym katalogu należy edytowad plik makefile i umieścid poprawną ścieżkę do
      instalacji Ice dla Visual Studio (do katalogu, gdzie zainstalowaliśmy wersję binarną Ice z
      punktu 1 – przykładowo C:\Ice-3.3.1-VC90) oraz OpenCV
   6. Z konsoli przejśd do głównego katalogu projektu i wywoład polecenie make server. To
      spowoduje, że dla serwera zostaną ustawione poprawne ścieżki dla pliku projektu Visual
      Studio.
   7. Przejśd do katalogu serwera i otworzyd plik blindGuideComm_server.vcproj
   8. Gdy otworzy się projekt w Visual Studio, w Solution Explorer nacisnąd prawym
      przyciskiem na projekt i wybrad Rebuild, zapisad plik o rozszerzeniu sln, który zostanie
      stworzony.
   9. Przed uruchomieniem stworzonego pliku server.exe, należy skonfigurowad odpowiednio
      plik config.txt w katalogu serwera - ustawid port (opcja -p)




      Pracownia projektowa | Instrukcja instalacji i uruchomienia serwera w Visual C++ 2008   25
Aplikacja w działaniu
Poniżej znajduje się kilka zrzutów ekranów działającej aplikacji:




                                              Pracownia projektowa | Aplikacja w działaniu   26
Pracownia projektowa | Aplikacja w działaniu   27
Wnioski

        Przeprowadzone testy pokazują, że czasy jakie upływają od momentu robienia zdjęcia
do momentu otrzymania odpowiedzi są rzędu 10s (korzystając z sieci WiFi) oraz 20s (korzystając
z sieci operatora telefonicznego). Są one nieco za długie aby były do zaakceptowania, jeśli
aplikacja miałaby byd wykorzystywana w rzeczywistych zastosowaniach (pieszy stojący na
przejściu dla pieszych i oczekujący na informację o pozwoleniu lub nie przejścia na drugą stronę
ulicy).
        Wąskim gardłem okazało się robienie zdjęcia i związane z nim przetwarzanie (autofocus,
właściwe robienie zdjęcia, konwersja otrzymanego obrazka). Nie za bardzo widad możliwości,
aby można było skrócid te czasy (w używanej wersji API Androida):
     autofocus (bez niego zdjęcia są niewyraźne i aplikacja nie radzi sobie z rozpoznawaniem
        rodzaju światła na przejściu dla pieszych),
     konwersja (Przesyłanie obrazków bez konwersji trwałoby dużo dłużej – pierwotny
        rozmiar plików otrzymany z 5MPx aparatu to ok. 2-3 MB przy formacie JPEG. Ponadto
        trzeba by zwiększad limit przesyłania danych przez Ice i co więcej, częśd odpowiedzialna
        za rozpoznawanie obrazów została zaprojektowana pod niższą rozdzielczośd – nie
        oryginalną, otrzymaną z 5 MPx aparatu). W wersjach Androida od API 2.0 można ustawid
        rozmiar robionego zdjęcia i wtedy nie trzeba już dokonywad konwersj, co
        zaoszczędziłoby ok. 2 sekund, przez które jest wykonywana wspomniana konwersja.

W sieci komórkowej wąskim gardłem jest komunikacja – czasy, jakimi różnią się testy przez sied
WiFi a testy przez sied komórkową to różnice rzędu 12 sekund – o tyle więcej czasu trwa
komunikacja z serwerem.

Ponadto poprawnośd wykrywania jest umiarkowana, lecz dobrze rokująca na przyszłośd.




                                            Pracownia projektowa | Aplikacja w działaniu   28

				
DOCUMENT INFO
Shared By:
Categories:
Tags:
Stats:
views:22
posted:8/30/2011
language:Polish
pages:28