Mam projekt hobby, który rozważam jako sposób na zwiększenie mojego dotychczasowego ograniczonego doświadczenia w uczeniu maszynowym. Zrobiłem i ukończyłem Coursera MOOC na ten temat. Moje pytanie dotyczy wykonalności projektu.
Zadanie jest następujące:
Sąsiednie koty od czasu do czasu odwiedzają mój ogród, co mi się nie podoba, ponieważ mają tendencję do wypróżniania się na trawniku. Chciałbym mieć system ostrzegania, który ostrzega mnie, gdy jest obecny kot, abym mógł go przegonić za pomocą mojego super namaczacza. Dla uproszczenia powiedz, że dbam tylko o kota o czarno-białej kolorystyce.
Mam skonfigurowane malinowe pi z modułem kamery, który może przechwytywać wideo i / lub zdjęcia części ogrodu.
Przykładowy obraz:
Moim pierwszym pomysłem było wyszkolenie klasyfikatora w zakresie identyfikacji kotów lub obiektów podobnych do kota, ale po uświadomieniu sobie, że nie będę w stanie uzyskać wystarczająco dużej liczby pozytywnych próbek, porzuciłem to na rzecz wykrycia anomalii.
Szacuję, że gdybym robił zdjęcie co sekundę dnia, skończyłbym może pięcioma zdjęciami zawierającymi koty (z około 60 000 ze światłem słonecznym) dziennie.
Czy jest to wykonalne przy użyciu wykrywania anomalii? Jeśli tak, jakie funkcje sugerujesz? Moje dotychczasowe pomysły polegałyby na policzeniu liczby pikseli, które mają określone kolory; wykonaj jakieś wykrywanie plamek / segmentację obrazu (czego nie wiem, a tym samym chciałbym uniknąć) i wykonaj na nich taką samą analizę kolorów.
źródło
Odpowiedzi:
Możesz znacznie uprościć swój problem, stosując metodę wykrywania ruchu / zmiany. Na przykład, możesz porównać każde zdjęcie / ramkę z jednym z wczesnego czasu (np. Minutę wcześniej), a następnie rozważyć tylko te piksele, które zmieniły się od czasu wcześniejszego. Następnie możesz wyodrębnić prostokątny region zmiany i użyć go jako podstawy do klasyfikacji lub wykrycia anomalii.
Takie podejście może znacznie uprościć klasyfikator i zmniejszyć współczynnik fałszywych celów, ponieważ możesz zignorować wszystko, co nie jest mniej więcej wielkości kota (np. Osoby lub ptaka). Następnie użyłbyś wyodrębnionych regionów zmian, które nie zostały odfiltrowane, aby utworzyć zestaw szkoleniowy dla twojego klasyfikatora (lub detektora anomalii).
Przed zamontowaniem głowicy laserowej w systemie wykrywania wtargnięcia kotów upewnij się, że poziom fałszywego celu jest wystarczająco niski.
źródło
To ciekawy, a także dość ambitny projekt :)
Nie jestem pewien, czy wykrycie anomalii (przynajmniej w sensie opisanym w kursie, który podążałeś) byłoby w tym przypadku bardzo odpowiednim algorytmem.
Rozważałbym bardziej realne podejście do tego, co zostało omówione na końcu tego kursu, w którym pokazano przepływ pracy Photo OCR.
Podejście polegałoby na podzieleniu obrazu na mniejsze „bloki” i przejrzeniu ich jeden po drugim za pomocą nadzorowanego algorytmu uczenia się i próbie sklasyfikowania każdego bloku według tego, czy zawiera on kota, czy nie. Jeśli jeden blok zawiera kota, alarm się włączy. Jako bonus dostajesz również pozycję kota, dzięki czemu możesz pomyśleć o włączeniu „automatycznej” reakcji jako przyszłego kroku do swojego projektu.
Korzyścią jest to, że nie będziesz musiał trenować algorytmu przy użyciu zestawu danych specyficznego dla Twojego ogrodu (który, jak wspomniałeś, jest trudny do utworzenia), ale możesz użyć zdjęć kotów zdjętych z sieci (np. Możesz wyszukać „kot na trawie” lub coś w tym rodzaju) i być może łatki zdjęć z (lub innych) ogrodów. Dlatego nie musisz tracić czasu na zbieranie zdjęć z aparatu i unikasz ryzyka posiadania bardzo małej (porównywalnej) próbki pozytywów (tj. Kotów).
Oczywiście, jak łatwo zbudować dokładny wykrywacz kotów, to kolejny temat ...
źródło
Strategia wykrywania ruchu / zmiany jest z pewnością odpowiednia, ale dodałbym dodatkową operację. Wykryłbym te regiony, które prawdopodobnie zostaną zmienione, na przykład drabina wydaje się miejscem, w którym mogą być ludzie (także koty) i trawa, gdzie mogą być psy, koty lub ludzie.
Przechwyciłbym mapę z rozmiarem obiektu i trajektorii, a dzięki temu stworzyłbym klaster w celu wykrycia obiektu (o określonej wielkości w obrazie pod względem pikseli), który porusza się z określoną prędkością i trajektorią.
Możesz to osiągnąć za pomocą R lub sugerowałbym OpenCV w celu wykrycia ruchu i śledzenia różnych obiektów.
źródło
Odejmowanie tła przez OpenCV spowoduje znalezienie obiektów poruszających się po twojej harden. Następnie możesz użyć klasyfikatora lub analizy kształtu, aby rozróżnić koty, ludzi, drzewa itp.
źródło
Czy to ptak? Czy to jest kot? Mamy czarno-biały kot wielkości! sroki tutaj. więc to się nie powiedzie.
Pierwszą rzeczą byłoby wykluczenie wszystkich obszarów, które są zielone, koty rzadko są zielone.
Następnie porównaj resztę z obrazem odniesienia, aby usunąć przedmioty statyczne, takie jak kamienie i schody.
Wykrywanie obiektów o minimalnym rozmiarze powinno być możliwe, ale dla klasyfikacji rozdzielczość jest zbyt niska. Może to być również twój sąsiad testujący swój nowy zdalnie sterowany dron.
Za pomocą dwóch kamer można wykonać mapowanie obiektów w 3D i wyeliminować obiekty latające.
źródło