Wykrywanie danej twarzy w bazie danych zdjęć twarzy

110

Pracuję nad małym projektem z udziałem twarzy użytkowników Twittera za pośrednictwem ich zdjęć profilowych.

Problem, z którym się spotkałem, to fakt, że po odfiltrowaniu wszystkich zdjęć oprócz tych, które są wyraźnymi zdjęciami portretowymi, niewielki, ale znaczny odsetek użytkowników Twittera używa zdjęcia Justina Biebera jako swojego profilu.

Aby je odfiltrować, w jaki sposób mogę programowo stwierdzić, czy zdjęcie pochodzi od Justina Biebera?

.ıu
źródło
17
Jaka jest twoja platforma programistyczna? Można to łatwo zrobić w .NET, ponieważ jest lepszy od wszystkich innych środowisk programistycznych. Wystarczy wywołać funkcję Page.EradicateBieber (). Microsoft przewidział tę potrzebę i uprzejmie zapewnił ją nam natychmiast po wyjęciu z pudełka w .NET 4.5. (Ci z was w starszych wersjach będą musieli poczekać.) (To oczywiście cały język w policzek.)
32
Myślę, że mogę spokojnie stwierdzić, że SO nie potrzebuje [justin-bieber]tagu.
skaffman
2
Mogę spokojnie stwierdzić, że ludzie wydają więcej głosów na komentarze i to pytanie niż opcja zamknięta (ta, która zasługuje na głosy).
20
Filtr audio Justina Biebera też byłby dobry

Odpowiedzi:

49

Lepszym pomysłem może być usunięcie wszystkich obrazów, które pojawiają się w kanale więcej niż jednego użytkownika - rozpoznawanie nie jest konieczne.

PPPPPP
źródło
2
Tak, może ustawić próg 2-4 możliwych duplikatów (aby obsłużyć skrzynkę dla nowego dziecka) przed odrzuceniem zdjęcia. To zależy od tego, co zrobisz ze zdjęciami.
Mark Bessey
3
Proste, eleganckie rozwiązanie. +1.
Robert Harvey,
13
Ludzie mogliby użyć różnych zdjęć tej samej osoby.
Rebecca Chernoff
(+1) w Rebecca i (-1) @ PPPPPP: To po prostu przesuwa problem.
steffen
4
Mogliby, ale w większości przypadków wybiorą spośród stosunkowo niewielkiej puli zdjęć, więc prawdopodobnie nadal będzie działać. Cholerne skrzynki - do cholery wiesz, że moje zdjęcie jest wujkiem.
naught101
16

Mam wrażenie, że rozwiązaniem może być http://www.tineye.com/commercial_api . Wystarczy rzucić zdjęcie profilowe Twittera na Tineye, aby zobaczyć, czy zwraca obrazy (i powiązane adresy URL), które można jednoznacznie zidentyfikować (lub automatycznie ocenić przy użyciu prostej logiki liczenia słów) jako powiązane z (lub z) niewielkim workiem * *.

Simples!

Benjamin Howarth
źródło
1
Firma Google niedawno ogłosiła wyszukiwanie obrazów: youtube.com/watch?v=t99BfDnBZcI Nie wiem, czy ma jeszcze interfejs API, ale może to być alternatywa.
petrichor
11

Ponieważ możesz filtrować tylko do tych, które są wyraźnymi zdjęciami portretowymi, zakładam, że masz jakąś metodę generowania funkcji, aby przekształcić surowe obrazy w funkcje przydatne do celów uczenia maszynowego. Jeśli to prawda, możesz spróbować wyćwiczyć algorytm klasyfikacji (jest ich wiele: sieci neuronowe itp.), Dostarczając algorytmowi kilka znanych zdjęć Biebera, a także grupę znanych nie-Bieberów. Po wytrenowaniu modelu można go przewidzieć, czy nowy obraz jest Bieber, czy nie.

Ten rodzaj nadzorowanej techniki uczenia się wymaga posiadania danych, w których znasz poprawną odpowiedź (Bieber lub nie), ale prawdopodobnie można je znaleźć w wyszukiwaniu obrazów Google. Wymaga to również posiadania odpowiednich funkcji, a ja nie wiem wystarczająco dużo o przetwarzaniu obrazu lub algorytmie, aby wiedzieć, czy jest to poważna wada.

