Adrian Leks, PR & Marketing Manager
Ścisła współpraca odbywała się w ramach całego zespołu. Celem była optymalizacja każdego kroku w procesie wdrażania kolejnych placówek w USA. Jednak największy postęp udało się osiągnąć po stronie technologii i narzędzi, które umożliwiają zespołowi efektywny onboarding wielu lokalizacji. Składają się na to nowe parametry w algorytmie MovStata, algorytm machine learning oraz – last but not least – narzędzie setup do konfiguracji i testowania. MovStat to dziś nie tylko aplikacja analizująca obraz, ale cały ekosystem, co przedstawia poniższy schemat:
Początkowo Setup Movstat miał być po prostu narzędziem, które usprawni proces konfiguracji kamer. Pierwotnie korzystaliśmy z natywnej aplikacji, instalowanej na komputerze klienta. Konfiguracja czy zmiana czegokolwiek wiązała się z koniecznością łączenia zdalnego przez TeamViewer – suma summarum skonfigurowanie jednej statystyki trwało nawet godzinę. Z czasem do konfiguratora zaczęły dochodzić kolejne funkcje, takie jak zdalne publikowanie konfiguracji, wersjonowanie, szybkie przełączanie pomiędzy kilkoma instancjami, kopiowanie konfiguracji do innych itd.
W trakcie tworzenia nowego konfiguratora przyszedł moment refleksji nad tym, jak trudne jest przeanalizowanie, czy wybrana konfiguracja dla danego elementu (np. bramki liczącej) jest właściwa. Do tej pory w ramach testów przetwarzaliśmy nagranie z kamery z ustalonymi parametrami i położeniem bramki. Weryfikacja skuteczności polegała na ręcznym porównywaniu przetworzonego przez MovStat nagrania z plikiem z excela, w którym MovStat logował uchwycone przez siebie dane. W zależności od poziomu skomplikowania konfiguracji i tłumów na filmie, sprawdzenie jednego zestawu parametrów trwało nawet 2-3 godziny.
Pomysł wdrożenia dużo szybszego i automatycznego znajdowania najbardziej skutecznego zestawu parametrów przerodził się w kolejne moduły w narzędziu setup. Player – umożliwiający “wyklikiwanie” realnych zdarzeń na nagraniu, z którymi porównywane są kolejne przetworzenia MovStata z różnymi parametrami – oraz Tests, dzięki któremu dla “wyklikanych” filmów z danej kamery, po ustawieniu zakresu parametrów, MovStat automatycznie poszukuje tego o najlepszej skuteczności. To spowodowało, że kilka tysięcy zestawów parametrów przetwarzamy w czasie 2-3 dni. Oczywiście, żeby takie przetwarzanie było w ogóle możliwe, zaprzęgliśmy do działania całą “farmę” komputerów, które przez całą dobę – dzięki dedykowanej aplikacji TestRunner – przetwarza dziesiątki tysięcy nagrań, ogrzewając przy okazji warsztat R&D.
Następnie poszło już z górki. Wykorzystując kompetencje Software Engineera i pomysły całego zespołu, powstały zaawansowane algorytmy optymalizacyjne, ustalające coraz skuteczniejsze zestawy parametrów do przetworzenia – Smart testy. To system usprawniający szukanie najlepszych konfiguracji. Wcześniej używaliśmy grid-search, czyli sprawdzaliśmy wszystkie kombinacje parametrów w jakimś wybranym zakresie. Łatwo się domyślić, że liczba kombinacji, którą chcielibyśmy przetestować, jest o wiele większa od tej, którą jesteśmy w stanie przetestować.
Smart testy mądrzej wybierają zestawy konfiguracji do sprawdzenia, dzięki czemu liczba wykonanych testów jest znacznie mniejsza (na ogół dziesiątki razy mniejsza). Używają do tego mocno zmodyfikowanej wersji algorytmu Markov Chain Monte Carlo. Chociaż jest to stosunkowo niewielki program napisany w Pythonie, to żeby całość mogła działać, koniecznych było sporo zmian zarówno po stronie serwera, jak i na froncie. To wymagało współpracy wielu osób. Finalnie smart test znajduje nam najlepszą konfigurację w zaledwie ok. 500 testów na film. – Główną osią mojej pracy jest rozwój machine learning w produkcie. Pod koniec 2019 roku ML został wdrożony do MovStata i od tamtej pory jest ciągle ulepszany. Na razie używamy sieci neuronowej do detekcji osób, ale ML ma jeszcze wiele innych możliwości dalszego rozwoju – podkreśla Maciej Kozarzewski, Software Engineer.
Wypracowany został także nowy algorytm subtrakcji tła (GSOC), który może obniżyć różnicę pomiędzy danymi rzeczywistymi, a uzyskanymi przez system o kolejne 10 punktów procentowych. Kształt możliwej do skonfigurowania kolejki przeszedł ewolucję z pojedynczego czworoboku do wielokąta. Wdrożone zostały tzw. subkonfiguracje pozwalające na przetwarzanie różnych fragmentów obrazu z różnymi parametrami oraz skalówka, dzięki której możemy dopasowywać dynamicznie wielkość obiektów (ludzi) w zależności od tego, jak daleko na obrazie się znajduje. Możliwe jest uruchamianie testów z wykorzystaniem machine learning. – Pracowałem nad prawie każdym elementem systemu i z tej perspektywy chciałbym zwrócić uwagę na to, jak duży jest to już system. Dla mnie najważniejszy jest oczywiście silnik w C++, nad którym pracowałem praktycznie od początku i chociaż podstawowe funkcjonalności – klasyczna analiza przy użyciu OpenCV – nie zmieniły się zbytnio w ostatnim czasie, dodaliśmy detekcję obiektów na obrazie przy użyciu głębokich sieci neuronowych. Jest to rozwiązanie, w którym widać duży potencjał – stwierdza Sławomir Winiarski, Senior Software Engineer.
Mamy pomysły na kolejne usprawnienia działania silnika MovStat, zbierającego dane przy użyciu nowoczesnych i rozpowszechniających się technologii. Takich jak radary wykrywające nieduże obiekty (w tym ludzi) czy kamery stereoskopowe (3D). Do tego na bieżąco dodawane są poboczne funkcjonalności pozwalające na bardziej stabilną i szybszą pracę w środowisku produkcyjnym. To m.in. zdalne publikacje, kontrola wersji, zdalne aktualizacje, automatyczne tworzenie w systemie lokalizacji klienckich, rozproszony instalator czy optymalizacja zużycia zasobów.
W MovStat mamy komponenty używające wielu technologii z różnych dziedzin. Na froncie jest mocno interaktywny React.js, w backendzie PHP z Laravel oraz mySQL i MongoDB, a także dodatkowe elementy w node.js. Do tego poza typowym stackiem webowym są programy w C++, Pythonie i node.js. Kluczowe jest zatem zorganizowanie i utrzymanie tych technologii tak, żeby działały automatycznie oraz stabilnie.
Bardzo ważna jest także komunikacja między teamem tworzącym MovStata, a wdrażającymi go testerami. Składa się na nią m.in. bieżące dokumentowanie pracy, tworzenie instrukcji i specyfikacji, godziny spotkań oraz wzajemnych szkoleń. Efektem są wypracowane procedury wdrożeniowe, dedykowana karta projektu, codziennie aktualizowany Redmine, obszernie komentowane zlecenia, checklisty techniczne i projektowe oraz notyfikacje mailowe. – Dla mnie MovStat to ogromny projekt, prowadzony na bardzo szeroką skalę. Kluczem jest odpowiednie zarządzanie zespołem złożonym z programistów, inżynierów, software analyst oraz testerów. Najważniejsza jest ich odpowiednia współpraca. W końcu stara prawda mówi – efekt zorganizowanej pracy zespołowej jest wyższy niż suma efektów działań indywidualnych – zaznacza Agnieszka Berkowska, Project Manager.
Podsumowując, nie byłoby tego wszystkiego bez zespołu liczącego kilkunastu pracowników Netizens. To w nim tkwi siła na wdrażanie kolejnych lokalizacji MovStata.
BLOG
KONTAKT
BIURO
LOKALIZACJA