2011-10-04 26 views
6

Czy istnieje przydatna dokumentacja dotycząca używania funkcji HOGDescriptor w Python OpenCV? Czytałem dokumentację w języku C++, ale wersja Pythona działa inaczej i nie mogę tego rozgryźć po prostu przez majsterkowanie.Python OpenCV i histogram gradientu zorientowanego

W szczególności szukam polecenia OpenCV w Pythonie, które pobiera obraz i lokalizację piksela jako dane wejściowe (i ewentualnie także niektóre parametry dotyczące rozmiaru okna detekcji), a następnie zwraca tablicę Pythona zawierającą HOG wektor cech (np. lista lub tablica NumPy itp., gdzie jth element listy jest elementem jth histogramu z histogramu zorientowanych gradientów).

Moim celem jest, aby karmić tych histogramy do rurociągów scikits.learn SVM (więc mogę uniknąć szkolenia OpenCV SVM), ale aby to zrobić muszę rzeczywista funkcja wektory siebie, a nie rodzaj przetwarzania HOG rurociągów łańcuchowe rzeczy że wydaje się, że OpenCV używa.

Wszystkie inne implementacje kodu HOG w Pythonie też by działały. Potrzebuję czegoś rozsądnie wydajnego, choćby w porównaniu z inną bazą kodu, którą sam piszę.

+0

Uwaga: rozsądny plik wykonywalny C++, który ma łatwe w użyciu argumenty wiersza poleceń, również by działał i mógłbym po prostu zapakować go w moje elementy Pythona. Jeśli znasz jakieś projekty z wydajnym kodem HOG, może to być pomocne. – ely

Odpowiedz

0

Jak o trochę Matlab jako inspiracji, należące do tej article

+0

Dzięki! Prawdopodobnie mogę przetłumaczyć to na Python. Może być jednak trudniejsze przenoszenie go na inne języki. – ely

0

spójrz na http://sourceforge.net/projects/hogtrainingtuto/?_test=beta dla niektórych kodu Pythona HOG i kilka implementacji C, cpp, java. Jeśli chodzi o prawdziwe dokumentacje Pythona i OpenCV, ja też jestem na straconej pozycji. Ale to powinno ci pomóc trochę

+0

Nie widzę żadnego kodu Pythona w pliku archiwum, który pobrałem z tego linku. Jedyną rzeczą związaną z HOG jest plik wykonywalny o nazwie "cvHogFeatureCal", ale nie ma on żadnej dokumentacji, którą mogę znaleźć. Inną rzeczą jest to, że OpenCV na ogół implementuje klasyfikatory jako kaskady, w których użytkownik wprowadza twarde negatywne obrazy, a następnie prawdziwe pozytywy do treningu, a OpenCV automatycznie przechodzi do produkcji klasyfikatorów. Muszę tego uniknąć i po prostu przejąć kontrolę nad wektorami cech HOG, a następnie przeprowadzić trening klasyfikacyjny za pomocą innego oprogramowania (scikits.learn). – ely

0

Wdrożenie „Poselets” here jest implementacja C deskryptorów HOG, które choć pisane z Matlab na uwadze, może być przystosowany do pracy z pythonem za pomocą ctypes i numpy.

Można usunąć wszystkie procedury mex i zadeklarować swoje macierze wejściowe i wyjściowe jako float * w funkcji C.

Musisz upewnić się, że twoje numpy tablice są ciągłe Fortran. Można to osiągnąć przez:

image = image.copy(order='F', dtype = float32)

+0

Używam rzeczy Poselet całkiem regularnie. Na podstawie tego, jak nieudokumentowany i nieodkryty był ich kod Java dla narzędzia adnotacji przeglądarki, jestem skłonny po prostu użyć kodu Matlab w górnym poście. Pomysł Poseleta jest świetny, ale fakt, że (a) jest w Matlab i (b) nie chce pomagać innym naukowcom, zapewniając wsparcie dla ich kodu, sprawia, że ​​jestem mniej skłonny do używania ich. Prawdopodobnie wystarczyłoby tłumaczenie rutyny Matlab z Mauritsa. – ely

+0

Niewystarczająco uczciwie, nie eksperymentowałem z ich implementacją, w dużej mierze z powodu braku dokumentacji! Ale zbudowałem coś podobnego, używając rutyny HOG, jak to już opisałem i działa to dobrze. Jeśli szybkość jest priorytetem, użycie ich procedury C może być lepszym rozwiązaniem niż zagnieżdżone pętle w pythonie. – Martin

5

to trochę późno, ale na przyszłość, scikit-image ma implementację HOG. Jest to pojedyncza funkcja, która może wyodrębnić Histogram Zorientowanych Gradientów dla danego obrazu.

+2

Tak, dostałem zaawansowaną kopię tego, zanim została przyjęta do scikits.image. Odkryłem, że nie jest to wystarczająco dobre lub wystarczająco szybkie. Inną rzeczą jest to, że interfejs jest zbyt trudny w użyciu. Na przykład, kod HoA Dalal i Triggs akceptuje listy punktów kluczowych w obrazie, podczas gdy wersja scikits.image może tylko łatać. Skończyło się na tym, że napisałem swój własny kod. Napisałem zwykły "waniliowy" HoG dla Pythona, a także moją własną wersję piramidalnego HoG. W końcu zaimplementowałem dwie wersje GPU w PyCUDA. Możesz znaleźć kod połączony [tutaj] (http://people.seas.harvard.edu/~ely/faceparts/software.html) – ely