Opis
Vida to przeglądarkowa (lekko odkurzona) wersja algorytmów i kodu używanych w niektórych instalacjach interaktywnych powstających w Centrum Sztuki WRO i w ramach działalności edukacyjnej mniej więcej od 2008 roku (od otwarcia siedziby na ul. Widok 7). Z mechanizmów tych korzystały wczesne prace prezentowane w ramach Interaktywnego Placu Zabaw (“Faktury [Janicki/Mastej/Sobolewska], “Malowanie Światłem” [Janicki/Sobolewska]), “Dies Irae” Serhija Petljuka, “Stay in Touch” Maryny Khrypun i Valerie Karpan, itd.
Czytaj więcej
Vida zwiera dwa mechanizmy wizji komputerowej (CV, Computer Vision): prosty system detekcji ruchu w wyznaczonych strefach oraz algorytm detekcji i śledzenia ruchomych obiektów w polu widzenia kamery. Od pewnego czasu podobne zadania zwykle powierza się systemom opartym o AI, ale — z praktycznego punktu widzenia — zawartość Miniatury może być przydatna dla osób projektujących oprogramowanie mające działać na urządzeniach o ograniczonej wydajności. Vida nada się też do szybkiego prototypowania i działań edukacyjnych. Kod źródłowy Miniatury (szczególnie “serce” Miniatury odpowiedzialne za przetwarzanie obrazu) intencjonalnie nie był redagowany i stanowi ciekawy zabytek “literatury algorytmicznej” — ze wszystkimi nadpisaniami, zmianami stylu, konwencji, itp. Vida jest więc Miniaturą o silnej prowieniencji narzędziowej — można ją sprząc, jako syntetyczny zmysł, z innymi programami lub urządzeniami lub samodzielnie przebudować.
W kontekście rozważań nad związkami estetyki i procesów obliczeniowych bardzo interesujący jest zastosowany w Miniaturze algorytm Hoshena–Kopelmana (więcej: https://en.wikipedia.org/wiki/Hoshen–Kopelman_algorithm) detekcji obiektów w obrazie. Pozwala on przejść od dwuwymiarowej matrycy monochromatycznych “pikseli” do opisu, w którym grupy “pikseli” formujących osobne obiekty opisane są unikalnymi (dla tych obiektów) indeksami. To prosta procedura, ale oferująca informacyjny “skok” od mechanicznej reprodukcji do pierwocin “rozumienia” lub “interpretacji” obrazu. Zrozumienie działania algorytmu może spowodować swoiste odczucie “komputacyjnej transgresji” — doświadczenia “niesamowitości” wynikającej z przejścia pomiędzy dwiema metodami postrzegania rzeczywistości.
Dokumentacja techniczna
Parametry przekazywane przez adres URL
- famo user | environment (lub env); domyślnie user; [facingMode] pozwala wymusić użycie przedniej (user) lub tylnej (environment) kamery na urządzeniach, które są wyposażone w podwójne kamery/aparaty (większość współczesnych urządzeń mobilnych)
- worker 0 lub 1; domyślnie 0; umożliwia zablokowanie wbudowanych w przeglądarkę mechanizmów zatrzymywania pracy programu kiedy okno nie jest widoczne
- mirror 0 lub 1; domyślnie 0; wyłącza/włącza lustrzane odbicie obrazu z kamery (przełącznik „mirror”)
- ws adres; domyślnie wyłączone; włącza i ustala adres (zwykle localhost:9001) dla komunikacji poprzez WebSocket (umożliwia zewnętrzne sterowanie Miniaturą i dostosowanie do własnych potrzeb)
- xws adres; domyślnie wyłączone; włącza i ustala adres (zwykle ws://localhost:9001) ze wskazaniem protokołu dla komunikacji poprzez WebSocket (umożliwia zewnętrzne sterowanie Miniaturą i dostosowanie do własnych potrzeb)
- w pozioma rozdzielczość kamery
- h pionowa rozdzielczość kamery
- prst uruchamia Miniaturę z zestawem parametrów: 0 – detekcja ruchu w 3 aktywnych strefach; 1 – detekcja poruszających się obiektów
Komunikaty przekazywane przez WebSocket
Komunikaty, na które reaguje Miniatura
- removezone id [liczba całkowita większa lub równa 0] usuwa strefę o wskazanym indeksie
- handlezones 0 lub 1; wyłącza lub włącza obsługę aktywnych stref
- handleblobs 0 lub 1; wyłącza lub włącza obsługę detekcji poruszających się obiektów
- imagefilterfeedback 0.0 … 1.0; poziom sprzężenia zwrotnego w systemie detekcji tła
- imagefilterthreshold 0.0 … 1.0; próg zadziałania detektora ruchu
- zonefillthreshold 0.0 … 1.0; znormalizowany stopień wypełnienia strefy wymagany do zadziałania detektora ruchu
- approximateblobpolygons 0 lub 1; wyłącza lub włącza wyliczanie zgrubnego konturu poruszającego się obiektu
- addzone id [liczba całkowita większa lub równa 0] x [0.0 … 1.0] y [0.0 … 1.0] w [0.0 … 1.0] h [0.0 … 1.0]
- minblobarea 0.0 … 1.0; minimalna znormalizowana powierzchnia ruchomego obiektu
- maxblobarea 0.0 … 1.0; maksymalna znormalizowana powierzchnia ruchomego obiektu
- minblobmass 0.0 … 1.0; minimalna znormalizowana wirtualna masa ruchomego obiektu
- maxblobmass 0.0 … 1.0; maksymalna znormalizowana wirtualna masa ruchomego obiektu
- trackblobs 0 lub 1 (domyślnie 1); wyłącza lub włącza obsługę śledzenia ruchomych obiektów i utrzymywania w miarę możliwości identyfikujących je indeksów (id)
- maxblobdist 0.0 … 1.0; maksymalny znormalizowany dystans w obrębie którego ruchome obiekty są traktowane jako kontynuacja wcześniejszych
- approximateblobpolygonspoints > 2; ilość punktów w uproszczonym obrysie ruchomego obiektu
Komunikaty wysyłane przez Miniaturę
- „vida” „blobs” i i – ilość wykrytych ruchomych obiektów
- „vida” „blob” id normMassCenterX normMassCenterY normRectX normRectY normRectW normRectH id – identyfikator; normMassCenterX, normMassCenterY – położenie centrum masy obiektu; normRectX, normRectY, normRectW, normRectH – koordynaty prostokąta, w który wpisany jest obiekt
- „vida” „zone” id status id – identyfikator; status – 0 lub 1 (strefa pusta lub naruszona)
MIDI
Komunikaty, na które reaguje Miniatura
nie dotyczy
Komunikaty wysyłane przez Miniaturę
nie dotyczy
Komunikacja z MaxMSP
Komunikaty, na które reaguje Miniatura
- removezone id [liczba całkowita większa lub równa 0] usuwa strefę o wskazanym indeksie
- handlezones 0 lub 1; wyłącza lub włącza obsługę aktywnych stref
- handleblobs 0 lub 1; wyłącza lub włącza obsługę detekcji poruszających się obiektów
- imagefilterfeedback 0.0 … 1.0; poziom sprzężenia zwrotnego w systemie detekcji tła
- imagefilterthreshold 0.0 … 1.0; próg zadziałania detektora ruchu
- zonefillthreshold 0.0 … 1.0; znormalizowany stopień wypełnienia strefy wymagany do zadziałania detektora ruchu
- approximateblobpolygons 0 lub 1; wyłącza lub włącza wyliczanie zgrubnego konturu poruszającego się obiektu
- addzone id [liczba całkowita większa lub równa 0] x [0.0 … 1.0] y [0.0 … 1.0] w [0.0 … 1.0] h [0.0 … 1.0]
- minblobarea 0.0 … 1.0; minimalna znormalizowana powierzchnia ruchomego obiektu
- maxblobarea 0.0 … 1.0; maksymalna znormalizowana powierzchnia ruchomego obiektu
- minblobmass 0.0 … 1.0; minimalna znormalizowana wirtualna masa ruchomego obiektu
- maxblobmass 0.0 … 1.0; maksymalna znormalizowana wirtualna masa ruchomego obiektu
- trackblobs 0 lub 1 (domyślnie 1); wyłącza lub włącza obsługę śledzenia ruchomych obiektów i utrzymywania w miarę możliwości identyfikujących je indeksów (id)
- maxblobdist 0.0 … 1.0; maksymalny znormalizowany dystans w obrębie którego ruchome obiekty są traktowane jako kontynuacja wcześniejszych
- approximateblobpolygonspoints > 2; ilość punktów w uproszczonym obrysie ruchomego obiektu
Komunikaty wysyłane przez Miniaturę
- „vida” „blobs” i i – ilość wykrytych ruchomych obiektów
- „vida” „blob” id normMassCenterX normMassCenterY normRectX normRectY normRectW normRectH id – identyfikator; normMassCenterX, normMassCenterY – położenie centrum masy obiektu; normRectX, normRectY, normRectW, normRectH – koordynaty prostokąta, w który wpisany jest obiekt
- „vida” „zone” id status id – identyfikator; status – 0 lub 1 (strefa pusta lub naruszona)