Algorytm zliczania pieszych

12

Obecnie rozwijam projekt licznika pieszych (używając OpenCV + QT w systemie Linux). Mój pomysł na to podejście jest następujący:

  1. Przechwytuj klatki
  2. Wykonaj odejmowanie tła
  3. wyraźne dźwięki (erodować, rozszerzać)
  4. find blobs (cvBlobslib) - obiekty pierwszego planu
  5. Dla każdego obiektu blob ustaw ROI i wyszukaj pieszych (LBP z wykrywaniemultiScale) w tych obiektach blob (dla lepszej wydajności)
  6. Dla każdego znalezionego pieszego wykonaj zagnieżdżone wyszukiwanie górnej części ciała (Nie jestem pewien) (lepsza niezawodność)
  7. Jeśli ten sam pieszy zostanie znaleziony na kolejnych klatkach (może 3-4 ramki) - dodaj ten obszar do zmiany biegów i ścieżki - zaznacz jako pieszego
  8. Wyklucz obszary śledzone przesunięciem krzywki z wykrywania kropelek dla następnych klatek
  9. Jeśli pieszy przekroczy linię zwiększania linii

Chcę sprawdzić, czy jestem na dobrej drodze. Czy masz jakieś sugestie, jak ulepszyć moje podejście? Gdyby ktoś pracował nad czymś podobnym, byłbym wdzięczny za wszelkie przydatne wskazówki, zasoby (i krytykę) na ten temat.

Bahadir
źródło
5
Możesz przeformułować swoje pytanie i pominąć części OpenCV. Wyrażaj to bardziej jako pytanie pojęciowe, jakie naprawdę jest (algorytm liczenia i śledzenia pieszych).
Geerten
2
Twoje podejście brzmi rozsądnie, czy szukałeś odpowiedniej literatury akademickiej? To powinno dać ci wyobrażenie o stanie techniki. Odejmowanie tła może być trudne, zarówno efekty środowiskowe, jak i cienie mogą stanowić problem.
geometrikal

Odpowiedzi:

8

Widzę wiele możliwych problemów z tym podejściem. Mówię tutaj z własnego doświadczenia z ulepszania systemu liczenia pieszych z bardzo podobnym podejściem, więc nie chcę zniechęcać. Przeciwnie, chciałbym ostrzec cię przed możliwymi przeszkodami, które możesz pokonać, aby zbudować dokładny i solidny system.

Po pierwsze, odejmowanie tła zakłada, że ​​interesujące obiekty zawsze będą się poruszać, a obiekty, których nie chcesz liczyć, pozostaną całkowicie nieruchome. Z pewnością może tak być w twoim scenariuszu, ale nadal jest to bardzo ograniczające założenie. Odkryłem też, że odejmowanie tła jest bardzo wrażliwe na zmiany oświetlenia (zgadzam się z geometrikal).

Zachowaj ostrożność przy przyjmowaniu założenia, że ​​jedna kropelka = jedna osoba , nawet jeśli uważasz, że twoje środowisko jest dobrze kontrolowane. Zdarzało się zbyt często, że obiekty blob odpowiadające ludziom nie były wykrywane, ponieważ się nie poruszały lub były zbyt małe, więc zostały usunięte przez erozję lub niektóre kryteria progowe (i wierz mi, nie chcesz wchodzić w „ dostosuj progi, aż wszystko zadziała „pułapka. To nie działa;)). Może się również zdarzyć, że jedna kropla odpowiada dwóm osobom idącym razem lub jednej osobie niosącej bagaż. Lub pies. Więc nie rób sprytnych założeń na temat obiektów blob.

Na szczęście, skoro wspominasz, że używasz LBP do wykrywania osób , myślę, że jesteś na dobrej drodze, aby nie popełnić błędów w powyższym akapicie. Nie mogę jednak komentować skuteczności LBP w szczególności. Przeczytałem również, że HOG (histogram gradientów) jest najnowocześniejszą metodą wykrywania ludzi, patrz Histogramy zorientowanych gradientów do wykrywania ludzi .

Mój ostatni problem związany jest z używaniem Camshift . Opiera się na histogramach kolorów, więc sam w sobie działa dobrze podczas śledzenia pojedynczego obiektu, który można łatwo odróżnić po kolorze, pod warunkiem, że okno śledzenia jest wystarczająco duże i nie ma okluzji ani nagłych zmian. Ale gdy tylko będziesz musiał wyśledzić wiele celów, które mogą mieć bardzo podobne opisy kolorów i które będą się zbliżać bardzo blisko siebie, po prostu nie możesz obejść się bez algorytmu, który w jakiś sposób pozwala ci zachować wiele hipotez. Może to być filtr cząstek lub szkielet, taki jak MCMCDA (Markov Chain Monte Carlo Data Association, patrz Markov Chain Monte Carlo Data Association do śledzenia wielu celów). Moje doświadczenie z używaniem Meanshift podczas śledzenia wielu obiektów to wszystko, co nie powinno się zdarzyć ze śledzeniem: utrata śladu, mylące cele, utrwalanie w tle itp. Przeczytaj trochę o problemach ze śledzeniem wielu obiektów i powiązaniem danych, może to być serce liczenia wielu osób w końcu (mówię „może być”, ponieważ twoim celem jest liczenie braku śledzenia, więc nie odrzucam całkowicie możliwości jakiegoś sprytnego podejścia, które liczy się bez śledzenia ...)

