Bezwstydnie skacząc za modą :-)
Zainspirowany Jak znaleźć Wally'ego w Mathematica i kontynuacją Jak znaleźć Wally'ego z R , jako nowy użytkownik Pythona chciałbym zobaczyć, jak można to zrobić. Wygląda na to, że Python byłby do tego lepiej przystosowany niż R i nie musimy martwić się o licencje, tak jak w przypadku Mathematica czy Matlab.
W przykładzie takim jak ten poniżej oczywiście zwykłe użycie pasków nie zadziała. Byłoby interesujące, gdyby proste podejście oparte na regułach można było zastosować do trudnych przykładów, takich jak ten.
Dodałem tag [machine-learning], ponieważ uważam, że poprawna odpowiedź będzie musiała korzystać z technik ML, takich jak podejście Restricted Boltzmann Machine (RBM) zalecane przez Gregory'ego Kloppera w oryginalnym wątku. W Pythonie jest dostępny kod RBM, który może być dobrym miejscem do rozpoczęcia, ale oczywiście do tego podejścia potrzebne są dane treningowe.
Podczas Międzynarodowych Warsztatów IEEE 2009 na temat UCZENIA MASZYNOWEGO DO PRZETWARZANIA SYGNAŁÓW (MLSP 2009) przeprowadzili konkurs analizy danych: gdzie jest Wally? . Dane szkoleniowe są dostarczane w formacie Matlab. Zwróć uwagę, że linki w tej witrynie są martwe, ale dane (wraz ze źródłem podejścia zastosowanego przez Seana McLoone i współpracowników można znaleźć tutaj (patrz link do SCM). Wydaje się, że jest to jedno miejsce do rozpoczęcia.
Odpowiedzi:
Oto implementacja z mahotami
from pylab import imshow import numpy as np import mahotas wally = mahotas.imread('DepartmentStore.jpg') wfloat = wally.astype(float) r,g,b = wfloat.transpose((2,0,1))
Podziel na kanały czerwony, zielony i niebieski. Lepiej jest użyć arytmetyki zmiennoprzecinkowej poniżej, więc konwertujemy na górze.
w = wfloat.mean(2)
w
to kanał biały.pattern = np.ones((24,16), float) for i in xrange(2): pattern[i::4] = -1
Stwórz wzór + 1, + 1, -1, -1 na osi pionowej. To jest koszula Wally'ego.
Splot z czerwonym minus biały. To da silną odpowiedź tam, gdzie jest koszula.
mask = (v == v.max()) mask = mahotas.dilate(mask, np.ones((48,24)))
Poszukaj maksymalnej wartości i rozszerz ją, aby była widoczna. Teraz stonujemy cały obraz, z wyjątkiem regionu lub zainteresowania:
wally -= .8*wally * ~mask[:,:,None] imshow(wally)
I dostajemy !
źródło
Możesz spróbować dopasować szablony, a następnie usunąć, które dało największe podobieństwo, a następnie użyć uczenia maszynowego, aby je zawęzić. Jest to również bardzo trudne, a przy dokładności dopasowania szablonu może po prostu zwrócić każdą twarz lub obraz podobny do twarzy. Myślę, że jeśli chcesz robić to konsekwentnie, będziesz potrzebować czegoś więcej niż tylko uczenia maszynowego.
źródło
może powinieneś zacząć od rozbicia problemu na dwa mniejsze:
to wciąż są dwa bardzo duże problemy do rozwiązania ...
Przy okazji, wybrałbym c ++ i otwarte CV, wydaje się, że jest do tego bardziej odpowiedni.
źródło
Nie jest to niemożliwe, ale bardzo trudne, ponieważ tak naprawdę nie masz przykładu udanego meczu. Często występuje wiele stanów (w tym przypadku więcej przykładów rysunków Find Walleys), możesz następnie wprowadzić wiele obrazów do programu rekonfiguracji obrazu i traktować go jako ukryty model markowa i użyć czegoś takiego jak algorytm Viterbiego do wnioskowania ( http: / /en.wikipedia.org/wiki/Viterbi_algorithm ).
Tak podszedłbym do tego, ale zakładając, że masz wiele obrazów, możesz podać przykłady poprawnej odpowiedzi, aby mógł się nauczyć. Jeśli masz tylko jedno zdjęcie, przepraszam, że może być inne podejście, które musisz zastosować.
źródło
Zrozumiałem, że są dwie główne cechy, które są prawie zawsze widoczne:
Więc zrobiłbym to w następujący sposób:
szukaj koszul w paski:
Jeśli istnieje więcej niż jedna `` koszulka '', to znaczy więcej niż jedna grupa pozytywnej korelacji, poszukaj innych cech, takich jak ciemnobrązowe włosy:
szukaj brązowych włosów
źródło
Oto rozwiązanie wykorzystujące sieci neuronowe, które dobrze działa.
Sieć neuronowa jest uczona na kilku rozwiązanych przykładach, które są zaznaczone obwiedniami wskazującymi, gdzie na obrazku pojawia się Wally. Celem sieci jest zminimalizowanie błędu między przewidywanym pudełkiem a rzeczywistym pudełkiem z danych treningowych / walidacyjnych.
Powyższa sieć wykorzystuje interfejs API Tensorflow Object Detection do przeprowadzania szkoleń i prognozowania.
źródło