2009-03-19 14 views
18

In un ambiente multi-touch, come funziona il riconoscimento gestuale? Quali metodi o algoritmi matematici vengono utilizzati per riconoscere o rifiutare i dati per possibili gesti?Come funziona il riconoscimento gestuale?

Ho creato alcuni guanti retroriflettenti e un array di LED IR, abbinato a un telecomando Wii. Il telecomando Wii esegue il rilevamento blob interno e tiene traccia di 4 punti di luce IR e trasmette queste informazioni al mio computer tramite un dongle bluetooth.

Si basa su Johnny Chung Lee's Wii Research. La mia configurazione precisa è esattamente come gli studenti laureati dei Paesi Bassi hanno visualizzato here. Posso facilmente tenere traccia delle posizioni di 4 punti nello spazio 2d e ho scritto il mio software di base per ricevere e visualizzare questi punti.

alt text http://i40.tinypic.com/x517yg.pngalt text http://i42.tinypic.com/nao9x.pngalt text http://i43.tinypic.com/65d1zp.png

Gli studenti dei Paesi Bassi hanno ottenuto un sacco di funzionalità dalla loro base di riconoscimento pinch-click. Mi piacerebbe fare un ulteriore passo avanti se potessi, e attuare altri gesti.

Come viene solitamente implementato il riconoscimento dei gesti? Oltre qualsiasi cosa banale, come potrei scrivere software per riconoscere e identificare una varietà di gesti: vari swipes, movimenti circolari, tracciamento delle lettere, ecc.

risposta

11

Il riconoscimento del gesto, come ho visto in ogni caso, viene solitamente implementato utilizzando l'apprendimento automatico tecniche simili al software di riconoscimento immagini. Here's a cool project on codeproject about doing mouse gesture recognition in c#. Sono sicuro che i concetti sono abbastanza simili in quanto è possibile ridurre il problema fino allo spazio 2D. Se ottieni qualcosa su questo, mi piacerebbe vederlo. Ottima idea di progetto!

+0

@ascalonx, grazie per il collegamento! Sono sicuro che sarà utile. – mmcdole

+0

Riconoscimento dei gesti del mouse in ActionScript: http://www.bytearray.org/?p=91 –

8

Un modo per vederlo è come un problema di compressione/riconoscimento. Fondamentalmente, vuoi prendere un sacco di dati, buttarne via la maggior parte e classificare il resto. Se fossi facendo questo (da zero) probabilmente sarei procedere come segue:

  • lavoro con una finestra della cronologia di laminazione
  • prendere il centro di gravità dei quattro punti del fotogramma iniziale, salvarlo, e sottrai da tutte le posizioni in tutti i frame.
  • fattore ogni frame in due componenti: la forma della costellazione e il movimento del suo CofG rispetto all'ultimo frame.
  • salvare la CofG assoluto per l'ultimo fotogramma troppo
  • la serie di cambiamenti CofG vi dà scorrere, onde, ecc
  • la serie di costellazione di morphing si pizzichi dà, ecc

Dopo aver visto la tua foto (due punti su ogni mano, non quattro punti su uno, doh!) Avrei modificano il sopra come segue:

  • fare il calcolo CofG su coppie, con le riserve che:
    • Se ci sono quattro punti visibili, coppie vengono scelti per minimizzare il prodotto della all'interno della coppia distanze
    • Se ci sono tre punti visibili, più vicino due sono una coppia, l'altro è l'altro
    • Usa fotogrammi precedenti/seguenti per ignorare quando necessario
  • Invece di una costellazione, hai una struttura annidata di coppie distanza/orientamento (cioè, un D/O tra le mani e un altro per ogni mano).
  • Passa i dati ridotti ai riconoscitori per ogni gesto e lascia che risolvano ciò che gli interessa.
  • Se si desidera ottenere carino, fare un po 'DSL per riconoscere i modelli, e scrivere le cose come:

    fire when 
        in frame.final: rectangle(points) 
        and 
        over frames.final(5): points.all (p => p.jerk) 
    

    o

    fire when 
        over frames.final(3): hands.all (h => h.click) 
    
+0

@MarkusQ, grazie per i commenti.Solo per riferimento, gli studenti olandesi che fanno clic sull'algoritmo funzionano come segue: se il wiimote perde la traccia di un punto e l'altro punto della sua coppia era all'interno di una soglia di prossimità, allora è un "clic". – mmcdole

+0

Quando le dita si uniscono, il wiimote vedrà entrambe le dita come un unico blob e non più due. Quindi perde uno dei suoi punti. Questo può accadere anche quando le tue mani non sono più visibili, quindi viene utilizzata la soglia di prossimità per evitare falsi positivi. – mmcdole

0

io non sono molto esperto in questo tipo di matematica, ma ho letto da qualche parte che le persone a volte usano Markov Chains o Hidden Markov Models per eseguire il riconoscimento dei gesti.

Forse qualcuno con un po 'più di esperienza in questo settore dell'informatica può illuminarlo ulteriormente e fornire ulteriori dettagli.

0

Err .. Ho lavorato al riconoscimento dei gesti per lo scorso anno o giù di lì ora, ma non voglio dire troppo perché sto cercando di brevettare la mia tecnologia :) Ma ... noi ' Ho avuto un po 'di fortuna con il potenziamento adattivo, anche se quello che stai facendo sembra fondamentalmente diverso. Hai solo 4 punti di dati da elaborare, quindi non penso che tu abbia davvero bisogno di "ridurre" qualsiasi cosa.

Quello che vorrei indagare è come programmi come Flash trasformano un cerchio disegnato a mano libera in un cerchio reale. Sembra che tu possa tracciare i punti per una durata di circa un secondo, e quindi "lisciare" il percorso in qualche modo, e quindi potresti probabilmente farla franca con i tuoi gesti (se li rendi abbastanza semplici). Altrimenti, si, vorrai usare un algoritmo di apprendimento. Le reti neurali potrebbero funzionare ... Non lo so. Basta lanciare le idee :) Forse guarda come è fatto anche OCR ... o anche Hough transforms. A me sembra che questo sia un problema nel riconoscere le forme più che nel riconoscere i gesti.

+0

Beh, fondamentalmente, disegnare un cerchio, una x, o strisciare tutti e 4 i punti in direzioni diverse ~ sono ~ gesti. Nel mio secondo mondo i miei gesti sono forme. Dovrò comunque approfondire gli algoritmi di apprendimento. – mmcdole

+0

Beh, sì, * sono * i gesti, voglio solo dire che se riesci a capire quale forma fa, puoi anche capire che gesto era. credo che il riconoscimento del gesto sia riducibile a dare forma al riconoscimento (che potrebbe essere un problema più facile da risolvere, meno probabilistico). – mpen

0

La maggior parte semplici strumenti gesto di riconoscimento Ho guardato utilizzare un modello basato su vettori di riconoscerli. Ad esempio, puoi definire il tasto destro come "0", un segno di spunta come "-45, 45, 45", un cerchio in senso orario come "0, -45, -90, -135, 180, 135, 90, 45, 0 ", e così via.

Problemi correlati