Elektroda.pl
Elektroda.pl
X
Elektroda.pl
Proszę, dodaj wyjątek dla www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Strzelnica elektroniczna na bazie kamery internetowej?

08 Maj 2013 17:12 3225 14
  • Poziom 9  
    Witam, na początku przepraszam, jeśli to nie ten dział, problem to:

    Chciałbym zrobić sobie strzelnicę elektroniczną i na początku chciałem ją zrobić na fotorezystorach ale okazało się to zbyt drogie, więc wpadłem na pomysł, Który chyba się nazywa "mapowaniem obrazu". Problem polega na tym, że jest pomysł ale nie wiem jak go zrealizować. Chciałbym podłączyć kamerę internetową do komputera, kamera monitorowałaby jakiś obszar na który padałaby skupiona wiązka światła z "pistoletu" (mam niepotrzebną metrówkę z poziomicą laserową), następnie chciałbym, żeby komputer po odebraniu sygnału od kamery o zmianie obrazu zrobił screenshot'a na którym byłby zaznaczony punkt w którym podła wiązka światła z obrazem tarczy strzeleckiej.
    Nie wiem jak zrobić:
    - mapowanie kawałka ściany, na którym wisiałaby jakaś tarcza
    - dodatkowo jeśli to możliwe chciałbym zrobić jakąś statystykę strzału na podstawie zebranych wyników
    - jak zebrać wyniki bez konieczności nagrywania filmu.
    Reszta pewnie wyjdzie w praniu
    Z góry dzięki za pomoc
  • Poziom 25  
    Nie wiem jak stoisz z programowaniem ale za pomocą biblioteki OpenCV możesz w miarę prosty sposób takie coś wykonać..
  • Specjalista elektronik
    Linux, na poziomie systemu jest V4L2, zobacz:
    http://v4l2spec.bytesex.org/spec/r13317.htm
    http://v4l2spec.bytesex.org/spec/r8936.htm
    - ja do swoich celów używałem akurat tego.

    Ale są pakiety z bibliotekami na wyższym poziomie,
    np. Linux Ubuntu ma pakiet libv4l-dev do języka C,
    libv4l-ruby1.8 do Ruby, libvideo-capture-v4l-perl do
    "łapania" obrazów do programu w Perl-u...

    Jest sporo ustawiania parametrów: wybór kamerki
    (jeśli jest kilka), rozdzielczości obrazu, częstotliwości
    ramek, formatu danych i parędziesiąt innych (jasność,
    kontrast, nasycenie barw, korekcja koloru, itp.).

    Sam sterownik daje obraz w różnych formatach
    (zależnie od tego, co przesyła kamerka), biblioteki
    zawierają procedury do konwersji na coś prostego
    - pewnie do tego celu dobrze mieć piksele RGB.

    Są również pod Linux-em programy do przetwarzania
    obrazu, które potrafią odbierać obraz z kamerki
    i przetwarzać go na zadany format, np. "raw" (same
    dane RGB), wywoływane z linii polecenia, np. ffmpeg.

    Aha, Linux Ubuntu da się zainstalować pod Windows,
    nie trzeba odrębnej partycji - zapisuje obraz dysku
    jako plik i jakieś pliki do startowania - przy bootowaniu
    systemu jest w menu wybór Windows albo Ubuntu.
  • Poziom 9  
    Może ktoś zna jakieś łatwiejsze rozwiązanie, które nie wymaga znajomości Linux'a?
  • Specjalista elektronik
    Myślisz, że programowanie pod Windows jest łatwiejsze?
    W jakim języku chcesz napisać program przetwarzający obraz z kamerki?
  • Poziom 9  
    Ja znam się tylko na językach typu html itp, programowanie jest mi obce :( miałem jakieś podstawy C++, Visual Basic'a i chyba to wszystko, wątpię żeby to było pomocne :( Myślałem, że da się to zrobić na zasadzie:
    -Instaluję program obsługujący kamerkę
    -Piszę program bądź włączam jakąś funkcję która ma robić screen shot'y dla warunku, którym jest zmiana na obrazie.
    -Kolejny program bądź jakaś funkcja przechwytuje obraz i narzuca go na wcześniej przygotowany obraz z widokiem tarczki "strzeleckiej"
    -Tu pojawia się chyba tylko i wyłącznie napisany program, który na podstawie wcześniej mapowanego obrazu wychwytuje położenie punktu i wartość dla danego położenia tego punktu.
    -Kolejny program oblicza średnią wyników (to najprostsze bo to w C się bankowo da zrobić).

    Pisząc "kolejny program" mam na myśli kolejną funkcję danej aplikacji bo chodzi o to, żeby całość działa bez konieczności uruchamiania niewiadomo czego, i na koniec, żeby wyrzuciła wynik.

    Mam nadzieję, że to jest wykonalne :?
  • Specjalista elektronik
    Jeśli kamerka nie ma funkcji "zrób zdjęcie", to może przesyłać tylko ciąg obrazów jako film.
    Trzeba w C napisać program porównujący kolejne obrazy i wyłapujący oświetlenie laserem.
  • Poziom 9  
    Jak to powinno działać krok po kroku to ja raczej wiem, problem polega na samej realizacji bo tego nie potrafię rozgryźć :(
  • Specjalista elektronik
    Poszukaj źródeł jakiegoś programu odczytującego obraz z kamerki, np. XawTV i zobacz, jak to zrobiono.
    Zajrzyj jeszcze do tematu na forum: Przechwytywanie obrazu z kamery przemysłowej / internetowej.
    Oraz na stronę: http://kju.wemif.net/webcam - to jest opis jakiegoś programu pod Windows.
    Nie wiem tylko, jakie oprogramowanie (kompilator, biblioteki) pod Windows są darmowe - być może
    trzeba za nie sporo zapłacić; pod Linux-em na pewno da się zrobić używając darmowych programów.

    Jeszcze parę linków dotyczących XawTV: Wikipedia, strona oficjalna, opis, pobieranie.
  • Poziom 9  
    Temat stoi i chyba nie jestem w stanie tego ogarnąć :(
  • Specjalista elektronik
    Jeśli nie określisz, czym dysponujesz (np. masz kompilator, biblioteki), to temat pewnie nie ruszy...

    O ile pamiętam, oprogramowanie pod Windows na ogół było płatne, ale może jest i coś za darmo - chyba np. GNU C jest również dla Windows, nie sprawdzałem, bo to jest tyle roboty z szukaniem, że mi się nie chciało - pod Linux-em mam wszystko, czego potrzebuję, w ramach dystrybucji systemu, i jest to za darmo.
  • Poziom 9  
    Bloodshed Dev-C++ ja używałem tego programu i on jest darmowy, jeśli da radę to wykorzystać to będę wdzięczny za kolejny etap pomocy.

    Features are :

    - Support GCC-based compilers
    - Integrated debugging (using GDB)
    - Project Manager
    - Customizable syntax highlighting editor
    - Class Browser
    - Code Completion
    - Function listing
    - Profiling support
    - Quickly create Windows, console, static libraries and DLLs
    - Support of templates for creating your own project types
    - Makefile creation
    - Edit and compile Resource files
    - Tool Manager
    - Print support
    - Find and replace facilities
    - CVS support

    Source code : Delphi 6 Source code of Dev-C++ is available for free under the GNU General Public License (GPL)
  • Specjalista elektronik
    A co to jest Bloodshed Dev-C++? Może podałbyś jakiś link do dokładniejszej informacji? Potrzebny jest przede wszystkim kompilator (i tu jest choćby GCC - darmowy), oraz biblioteka do łączności z kamerą internetową. Pożądana byłaby również biblioteka pozwalająca nanieść coś na obraz i pokazać go na ekranie - będzie pożyteczna choćby przy uruchamianiu programu (można do tego użyć np. Tcl - do Windows jest ActiveStateTcl - ale jeszcze nie próbowałem tworzyć DLL-i przy użyciu GCC, a do łączenia Tcl z C++ pod Windows jest to potrzebne).
  • Poziom 9  
    Temat umarł :( może ktoś zna się na Visual Basic i potrafi to napisać i wytłumaczyć mniej więcej dlaczego tak a nie inaczej?
  • Specjalista elektronik
    Ja teraz już umiem robić DLL-e i łączyć je z Tcl, ale nie wiem, jakie pod Windows są biblioteki do kamer internetowych i podejrzewam, że każdy producent tych kamer może mieć własne i to niejedne - może i do każdego modelu kamery inną. Pewnie trzeba zapytać producenta o SDK do tej kamery. Albo poszukać w sieci programów, które są dostępne w postaci źródłowej, a potrafią współpracować ze wszystkimi kamerami, o ile takie się znajdą (prawie ze wszyskimi kamerami działa Skype, ale źródeł do niego nie dostaniesz). Niestety chcąc coś zrobić pod Windows pakujesz się w tego typu problemy. Możesz jeszcze poszukać w MSDN, albo MSDN Blogs, może ktoś tam opisał, jak to się robi.