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.