Moja ostatnia rada brzmi: istnieje tylko tyle można zrobić z danym podejściu , a ty będziesz potrzebować bardziej wyszukane rzeczy, aby osiągnąć lepszą wydajność (więc nie zgadzam się z user36624 w tym zakresie). Może to oznaczać zmianę fragmentu algorytmu o coś potężniejszego lub całkowitą zmianę architektury. Oczywiście musisz wiedzieć, które fantazyjne rzeczy są dla Ciebie naprawdę przydatne. Istnieją publikacje, które próbują rozwiązać problem w sposób zgodny z zasadami, podczas gdy inne po prostu opracowują algorytm dla danego zestawu danych i oczekują, że wyszkolisz klasyfikatora, który tak naprawdę nie jest odpowiedni do danego problemu, wymagając jednocześnie dostosuj też kilka progów. Liczenie ludzi totrwające badania, więc nie oczekuj, że wszystko przyjdzie łatwo. Staraj się uczyć rzeczy nieco przekraczających twoje możliwości, a następnie rób to raz po raz ...

Przyjmuję do wiadomości, że nie zaproponowałem żadnych rozwiązań, a zamiast tego wskazałem tylko na błędy w twoim podejściu (wszystkie pochodzą z mojego własnego doświadczenia). Aby uzyskać inspirację, zalecamy przeczytanie ostatnich badań, na przykład Stabilne śledzenie wielu celów w wideo nadzoru w czasie rzeczywistym . Powodzenia!

Jong Bor Lee
źródło
9

Myślę, że pytasz o wykonalność algorytmu dla pieszych.

Istnieją dwie ogólne strategie dla tego rodzaju problemów:

  1. (od dołu do góry) Rozważ to jako czysty problem z wykrywaniem, w którym w każdej klatce wykrywasz tylko pieszych. Po ich wykryciu: a) policzenie ich liczby w ramce jest dość łatwe; oraz b) śledzenie dowolnego z nich w kolejnych klatkach jest również łatwe. Dlatego rozwiązujesz wszystko.

  2. (od góry do dołu) Rozważ to jako problem z rozpoznawaniem akcji, w którym wykrywasz, czy ROI w kolejnych klatkach jest pieszym, czy nie, zgodnie z jego działaniami. Po rozwiązaniu tego problemu rozwiązujesz jednocześnie problemy z wykrywaniem i śledzeniem.

Twój algorytm heurystyczny należy do pierwszej kategorii. Nie chcę cię zniechęcać, ale możesz przegapić kluczową kwestię, jak wykryć pieszego. Ponieważ rzeczywiste dane mogą być bardziej skomplikowane niż myślisz. Na przykład, jeśli jest to kamera metra, której klatki mogą być pełne pieszych, a tym samym usunięcie tła lub wykrywanie plam nie pomaga. W takim przypadku może być bardziej uzasadnione zastosowanie algorytmów wykrywania twarzy i rozpoznawania twarzy, aby rozwiązać problem, ponieważ jeśli znajdziesz twarz, znajdziesz pieszego. Z drugiej strony, w zależności od definicji pieszego, być może prawdą jest, że nie wszyscy pojawili się w kadrze, należy traktować go jak pieszego. W takim przypadku uzasadnione może być zastosowanie algorytmów rozpoznawania akcji (druga kategoria), w których można wyraźnie zdefiniować pieszego na podstawie jego lub jej zachowań.

Oto kilka wskazówek opartych na moim doświadczeniu:

  1. Trzymaj się tego, co wiesz i co możesz łatwo odebrać. Nie inwestuj swojego czasu w coś fantazyjnego, ale wymagającego wielu środowisk, których nie masz. Zaufaj mi, wszystkie te algorytmy będą w niektórych przypadkach dobre, aw innych złe. Dlatego pierwszą rzeczą jest sprawienie, aby coś działało, bez względu na to, jak dobre lub złe.

  2. Dowiedz się więcej o swoich danych, a następnie określ swoją metodę. Ogólny opis problemu jest w wielu przypadkach niewystarczający.

  3. Jeśli chcesz zademonstrować swój pomysł, lepiej użyć MATLAB i zbudować prototyp.

pułapka
źródło