2015-03-03 19 views
5

Desidero rilevare un modello specifico di movimento su un telefono cellulare Android, ad es. se faccio cinque sit-stands.Rileva lo schema di movimento su un dispositivo Android

[Nota:. Sono attualmente rilevando il movimento, ma il movimento in tutte le direzioni è la stessa]

Quello che serve è:

  1. Ho bisogno di differenziare il movimento verso il basso, verso l'alto, in avanti e indietro.
  2. Ho bisogno di trovare l'altezza del telefono cellulare dal livello del suolo (e l'altezza della persona che lo trattiene).

Esiste un progetto di esempio con implementazione del rilevamento del movimento del modello?

+1

@ NSQuamber.java –

risposta

2

È impossibile. Puoi riconoscere l'accelerazione del confronto verso il basso e verso l'alto con la forza gravitazionale principale, ma come fai a sapere se il tuo telefono è nella tasca posteriore quando ti alzi o solo nella mano quando saluti? Era se 5 stand up o 5 hellos? Avanti e indietro sono ancora più imprevedibili. Che cosa è in avanti per il telefono capovolto? Cosa succede se in avanti dal punto di vista telefonico? E il livello del suolo e l'altezza sono completamente fuori misura. Il telefono si muoverà e produrrà accelerazioni in modo esatto per nano o gigante - più dipende dal comportamento della persona o immobile quindi dall'altezza.

+1

Non sono d'accordo. Non è perfetto, ma è vero per molti campi di CS. Data l'accuratezza dei sensori al giorno d'oggi, non è irragionevole costruire modelli per indovinare cosa sta facendo un indossatore. Ad esempio, il settore/settore emergente di Wireless Health si concentra su problemi come questo. Ho lavorato una volta con un professore che usava sensori - non diversamente da quelli del telefono OP - sulle vittime di ictus, che potevano aiutare a diagnosticare potenziali problemi dall'andatura a piedi. Nel caso dell'OP, certo, otterrai dei falsi positivi, ma non sarebbe difficile distinguere tra un'onda e uno stand-up guardando i dati del sensore. –

6

Questo non è impossibile, ma potrebbe non essere estremamente accurato, dato che la precisione dell'accelerometro e dei giroscopi nei telefoni è migliorata molto.

Quale la vostra applicazione sarà fare è prendere i dati dei sensori, e facendo un regression analysis.

1) È necessario costruire un modello di dati che si classificano come cinque sit e stand. Questo potrebbe essere fatto chiedendo all'utente di fare cinque sedute e tribune o caricando l'app con un modello più fine dai dati che hai raccolto in precedenza. Potrebbero esserci trucchi che potresti fare, come caricare diversi modelli di persone con altezze diverse e chiedere all'utente di inviare la propria altezza nell'app, per utilizzare il modello migliore.

2) Quando è in esecuzione, la tua app cercherà di adattarsi allo data from the sensors (Android ha great libraries for this), al modello che hai creato. Si spera che, quando l'utente eseguirà cinque sit-stands, genererà una serie di dati di movimento abbastanza simili alla tua definizione di cinque sit-stands che il tuo algoritmo lo accetta come tale.

Un sacco di lavoro qui sta assemblando e classificando il modello, e giocando con esso fino ad ottenere una precisione accettabile. Concentrati su ciò che rende lo stand-sit unico per altri movimenti su e giù - Ad esempio, potrebbe esserci un segno rivelatore dell'estensione delle gambe nei dati, seguito da una forma diversa per il raddrizzamento completo. Oppure, se ti aspetti che il telefono sia nella tasca, potresti non avere molto movimento rotatorio, quindi puoi rifiutare i set di test che hanno registrato molti cambiamenti dal giroscopio.

1

Non sono necessariamente d'accordo con la risposta di Alex. Ciò è possibile (anche se forse non è accurato come si vorrebbe) utilizzando l'accelerometro, la rotazione del dispositivo e un ALTRO di prova/errore e data mining.

Il modo in cui vedo che questo può funzionare è definire un modo specifico in cui l'utente mantiene il dispositivo (o il dispositivo è bloccato e posizionato sul corpo degli utenti). Mentre attraversano i movimenti, l'orientamento combinato con l'accelerazione e il tempo determinerà quale tipo di movimento viene eseguito.Sarà necessario utilizzare oggetti di classe come OrientationEventListener, SensorEventListener, SensorManager, Sensor e vari timer, ad es. Runnables o TimerTasks.