Michael McGowan
źródło
2
Niestety etap generowania funkcji jest zarówno najtrudniejszy, jak i najważniejszy :(.
steffen
@steffen Istnieją pewne sugestie, że OP zadziera z twarzami, więc skorzystaj z generatora deskryptorów.
@mpq: Nie wątpiłem jednak, że jeśli OP nie ma jednej cechy na piksel, musi znaleźć znaczący poziom agregacji. Nie głosowałem, chciałem tylko wskazać na złożoność kryjącą się za tą odpowiedzią (co oczywiście jest poprawne).
steffen
1
Racja, etap generowania funkcji jest trudny. Zakładałem, że OP może to zrobić, ponieważ ma on już pewien mechanizm przetwarzania obrazów. Nawet jeśli to zrobi, mogą to być tylko przydatne funkcje do wykrywania twarzy / nie twarzy zamiast Biebera / nie Biebera ... to naprawdę zależy od cech.
Michael McGowan
7

Możesz użyć metody takiej jak eigenfaces, http://en.wikipedia.org/wiki/Eigenface . Poniżej znajduje się krótki opis procedury oraz linki do różnych implementacji.

http://www.pages.drexel.edu/~sis26/Eigenface%20Tutorial.htm

Odtąd często stosuje się to w podejściu do klasyfikacji, trenuje model, a następnie przewiduje przypadki. Możesz to zrobić, trenując na gronie znanych celebrytów. Jeśli przewidujesz twarz z twittera jako osobę w wyszkolonym modelu celebrytów, usuń ją. Podobne do tego http://blog.cordiner.net/2010/12/02/eigenfaces-face-recognition-matlab/

To cierpi z powodu ciągłych poprawek. Wkrótce pojawi się nowy Justin Bieber, który nie będzie w twoim wyszkolonym modelu, więc nie możesz go przewidzieć. Jest też przypadek taki jak Whitney Houston, być może nigdy nie pomyślałeś o dodaniu jej wcześniej, ale przez kilka tygodni może być zwykłym obrazem z szacunku i podziwu. Jednak nie będziesz mieć wad zdjęć dziecięcych, jak wspomniano powyżej. Aby przezwyciężyć te problemy, można zastosować bardziej hierarchiczne podejście klastrowe. Usuwając kilka pierwszych zestawów klastrów, które są bardzo blisko siebie, jeśli osiągną pewien poziom wsparcia, twój pierwszy klaster ma 15 przedmiotów przed zbudowaniem drugiego. Teraz nie musisz się martwić, czyje to w modelu treningowym, ale wpadniesz w problem ze zdjęciami niemowląt.

darrelkj
źródło
3

Musisz włączyć algorytm wykrywający, do której osoby odnosi się to zdjęcie. Możesz zbudować model na podstawie różnych zdjęć portretowych słynnej osobowości i użyć klasyfikatorów, aby upewnić się, że to zdjęcie odnosi się do jednego z twoich zdjęć z bazy danych. Musisz użyć określonego klasyfikatora opartego na różnych parametrach podobnych do twarzy, takich jak odległość między oczami lub inne parametry, aby zwiększyć dokładność swojego modelu. Istnieje również analiza skóry. Najważniejsze jest zbudowanie dobrego klasyfikatora. Ta metoda może być podatna na ataki.

Ale jest też bardzo dobry projekt pracujący nad rozpoznawaniem twarzy http://opencv-code.com/Opencv_Face_Detection

404Dreamer_ML
źródło
1
AFAIK OpenCV i strona z linkami wdrażają tylko wykrywanie twarzy (czy na zdjęciu jest twarz ludzka?), Co jest tylko pierwszym krokiem w kierunku rozpoznawania twarzy (czyja to twarz?)
f3lix,
2

Możesz spróbować mieszania wrażliwego na lokalizację .

Xodarap
źródło
1
Zwykły KNN nie jest bardzo dobry dla twarzy. Pokazano, że twarze leżą na ~ 25 wymiarowym nieliniowym rozmaitości obrazów.
bayerj