Simon Says

Ispirazione

Simon Says, “Simon dice”, è un gioco per bambini dove i giocatori devono fare tutto quello che Simon, appunto, dice. Bisogna eseguire l’azione solo quando Simon lo chiede.

Curiosità: il primato mondiale per la più grande partita di Simon Says è di 12.215 persone durante gli Utah Summer Games. 

Cosa fa

Il gioco è basato su una piattaforma di apprendimento profondo in cui tutti i giocatori possono partecipare a un'unica partita globale utilizzando DeepLens per verificare che gli altri giocatori eseguano le proprie azioni nel modo corretto.

Come l’abbiamo realizzato

Per aiutarci nello sviluppo della nostra applicazione, abbiamo utilizzato due progetti open source: Openpose e mxnet Realtime Pose Estimation. Abbiamo cominciato ottimizzando un modello pre-addestrato da eseguire sul motore di inferenza dell’apprendimento profondo di Intel. Abbiamo utilizzato questo modello per generare una mappa delle pose che mostra la posizione del corpo. Abbiamo utilizzato questa mappa per classificare una rete più piccola per produrre le azioni dei giocatori.

La rete globale del gioco è stata costruita su un’architettura serveless AWS. Abbiamo cominciato facendo partire un evento da CloudWatch ogni minuto, il quale attiva una serie di funzioni Lambda per generare una partita. Dopo che è stata generata una nuova partita, questa viene inviata su ogni dispositivo utilizzando un servizio di messaggistica IoT. Il dispositivo può utilizzare questo messaggio per scaricare i file audio necessari, generati con AWS Polly, così da iniziare la partita. Con questa architettura crediamo che sia possibile ridimensionare l’applicazione così da supportare un vasto numero di dispositivi.

Difficoltà

Abbiamo incontrato diverse difficoltà durante la realizzazione del progetto. La più importante è stata convertire il modello a un motore di inferenza Intel. Abbiamo cominciato convertendo un modello MXNet utilizzando il convertitore Python ma ci siamo imbattuti in diversi errori riguardo un attributo axis per layer concat. Dopo aver risolto questi errori, ci siamo bloccati con Test failed: questo campione accetta reti che hanno solo un output, il che significava dover ristrutturare il layer di output finale o saltare l’esecuzione sulla GPU. FIX nella versione 1.2.2 - Forum di supporto AWS

Risultati di cui andiamo fieri

In molti momenti abbiamo pensato che il progetto fosse una causa persa. Il modello non ottimizzava e interpretava i risultati, quindi abbiamo percorso una strada tortuosa per poter ottenere una demo che funzionasse. La prima volta in cui abbiamo visto il feed in tempo reale del progetto con la mappa delle posizioni in sovrapposizione, abbiamo finalmente pensato che avremmo potuto finire quello che avevamo cominciato.

Avvertenza

Questo progetto non è inteso per l’uso commerciale ed è necessario seguire la licenza originale

Nel futuro

Nel futuro vorremmo permettere il rilevamento di più pose per permettere a un gruppo di giocatori di giocare con lo stesso dispositivo. Il modello è già stato impostato per tale scopo, ma abbiamo bisogno di implementarlo nel gioco, dato che per una demo era più facile farlo per un solo giocatore.

Sul lungo termine vorremmo creare un look di addestramento e classificazione in cui, in momenti non previsti, il sistema chiederà ai giocatori di fare una nuova azione. Possiamo poi prendere la posa generata e aggiornare le nostre classificazioni.

Inoltre, ampliando il campo di applicazione, il riconoscimento e la classificazione delle pose possono essere applicati al monitoraggio dei bambini, all’identificazione di casi di taccheggio, ad altri tipi di giochi come il ballo, o anche agli allenamenti sportivi. 

Creato con

Python
Amazon-Web-Services
DeepLens
Motore-di-Inferenza-del-machine-learning-di-Intel
MXNet
Caffe
apprendimento-approfondito
AWS-Polly
AWS-Lambda
IoT
Gateway-API-AWS
AWS-Athena

Fai una prova