logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Program śledzący punkty

mojzesz101 05 Cze 2011 21:28 7624 14
REKLAMA
  • Program śledzący punkty

    Witam wszystkich.
    Dziś pochwalę się swoim programem, który napisałem na zaliczenie z przedmiotu Grafika i komunikacja człowiek-komputer. Wcale nie twierdzę, że jest to jakiś cud informatyki, ale osobiście jestem zadowolony ze swojej pracy.

    Założenia:
    Stworzyć program, który za pomocą kamery internetowej będzie potrafił wyszukać i śledzić dwa markery. Ponadto program powinien wypisywać podstawowe dane o znalezionych obiektach: kolor (RGB), współrzędne X i Y, kąt pochylenia względem siebie etc.

    Osiągnięcia:
    Projekt udało się doprowadzić do końca, pracowałem nad nim przez około miesiąc przy dużym zaangażowaniu. Zrealizowałem podstawowe założenia, kod obsługi kamery zaczerpnąłem z darmowego źródła ze strony www.codenstuff.com,
    gdzie autor pozwolił korzystać z jego rozwiązań.
    Aplikację napisałem w środowisku Microsoft Visual Basic 2005 Express Edition i sprawdziłem na kilku komputerach z systemem Windows XP. Do działania wymaga zainstalowanego oprogramowania .NET Framework w wersji 2.0 lub nowszej. Aby uruchomić aplikację należy kliknąć w skrót o nazwie „seeker.lnk”.

    Opis okna programu:
    1 – po włączeniu aplikacji w tym polu tekstowym pojawia się informacja o sterowniku(?) kamery
    2 – podczas działania programu wyświetlane są informacje o markerach i otoczeniu
    3 – na początku przed kliknięciem przycisku START można tym suwakiem poprawić wykrywalność markerów, należy dobrać doświadczalnie przy różnych warunkach oświetleniowych, najlepsze wyniki uzyskiwałem przy wartościach od -20 do 10
    4 – przyciski: Start – uruchamia kamerę i zaczyna szukać markerów; Reset – szuka markerów od nowa, Restart – aplikacja uruchamia się ponownie z domyślnymi opcjami.

    Miałem problemy odnośnie kodu obsługi kamery którego nie mogę zrozumieć. Otóż po uruchomieniu kamery obraz ukazuje się w kontrolce PictureBox1(lewy obraz), jednak na tym obrazie nie mogłem wykonywać żadnych operacji (pobranie piksela i sprawdzenie koloru, zaznaczenie obszaru) tak jakby PictureBox1 nic nie zawierał, dlatego nie mogąc sobie poradzić z tym problemem postanowiłem go obejść. Ogólnie mówiąc program robi screenshota okna programu, wycina ramkę PictureBox1 z klatką obrazu z kamery i zapisuje w zmiennej, którą następnie załadowuje do kontrolki PictureBox2(prawy obraz). Takim sposobem w ramce PictureBox2 mam obraz z kamery na którym mogę przeprowadzać potrzebne operacje.

    Mrugające czarne elementy na ekranie, które były przydatne podczas pracy nad aplikacją, postanowiłem pozostawić widoczne, ponieważ można na bieżąco śledzić postępy programu podczas pracy. Niestety nie uporałem się z problemem zróżnicowanego oświetlenia, najlepsze efekty uzyskałem przy sztucznym oświetleniu, gdzie otoczenie ma ciepłe kolory (jak najniższa składowa blue) oraz ogólna jasność pomieszczenia jest umiarkowana. Podczas prób, należy suwakiem (3) ustawić odpowiednią wartość tak, aby przy pierwszym przebiegu szukania znalazło któryś z punktów. Jeśli żaden z markerów nie zostanie wykryty za pierwszym razem, należy nacisnąć przycisk restart i ustawić inną wartość. Proszę również zwrócić uwagę na wielkość kwadratów wokół znalezionych punktów (kwadraty pokazują się, gdy markery znikną z pola widzenia). Im większy kwadrat tym lepiej.

    Aha, najważniejsze - program reaguje na kolor niebieski, najlepiej nakleić sobie dwa kółeczka na kartkę A4 i przeprowadzać próby. Program zaczyna "śledzić", dopiero wtedy, kiedy znajdzie dwa obiekty.

    Mam nadzieję, że aplikacja uruchomi się na każdym komputerze i nie będzie sprawiała problemów.
    Nie mniej jednak nie odpowiadam za jakiekolwiek szkody wywołane ewentualnym wadliwym działaniem programu.
    Załączniki:
    • seeker.zip (38.88 KB) Musisz być zalogowany, aby pobrać ten załącznik.

    Fajne? Ranking DIY
    O autorze
    mojzesz101
    Poziom 12  
    Offline 
    Specjalizuje się w: filozofowanie
    mojzesz101 napisał 76 postów o ocenie 111. Mieszka w mieście Łańcut. Jest z nami od 2007 roku.
  • REKLAMA
  • #2 9581021
    tdx110
    Poziom 18  
    Posty: 393
    Pomógł: 6
    Projekt bardzo fajny.
    Mało znajduje się takich programów (jeśli w ogóle jakieś).
    A + jeszcze za to iż korzystałeś z Visual Basic gdzie osobiście się bawiłem w nim i powiem że do tego najlepiej zdaje się zadawał.
  • #3 9581157
    vankonrado
    Poziom 15  
    Posty: 143
    Pomógł: 11
    Ocena: 7
    Hmm kolega z Łańcuta? To pewnie za projekt na PRz? Fajny projekt - swojego czasu zrobiliśmy z kolegami podobny na zaliczenie, z tym, że śledzący 5 punktów i z możliwością dowolnego definiowania jaki obszar ma śledzić. 5 punktów to były kończyny i głowa ludzika. My użyliśmy OpenCV - polecam przyjrzeć się temu pakietowi zainteresowanym.
    Dziwi mnie użycie Basica zamiast choćby C++.
  • #4 9581827
    KeinXor
    Poziom 24  
    Posty: 511
    Pomógł: 62
    Ocena: 63
    vankonrado napisał:

    Dziwi mnie użycie Basica zamiast choćby C++.


    A czym Cię to tak kolego dziwi ...? Język programowania jak każdy inny i doskonale się to tego nadaje !!! jak by autor wybrał php to mógł byś się dziwić.
  • REKLAMA
  • #5 9581893
    Freddy
    Poziom 43  
    Posty: 19997
    Pomógł: 1394
    Ocena: 2822
    mojzesz101 napisał:

    ... Miałem problemy odnośnie kodu obsługi kamery którego nie mogę zrozumieć. Otóż po uruchomieniu kamery obraz ukazuje się w kontrolce PictureBox1(lewy obraz), jednak na tym obrazie nie mogłem wykonywać żadnych operacji (pobranie piksela i sprawdzenie koloru, zaznaczenie obszaru) tak jakby PictureBox1 nic nie zawierał, dlatego nie mogąc sobie poradzić z tym problemem postanowiłem go obejść. Ogólnie mówiąc program robi screenshota okna programu, wycina ramkę PictureBox1 z klatką obrazu z kamery i zapisuje w zmiennej, którą następnie załadowuje do kontrolki PictureBox2(prawy obraz). Takim sposobem w ramce PictureBox2 mam obraz z kamery na którym mogę przeprowadzać potrzebne operacje.
    ...

    Niestety mojej kamerki (logitech) nie obsługuje i nic nie mogę zobaczyć :)
  • #6 9582144
    szulat
    Poziom 23  
    Posty: 647
    Pomógł: 24
    Ocena: 110
    mojzesz101 napisał:
    nie mogąc sobie poradzić z tym problemem postanowiłem go obejść. Ogólnie mówiąc program robi screenshota okna programu, wycina ramkę PictureBox1 z klatką obrazu z kamery i zapisuje w zmiennej

    masakra...!

    jeżeli ktoś lubi się grzebać sie w interfejsach niskopoziomowych to prawidłowo takie rzeczy robi sie poprzez stworzenie filtra (DirectShow) który umieszczasz w grafie przetwarzania tak żeby pobierał obraz z kamery.

    jeżeli ktoś nie lubi, to lepiej skorzystać z gotowych bibliotek do przetwarzania obrazu, np. http://pl.wikipedia.org/wiki/OpenCV wtedy mógłbyś się skupić na algorytmie będącym tematem zaliczenia a nie na tym jak przechytrzyć visual basic :)
  • REKLAMA
  • #8 9583853
    KSX
    Poziom 19  
    Posty: 427
    Pomógł: 10
    Ocena: 26
    vankonrado napisał:
    Dziwi mnie użycie Basica zamiast choćby C++.

    Bo BASIC jest o wiele łatwiejszy niż C++

    I taka informacja: program na oryginalnym Win 7 x64 odpalił się tylko raz potem ni razu więcej, a w Win 7 x32 kamerki były do góry nogami ;)
  • #9 9585039
    mojzesz101
    Poziom 12  
    Posty: 76
    Ocena: 111
    Owszem, jak dla mnie Basic jest dość łatwym do opanowania językiem, szybko można napisać jakiś działający (czasem nawet przydatny) program, bez większej wiedzy o tym języku. Na przykład ja zacząłem programować w VB jakieś 3 miesiące temu, a już na koncie mam kilka swoich działających aplikacji, lepszych lub gorszych, niestety brodzę na płyciznach, ale z czasem może coś więcej się nauczę...
    Oczywiście nie mam pojęcia co można by zrobić, żeby program działał na nowszych systemach, sprawa sterowników to dla mnie kosmos.

    Jeśli komuś uda się uruchomić program to proszę dać znać :)

    Może na laptopach ze zintegrowanymi kamerami próbujcie uruchomić, możliwe że na zewnętrznej kamerce nie zadziała, chociaż u mnie na PC-cie z kamerą Creative śmigało szybciej niż na laptopie...
  • #10 9592489
    Miglans_87
    Poziom 13  
    Posty: 66
    Pomógł: 4
    Ocena: 48
    Freddy napisał:
    mojzesz101 napisał:

    ... Miałem problemy odnośnie kodu obsługi kamery którego nie mogę zrozumieć. Otóż po uruchomieniu kamery obraz ukazuje się w kontrolce PictureBox1(lewy obraz), jednak na tym obrazie nie mogłem wykonywać żadnych operacji (pobranie piksela i sprawdzenie koloru, zaznaczenie obszaru) tak jakby PictureBox1 nic nie zawierał, dlatego nie mogąc sobie poradzić z tym problemem postanowiłem go obejść. Ogólnie mówiąc program robi screenshota okna programu, wycina ramkę PictureBox1 z klatką obrazu z kamery i zapisuje w zmiennej, którą następnie załadowuje do kontrolki PictureBox2(prawy obraz). Takim sposobem w ramce PictureBox2 mam obraz z kamery na którym mogę przeprowadzać potrzebne operacje.
    ...

    Niestety mojej kamerki (logitech) nie obsługuje i nic nie mogę zobaczyć :)



    Typowy problem. Rozwiązane (trochę toporne):
    1. Włącz Skype, uruchom ustawienia Wideo. Powinien Ci się pokazać obraz z kamerki w oknie Skype.
    2.Włącz program "seeker", kolegi mojzesz101, i kliknij start. Tam gdzie obraz pokaże się zielony obraz.
    3.Wyłącz ustawienia Wideo w Skype, a wówczas obraz przeskoczy do programu seeker.

    Nie pytajcie jak do tego doszedłem :)
  • #11 9593260
    Freddy
    Poziom 43  
    Posty: 19997
    Pomógł: 1394
    Ocena: 2822
    Miglans_87 napisał:
    Freddy napisał:
    mojzesz101 napisał:

    ... Miałem problemy odnośnie kodu obsługi kamery którego nie mogę zrozumieć. Otóż po uruchomieniu kamery obraz ukazuje się w kontrolce PictureBox1(lewy obraz), jednak na tym obrazie nie mogłem wykonywać żadnych operacji (pobranie piksela i sprawdzenie koloru, zaznaczenie obszaru) tak jakby PictureBox1 nic nie zawierał, dlatego nie mogąc sobie poradzić z tym problemem postanowiłem go obejść. Ogólnie mówiąc program robi screenshota okna programu, wycina ramkę PictureBox1 z klatką obrazu z kamery i zapisuje w zmiennej, którą następnie załadowuje do kontrolki PictureBox2(prawy obraz). Takim sposobem w ramce PictureBox2 mam obraz z kamery na którym mogę przeprowadzać potrzebne operacje.
    ...

    Niestety mojej kamerki (logitech) nie obsługuje i nic nie mogę zobaczyć :)



    Typowy problem. Rozwiązane (trochę toporne):
    1. Włącz Skype, uruchom ustawienia Wideo. Powinien Ci się pokazać obraz z kamerki w oknie Skype.
    2.Włącz program "seeker", kolegi mojzesz101, i kliknij start. Tam gdzie obraz pokaże się zielony obraz.
    3.Wyłącz ustawienia Wideo w Skype, a wówczas obraz przeskoczy do programu seeker.

    Nie pytajcie jak do tego doszedłem :)

    Wobec tego wniosek jest jeden. Program autora jet niekompletny !
  • #12 9595266
    mojzesz101
    Poziom 12  
    Posty: 76
    Ocena: 111
    Jak to niekompletny? U mnie wszystko działało od samego początku kiedy skompilowałem kod obsługi kamery. Mam taki pomysł jeszcze, że może macie uruchomione jakieś aplikacje do kamerki które działają w tle (ikonka w trayu(?)) i mój programik się "żre" z tamtym...? Naprawdę nie wiem co można jeszcze zrobić.

    Mam winXP SP3 i .NET Framework 4.0 ale aplikację pisałem w starszym środowisku wykorzystującym wersję 2.0.

    Freddy, pomógł przepis kolegi Miglans_87?
  • REKLAMA
  • #13 9598521
    Miglans_87
    Poziom 13  
    Posty: 66
    Pomógł: 4
    Ocena: 48
    mojzesz101 napisał:
    Jak to niekompletny? U mnie wszystko działało od samego początku kiedy skompilowałem kod obsługi kamery. Mam taki pomysł jeszcze, że może macie uruchomione jakieś aplikacje do kamerki które działają w tle (ikonka w trayu(?)) i mój programik się "żre" z tamtym...? Naprawdę nie wiem co można jeszcze zrobić.

    Mam winXP SP3 i .NET Framework 4.0 ale aplikację pisałem w starszym środowisku wykorzystującym wersję 2.0.

    Freddy, pomógł przepis kolegi Miglans_87?


    Nic się nie stresuj. Ja się dużo bawię VS + kamerka (taka praca inż na PRZ).
    I jedne biblioteki działają lepiej, niektóre gorzej. Ale często miałem problem z brakiem obrazu, do puki nie poczęstuje go Skype:P
    Raczej to nie twoja wina, że kamera komuś nie startuje, lecz użytej biblioteki do Kamerki.

    OpenCV to fajna biblioteka, ale polecam również Aforage.NET -> Link

    Przykład takiego programu:




    Program:
    Załączniki:
    • Glyph Recognition Studio.zip (312.56 KB) Musisz być zalogowany, aby pobrać ten załącznik.
  • #14 9603096
    mojzesz101
    Poziom 12  
    Posty: 76
    Ocena: 111
    Miglans_87 nie działa mi to Glyph Recognition Studio, wywala typowy windowsowski błąd "...aplikacja zostanie zamknięta". Wiesz może co jest nie tak...?
  • #15 9603508
    Miglans_87
    Poziom 13  
    Posty: 66
    Pomógł: 4
    Ocena: 48
    mojzesz101 napisał:
    Miglans_87 nie działa mi to Glyph Recognition Studio, wywala typowy windowsowski błąd "...aplikacja zostanie zamknięta". Wiesz może co jest nie tak...?


    Mój błąd. Już poprawiłem załącznik. Teraz powinno wszystko działać. Musisz jeszcze takie kwadraty wydrukować na kartce. Myślę że w Paincie coś narysujesz:)

    Mam jeszcze uwagę do programu kolegi mojzesz101. Pisałeś, że jak chciałeś pobrać klatkę z PictureBox to nic nie znajdywało. Może to być spowodowane tym, że biblioteka nie wyświetlała to jako Image, lecz jako BackgroundImage.
    Możesz spróbować zamiast
    Image klatka = picturebox.Image;
    to dać:
    Image klatka = picturebox.backgroundImage;
    Pozdro!

Podsumowanie tematu

LABEL_AI_GENERATED
Użytkownik zaprezentował program napisany w Visual Basic 2005, który wykorzystuje kamerę internetową do śledzenia dwóch markerów, zbierając dane takie jak kolor (RGB), współrzędne X i Y oraz kąt nachylenia. W dyskusji podkreślono, że program jest rzadkością, a niektórzy użytkownicy sugerowali użycie OpenCV dla lepszego przetwarzania obrazu. Pojawiły się również problemy z kompatybilnością z różnymi kamerami, w tym Logitech, oraz z systemami operacyjnymi Windows 7. Użytkownicy dzielili się rozwiązaniami, jak uruchomić program, oraz wskazówkami dotyczącymi poprawy jego działania. Wskazano na możliwość rozwoju programu w kierunku interfejsu człowiek-komputer.
Podsumowanie AI na podstawie dyskusji. Może zawierać błędy.
REKLAMA