Da lì, è necessario raccogliere molti dati. Osserva, registra e studia quali sono i numeri per eseguire azioni specifiche, quindi individua una serie di valori che definiscono ogni movimento e sottomovimento. Cosa intendo con movimenti parziali è, forse un situp ha cinque parti:

1) Posizione di riposo in cui l'orientamento telefono è valore x al tempo x

2) Situp iniziato, dove orientamento telefono è gamma di y- valori in y tempo (maggiore di x)

3) Situp è in posizione finale in cui l'orientamento telefono è gamma di valori z a z tempo (maggiore di y)

4) Situp è in estensione (l'utente sta ricadendo sul pavimento) dove l'orientamento del telefono è range di valori y al tempo v (maggiore di z)

5) Situp torna in posizione di riposo in cui l'orientamento telefono è valore x al tempo n (tempo massimo e finale)

Aggiungere accelerazione a questo pure, perché ci sono alcuni casi in cui l'accelerazione può essere assunto. Ad esempio, la mia ipotesi è che le persone eseguano il situp reale (passaggi 1-3 nella mia ripartizione sopra) con un'accelerazione più veloce rispetto a quando stanno cadendo indietro. In generale, molte persone cadono più lentamente perché non riescono a vedere cosa c'è dietro di loro. Questo può anche essere usato come condizione aggiuntiva per determinare la direzione dell'utente. Questo probabilmente non è vero per tutti i casi, tuttavia, ecco perché è necessario il data mining. Perché posso anche ipotizzare che se qualcuno ha fatto molti situp, quel situp finale è molto lento e poi si riducono di nuovo in posizione di riposo a causa dell'esaurimento. In questo caso l'accelerazione sarà opposta alla mia ipotesi iniziale.

Infine, check out sensori di movimento: http://developer.android.com/guide/topics/sensors/sensors_motion.html

Tutto sommato, è davvero un gioco di numeri in combinazione con il proprio "calcolo ipotetico". Ma potresti essere sorpreso dal modo in cui funziona. Forse (si spera) abbastanza buono per i tuoi scopi.

Buona fortuna!

1

È un argomento di ricerca e probabilmente sono in ritardo per postarlo qui, ma sto cercando la letteratura comunque, quindi?

Tutti i tipi di approcci di apprendimento automatico sono stati impostati sulla questione, ne menzionerò alcuni in arrivo. Il numero MOOC on machine learning di Andy Ng ti fornisce un punto di accesso al campo e in Matlab/Octave che puoi immediatamente mettere in pratica, demistifica anche i mostri ("Support vector machine" ... wtf?).

Mi piacerebbe rilevare se qualcuno è ubriaco dall'accelerazione del telefono e forse dall'angolo, quindi sto flirtando con le reti neuronali per il problema (sono buone per lo every issue in sostanza, se puoi permetterti l'hardware), dal Non voglio assumere modelli predefiniti da cercare.

Il vostro compito potrebbe essere affrontata modello basato a quanto pare, un approccio applicato per classificare golf play motions, dancing, comportamentali every day walking patterns, e due volte drunk driving detection dove one indirizzi il problema di trovare una linea di base per quello che è in realtà il movimento longitudinale al contrario di ogni altra direzione, che forse potrebbe contribuire a trovare le linee di base di cui hai bisogno, come quello che è il livello del suolo.

È un denso cespuglio di aspetti e approcci, al di sotto solo alcuni di più. Benvenuto su Orwellian overkill, amici.

Lim e.a. 2009: Real-time End Point Detection Specialized for Acceleration Signal

Egli & Yin 2009: Activity Recognition from acceleration data Based on Discrete Consine Transform and SVM

Il titolo più strano, molto tecnico e svizzero: Dhoble E.A. 2012: Online Spatio-Temporal Pattern Recognition with Evolving Spiking Neural Networks utilising Address Event Representation, Rank Order, and Temporal Spike Learning

un greco, edonistica, artistico e divertente uno, probabilmente dando un buon approccio per la rilevazione ubriachezza, se può essere visto come una sorta di danza:

Panagiotakis bis: Temporal segmentation and seamless stitching of motion patterns for synthesizing novel animations of periodic dances

Questo utilizza dati visivi, ma ti guida attraverso un'implementazione matlab di un classificatore di rete neuronale:

Symeonidis 2000: Hand Gesture Recognition Using Neural Networks

Problemi correlati