2010-07-17 12 views
6

Ho fatto una videochat, ma come al solito, un sacco di uomini come ehm, abusano del servizio (lascio a voi il compito di capire la natura di tale abuso), che non è qualcosa che approvo in alcun modo, né la maggior parte dei miei utenti. No, non ho rubato chatroulette.com :-) Sinceramente, sono imbarazzato a dirlo qui, ma la mia domanda è tecnica e piuttosto specifica:Un buon metodo per rilevare la presenza di una particolare caratteristica in un'immagine

Voglio filtrare/negare gli utenti in base al loro contenuto video quando questo contenuto è di carattere offensivo, come l'utente che lampeggia la sua roba sulla fotocamera. Che tipo di algoritmo di confronto delle immagini sarebbe adatto alle mie esigenze?

Ho trascorso circa una settimana a leggere alcuni articoli scientifici e ho preso conoscenza delle teorie multiple e delle loro implementazioni, come SIFT, SURF e alcuni degli approcci basati su wavelet. Ognuno di questi ha naturalmente svantaggi e vantaggi. Ma dal momento che la natura del mio confronto di immagini è altamente specifica - per negare il servizio se una determinata parte del corpo viene rilevata sul video in una gamma di posizioni - mi chiedo quale dei metodi mi si adatti meglio?

Attualmente, mi chino verso qualcosa lungo il seguente (Wavelet-based, più qualcosa che presumo di essere alcune innovazioni proprietarie): http://grail.cs.washington.edu/projects/query/

Con quanto sopra, posso semplicemente disegnare la parte del corpo incriminato, e si aspettano offendere il contenuto deve essere considerato una corrispondenza basata su una soglia. Poi di nuovo, non sono sicuro che il metodo sia invariabile alle trasformazioni e, se lo è, a che tipo - la carta non è propriamente specifica su questo.

In alternativa, penso che l'implementazione SURF potrebbe fare, ma temo che possa darmi dei falsi positivi. Una tale implementazione può essere addestrata a riconoscere/dare peso a una caratteristica specifica?

Sono consapevole che esistono numerose domande su SURF e SIFT qui, ma la maggior parte di esse sono generiche in quanto di solito spiegano come "confrontare" due immagini. Il mio confronto è specifico, non generico. Ho bisogno di un metodo che non si limiti a confrontare due immagini simili, ma una che può darmi un rango/indice/peso per una caratteristica (tuttavia il metodo mi consente di descriverla, sia essa stessa un'immagine o qualcos'altro) presente in un Immagine.

+2

+1 perché questo è un esercizio teorico interessante, ma in pratica, sospetto che i troll saranno in grado di inventare nuovi comportamenti offensivi più velocemente di quanto tu possa rispondere con la tecnologia per rilevarli e bloccarli. –

+1

Ciao Jim, sì, lo farebbero, ma pochi se qualche utente si aspetta un confronto tra immagini su questo tipo di servizio. Ho utenti che mi chiedono di "sfoderare i loro IP" anche se non ho mai menzionato che utilizzo i divieti IP. "IP ban" è diventato un'espressione pop. Ci sono tutorial su come aggirarli. Questo è il motivo per cui voglio intraprendere un altro percorso. – amn

risposta

4

Sembra che non sia necessario il rilevamento delle funzioni, ma il riconoscimento degli oggetti, ovvero il metodo Viola-Jones. Dai un'occhiata all'esempio faceetect.cpp fornito con OpenCV (esistono anche numerosi haarcascades pronti all'uso: rilevatore di volti, rilevatore di corpo ...). Utilizza anche funzioni di immagine, chiamate Wavel di Haar. Potresti essere interessato a utilizzare le informazioni sul colore, dare un'occhiata all'algoritmo CamShift (disponibile anche in OpenCV).

+0

Bene, il problema non è che tutti gli utenti mostrino i loro volti. Quindi ho bisogno di qualcosa che non sia stato addestrato/adattato/specifico per il riconoscimento facciale. A questo punto, faceetect.cpp sarà di aiuto? – amn

+2

Questo non riconoscimento facciale, ma framework di rilevamento oggetti. Può essere addestrato a rilevare qualsiasi cosa contenga un insieme di caratteristiche (auto, occhi, corpo ...). Ecco il tutorial http://lab.cntl.kyutech.ac.jp/~kobalab/nishida/opencv/OpenCV_ObjectDetection_HowTo.pdf – Cfr

+0

Sì, mi dispiace, ho scritto "riconoscimento oggetti" nella risposta originale. Viola-Jones è un framework di rilevamento degli oggetti, originariamente utilizzato per rilevare i volti (non riconoscere). Facedetect.cpp mostra come usarlo con cascate nidificate, puoi usarlo con qualsiasi altra cascata, non solo facce. – Cfr

1

Questo è di più sulla visione artificiale. Devi riconoscere gli oggetti nella sequenza immagine/video, qualunque cosa ... per quello, puoi usare molti algoritmi diversi (molti di loro funzionano nel dominio spettrale, ecco perché dovrai usare una trasformazione).

Per essere precisi, avrete anche bisogno di una knowledge base o, almeno, di alcuni descrittori che definiranno l'oggetto.

Provare OpenCV, ha alcuni algoritmi già implementati (e descrittori di base inclusi).

Esistono applicazioni/algoritmi che è possibile "addestrare" (come reti neurali) e sono in grado di identificare gli oggetti in base all'allenamento. Molti di loro (almeno quelli buoni) non sono molto popolari e si possono trovare solo in gruppi di ricerca specializzati in computer vision, riconoscimento di oggetti, intelligenza artificiale, ecc.

Buona fortuna!