Riconoscimento dinamico dei gesti con punti punta delle dita

3

Ho costruito un programma abbastanza robusto in c ++ che tiene traccia di diversi punti su una mano. Misura con precisione le dimensioni del palmo, il centro del palmo e le posizioni del polpastrello tra gli altri tratti della mano. I punti sono tutti stabilizzati con un filtro di Kalman.

Voglio essere in grado di riconoscere determinati gesti dinamici come: un'onda, un colpo a destra / a sinistra, un cerchio disegnato con il palmo aperto. Sto pensando di archiviare i punti 2D in un vettore nel tempo e provare a creare una corrispondenza con questo o applicare vincoli per riconoscere i gesti.

Poiché sto già iniziando a divorare la CPU di un i7 e voglio che questo venga eseguito in tempo reale, è necessaria l'efficienza. Quale approccio dovrei prendere per riconoscere questi gesti dinamici. Devo addestrare i classificatori a riconoscere determinati schemi o devo applicare determinati vincoli geometrici?

    
posta wprins 04.09.2015 - 18:21
fonte

2 risposte

1

Ho esaminato questo tipo di riconoscimento dei gesti per diversi giorni. Posso condividere i riferimenti che ritengo siano i più utili, quindi posso abbozzare la soluzione (incompleta) su cui sto lavorando.

Ho trovato un ampio sondaggio (datato 2014) sulle tecniche di riconoscimento dei gesti esistenti sul sito web ACM . (Non so se è gratuito in generale, dovrei controllare quando ero a casa. Potrebbe essere disponibile per me sotto l'abbonamento della mia azienda ad ACM.)

Il riconoscimento $ 1 sembra avere un buon equilibrio tra accuratezza e prestazioni, inoltre questa pagina contiene diversi collegamenti a versioni migliorate di tale algoritmo, come Goniometro, $ N e $ P. Non ho ancora provato ad usarne qualcuno, ma il mio problema con tutti loro è che rappresentano gesti usando serie di punti. Ciò richiede di ricampionare i gesti di input (cioè una serie di punti tocco prodotti dall'utente) per adattarli alla frequenza di campionamento del gesto memorizzato. Inoltre, le trasformazioni devono essere fatte per rendere il riconoscimento dei gesti funzionante in presenza di differenze di dimensione / orientamento. Inoltre, questo tipo di riconoscimento dei gesti in realtà non supporta l'idea di estrarre le caratteristiche dal gesto, ad es. la lunghezza di certi tratti rispetto ad altri tratti, che può essere utile quando si assegna un significato semantico al gesto.

Questo lavoro cita il riconoscimento $ 1 nel descrivere i suoi miglioramenti. Ma memorizza anche i gesti come una serie di punti.

Mi sembra che un migliore riconoscimento del gesto di tocco descriva i gesti come una serie di tratti di linea / semicerchio, con alcuni limiti di tolleranza agli errori e alcuni riferimenti alla dimensione / orientamento dei tratti precedenti nel multitasto gesto. Poiché i punti di input sono coordinate X / Y relative al tempo, penso che regressione ortogonale sia preferibile a regressione lineare .

Calcolando l'equazione della linea di regressione ortogonale e la tolleranza di errore richiesta per far corrispondere i punti di input con quella linea, può essere calcolato in modo incrementale . La regressione circolare, cioè la determinazione dell'equazione per un cerchio che viene tracciata dai punti di input, è descritta qui .

Non sono ancora sicuro di quando dichiarare che un tratto lineare / circolare di un gesto si è fermato e un altro componente è stato avviato. La libreria dei modelli gestuali sarà in grado di generare un elenco di tratti lineari / semicircolari che potrebbero seguire il set di tratti attualmente rilevato, quindi sembra possibile utilizzarlo per limitare il tipo di componenti da ricercare. Ma in generale, sembra che dovrei usare la tolleranza agli errori per rilevare quando il tratto attualmente rilevato non corrisponde più al modello di gesture e utilizzare tale scoperta per cercare all'interno di quel tratto per una modifica ad un altro tipo di tratto.

Ad esempio, se l'utente ha disegnato due segmenti di linea, l'algoritmo deve cercare all'interno del segmento di linea corrente per trovare il punto più probabile che rappresenta il confine tra due segmenti di linea diversi. Utilizzando la formula regressione incrementale descritta in precedenza, sembra che sia possibile rappresentare la regressione lineare / semicircolare come un binario albero, in modo che i cambiamenti tra i tratti possano essere trovati scendendo in aree con errori più piccoli nella linea di raccordo / cerchio, ma ho avuto problemi ad estendere le mie idee in questa direzione.

    
risposta data 02.05.2016 - 18:53
fonte
-1

È possibile utilizzare i modelli di Markov nascosti poiché vengono utilizzati in attività simili al programma come riconoscimento vocale e riconoscimento della grafia. Questo documento di ricerca potrebbe aiutarti.

link

    
risposta data 04.09.2015 - 20:20
fonte

Leggi altre domande sui tag