Rilevamento di un determinato viso in un database di immagini facciali


110

Sto lavorando a un piccolo progetto che coinvolge i volti degli utenti di Twitter tramite le loro foto del profilo.

Un problema che ho riscontrato è che dopo aver filtrato tutte le immagini tranne quelle che sono chiare foto di ritratti, una piccola ma significativa percentuale di utenti di Twitter utilizza un'immagine di Justin Bieber come immagine del profilo.

Per filtrarli, come posso dire a livello di codice se un'immagine è quella di Justin Bieber?


17
Qual è la tua piattaforma di sviluppo? Questo può essere fatto facilmente in .NET perché è superiore a tutti gli altri ambienti di programmazione. Basta chiamare la funzione Page.EradicateBieber (). Microsoft ha previsto questa necessità e l'ha gentilmente fornita per noi immediatamente in .NET 4.5. (Quelli di voi nelle versioni precedenti dovranno aspettare.) (Ovviamente, tutto in bocca al lupo.)

32
Penso di poter affermare con sicurezza che SO non ha bisogno di un [justin-bieber]tag.
Skaffman,

2
Posso tranquillamente affermare che le persone spendono più voti sui commenti e su questa domanda rispetto all'opzione stretta (quella che merita i voti).

20
Anche un filtro audio di Justin Bieber sarebbe buono

Risposte:


49

Un'idea migliore potrebbe essere quella di eliminare tutte le immagini che compaiono nel feed di più di un utente: non è necessario alcun riconoscimento.


2
Sì, forse imposta una soglia di 2-4 possibili duplicazioni (per gestire il caso del neonato) prima di rifiutare una foto. Dipende da cosa hai intenzione di fare con le foto, immagino.
Mark Bessey,

3
Soluzione semplice ed elegante. +1.
Robert Harvey,

13
Le persone potrebbero usare immagini diverse della stessa persona.
Rebecca Chernoff,

(+1) a Rebecca e (-1) @ PPPPPP: questo sposta il problema.
Steffen,

4
Potrebbero, ma nella maggior parte dei casi sceglieranno da un pool di immagini relativamente piccolo, quindi probabilmente funzionerebbe ancora. Maledetti casi limite - per quanto ne sai la mia foto è di mio zio comunque.
naught101

16

Ho la sensazione che http://www.tineye.com/commercial_api potrebbe essere la soluzione qui. Basta lanciare l'immagine del profilo Twitter su Tineye, vedere se restituisce immagini (e URL associati) che possono essere chiaramente identificati (o automaticamente valutati utilizzando la semplice logica del conteggio delle parole) come correlati (o di) a quel piccolo sacco di * *.

Semplici!


1
Google ha recentemente annunciato la ricerca di immagini: youtube.com/watch?v=t99BfDnBZcI Non so se abbia ancora un'API, ma potrebbe essere un'alternativa.
petrichor,

11

Dato che sei in grado di filtrare solo quelle che sono chiare foto di ritratti, suppongo che tu abbia un metodo di generazione di funzioni per trasformare le immagini grezze in funzioni utili ai fini dell'apprendimento automatico. Se questo è vero, potresti provare ad addestrare un algoritmo di classificazione (ce ne sono molti: reti neurali, ecc.) Alimentando l'algoritmo un gruppo di foto Bieber conosciute e un gruppo di non Biebers noti. Una volta addestrato il modello, potrebbe essere utilizzato per prevedere se una nuova immagine è Bieber o meno.

Questo tipo di tecnica di apprendimento supervisionato richiede che tu disponga di dati in cui conosci la risposta corretta (Bieber o no), ma probabilmente questi potrebbero essere trovati da una ricerca di immagini di Google. Richiede anche che tu abbia il giusto tipo di funzionalità e non conosco abbastanza sull'elaborazione delle immagini o sul tuo algoritmo per sapere se questo è un grave svantaggio.


2
Sfortunatamente, il passaggio di generazione delle funzionalità è sia il più difficile che il più importante :(.
steffen,

@steffen C'è qualche suggerimento che l'OP stia scherzando con le facce, quindi è necessario un generatore di descrittori.

@mpq: non avevo dubbi sul fatto che, se l'OP non avesse una caratteristica per pixel, doveva trovare un livello di aggregazione significativo. Non ho votato a fondo, volevo solo sottolineare la complessità che sta dietro questa risposta (che, ovviamente, è corretta).
Steffen,

1
Bene, il passaggio di generazione delle funzionalità è la parte difficile. Supponevo che OP potesse farlo poiché ha già un meccanismo per elaborare le immagini. Anche se lo fa, anche se potrebbero essere utili solo per rilevare il volto / non il volto invece di Bieber / non Bieber ... dipende davvero dalle caratteristiche.
Michael McGowan,

7

È possibile utilizzare un metodo come eigenfaces, http://en.wikipedia.org/wiki/Eigenface . Di seguito viene fornita una buona panoramica della procedura e collegamenti a diverse implementazioni.

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

Da qui è comune usarlo in un approccio di classificazione, formare un modello e quindi prevedere i casi. Potresti farlo allenandoti su un gruppo di celebrità conosciute e se prevedi un volto da Twitter come uno nel tuo modello di celebrità addestrato, rimuovilo. Simile a questo http://blog.cordiner.net/2010/12/02/eigenfaces-face-recognition-matlab/

Ciò soffre di costanti modifiche. Presto ci sarà un nuovo Justin Bieber che non sarà nel tuo modello addestrato, quindi non puoi prevederlo. C'è anche un caso come Whitney Houston, potresti non aver mai pensato di aggiungerla prima, ma potrebbe essere un'immagine comune per rispetto e ammirazione per alcune settimane. Non avrai il rovescio della medaglia delle immagini dei bambini come menzionato sopra però. Per ovviare a questi problemi potresti usare più di un approccio di clustering gerarchico. Rimuovendo i primi gruppi di cluster molto vicini se raggiungono un certo livello di supporto, il primo cluster ha 15 elementi prima che venga costruito un secondo. Ora non devi preoccuparti di chi nel tuo modello di allenamento, ma cadrai sul problema delle immagini del bambino.




3

Devi mettere su un algoritmo che rilevi a quale persona si riferisce l'immagine. È possibile creare un modello basato su diverse immagini di ritratti di personalità famose e utilizzare classificatori per assicurarsi che questa immagine si riferisca a una delle immagini del database. È necessario utilizzare un determinato classificatore in base a diversi parametri che piacciono al viso, come la distanza tra gli occhi o altri parametri per aumentare la precisione del modello. C'è anche l'analisi della pelle. Il più importante è costruire un buon classificatore. Questo metodo può essere vulnerabile.

Ma c'è anche un ottimo progetto che sta lavorando sul riconoscimento facciale http://opencv-code.com/Opencv_Face_Detection


1
AFAIK OpenCV e il sito collegato implementano solo il rilevamento del volto (nella foto c'è un volto umano?) Che è solo un primo passo verso il riconoscimento del volto (di chi è il volto?)
f3lix

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.