Riconoscimento gestuale usando solo tecniche semplici


8

Sto seguendo un corso di visione al computer e ho questo esercizio: scrivere un programma che, data un'immagine della mano, sia in grado di riconoscere se la mano è aperta, chiusa, in un pugno o in possesso di una posizione "ok", usando solo il tecniche fornite finora (pixel 4/8 connesso, regione connessa, ricerca di contorni, ricerca di buchi, proprietà blob come centroide, area, perimetro, eccentricità, momenti dell'immagine, trasformazione dell'immagine come inversione / potenza / log / correzione gamma / correzione del contrasto, istogramma calcolo ed equalizzazione).

L'ho fatto con alcune proprietà di base del blob (la mano chiusa ha una bassa eccentricità, "ok" ha un buco, la mano aperta ha una grande differenza tra l'area dell'ellisse inscritta nel blob e la stessa area del blob con una bassa eccentricità) .. Sembra funzionare ma la prima immagine è un po 'problematica.

Penso che ci potrebbe essere qualcosa di più per rendere un algoritmo più robusto. Forse una specie di proprietà momentanea? Alcuni assi BLOB / orientamento / punti estremi potrebbero essere d'aiuto?

Immagini di test PS:

OK2

ok

Aperto

punch


Ti è permesso usare la scheletro ? Vedi l'articolo di Wikipedia pertinente per ulteriori idee.
Emre,

no non è permesso perché è il contenuto di una classe futura!
nkint

È possibile provare ad applicare l'approvazione simbolica aggregata al contorno esterno di ciascun oggetto. Fondamentalmente riducendo una forma complessa in una serie temporale e poi raggruppandoli in qualche modo.
Ivo Flipse,

penso di non dover usare alcun tipo di apprendimento automatico, solo un modo intelligente per combinare i problemi scritti nella domanda ..
nkint

forse qualche caratteristica morfologica?
nkint,

Risposte:


2

Puoi provare a guardare i momenti invarianti di Hu. Possono essere costruiti a partire da momenti di base e sono invarianti di rotazione, scala, riflessione e traduzione.

Calcolarli prima per una serie di contorni di allenamento, quindi applicarli al contorno di prova.

Ci sono implementazioni in Matlab e OpenCV, per quanto mi ricordo.


2

Secondo il libro " Programmazione della visione artificiale con Python", un approccio interessante è quello di utilizzare le funzioni Dense SIFT (alias HoG) sulle immagini e alimentare queste funzionalità a un classificatore.

Non l'ho provato da solo, ma sembra abbastanza valido come approccio. Inoltre, l'inventore della funzione HoG propone l' app Flutter che ha funzionato abbastanza bene nei miei test, e sarebbe molto strano se l'inventore non usasse le proprie funzionalità o un derivato stretto.


2

Uno dei miei amici lo ha fatto per la sua tesi di laurea. In pratica, ha codificato le proprietà di ogni gesto. Ad esempio, nella prima figura, prendi una maschera rettangolare sulle parti della mano. Le parti in cui la pelle incontra il bordo della maschera rettangolare devono essere annotate e contrassegnate. Quindi è possibile confrontare le posizioni relative del bordo più grande e del bordo più piccolo.

Quindi, per indicare verso l'alto, avrai un bordo più piccolo verso l'alto e un bordo più grande al polso.

Per puntare lateralmente, hai un bordo più piccolo su un lato e un bordo più grande nella parte inferiore.

Le indicazioni come minimo possono essere coperte in questo modo.

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.