Doorman

Spunti di riflessione

Molti dipendenti della nostra azienda lavorano da remoto e dagli uffici situati in più sedi. A volte, sapere se un collega è attivo o non disponibile e dove si trova fisicamente, risulta molto difficile. Spesso poi, i dipendenti dimenticano di marcare il loro stato come attivo. Inoltre, la varietà di regioni e fusi orari coinvolti non certo aiuta.

Il messaggio di stato personale di Slack consente di indicare la tua posizione (se lavori da casa, ufficio e, in questo caso, si può specificare in quale sede).

Ecco dove entra in aiuto DeepLens. Non sarebbe fantastico che ogni volta che entri in ufficio, venissi riconosciuto e contrassegnato come “attivo” su Slack e lo stato si impostasse automaticamente sull’ufficio in cui ti trovi?

Cosa fa

  • Rileva ogni volta che una persona arriva in uno dei nostri uffici
  • Prova a identificare la persona
  • Non appena ci riesce, appare un messaggio Slack di benvenuto che dice "Benvenuto @svdgraaf!"
  • Nel caso in cui il rilevamento non andasse a buon fine, Slack porrà la seguente domanda “Chi sei?” E in quel caso avrai la possibilità di selezionare l’utente che ti corrisponde.
  • Se non desideri essere riconosciuto (per esempio da clienti o utenti che non appartengono alla rete Slack), sarà possibile selezionare l’opzione “Ignora” e l’immagine verrà rimossa dal bucket S3.
  • Le informazioni saranno poi archiviate nell’API Rekognition
    A partire dalla volte successive, il sistema identifica la persona secondo le impostazioni configurate marcandola come tale nel canale Slack

Cosa non fa ancora:

  • Contrassegnare la persona come attiva in Slack
  • Attivare lo status dell’utente in Slack
  • Parlare ad alta voce con Polly, se non l'hai ancora fatto funzionare sul dispositivo

Creato da: Sander van de Graaf

Come l’ho realizzato

È stato creato con tecnologia serverless che consente la distribuzione semplificata di funzioni Lambda. Avevo provato a creare il mio modello ma non ci sono riuscito (mi preoccupavano i costi di addestramento delle istanze EC2)... Alla fine, sono ricorso al modello “rilevamento di oggetti di AWS DeepLens”, a un modello non personalizzato e alla ricerca per oggetti “persona”.

Come funziona: lo strumento DeepLens rileva gli oggetti in avvicinamento. Nel momento in cui rileva una persona, fa uno snapshot di quella parte e la carica nel bucket S3. Questa operazione attiva la funzione di “Ipotesi” che cerca di identificare la persona in questione. Se si tratta di una persona conosciuta, automaticamente il servizio richiama l’API di Slack. Questo avviene anche nel caso in cui non si riconosca la persona. Nel canale, le persone possono formare la persona non riconosciuta e renderla un utente specifico: in quel caso si chiamerà l’API Gateway per addestrare l’immagine.

È possibile trovare il diagramma architetturale nel carousel di immagini soprastante.

Difficoltà

Greengrass: un paio di volte ho riscontrato problemi con Greengrass dal momento che non ha implementato o eseguito la mia funzione Lambda.

Deeplens: lo strumento DeepLens ha funzionato a un certo punto, ma il giorno dopo aveva già smesso. La funzione di aggiornamento automatico di Ubuntu è agile, finché non si rompe :) Inoltre: mi ci è voluto un po’ per capire che è possibile eseguire più funzioni Lambda contemporaneamente su Deeplens. Allucinante!
 
Accesso: non è per niente semplice eseguire il debug delle funzioni Lambda sul dispositivo quando si riscontrano problemi del funzionamento. Alla fine, ho trovato un modo per pubblicare i log in CloudWatch che è piuttosto agile ma non offre una documentazione dettagliata.

Problemi di privacy (impostazione dei tempi e di controllo): un collega ha richiesto di non partecipare al test. Ne comprendo le implicazioni. Fortunatamente, si trattava solo di un proof-of-concept e lo si faceva un po’ per divertimento, ma questo ha fatto scaturire un´accesa conversazione e una discussione sulle preoccupazioni relative alla Privacy legati a questo tipo di tecnologie. Abbiamo così deciso di impostare un timer in modo che il rilevamento avvenga solo tra le 08.00 e le 10.00.

La API di Slack
(il timeout è molto breve): ho scoperto a mie spese la difficoltà di invio delle risposte nell’API di Slack in un paio di millisecondi, altrimenti non funziona. Alla fine, ho dovuto richiamare l’API in modo asincrono affinché tutto andasse a buon fine.

Polly: ho creato gli mp3 e funzionano perfettamente. Non ho ancora ben capito come farli funzionare con DeepLens.

Risultati di cui vado fiero

Funziona! È entusiasmante vedere come le funzioni Lambda si attivino reciprocamente, riuscendo a funzionare senza l’esecuzione di alcun server. Davvero fantastico! 

Cosa ho imparato

  • Greengrass
  • API di Slack
  • OpenCV
  • Polly

Cosa fare

Rendi asincrono il caricamento a S3: al momento, il caricamento al bucket S3 potrebbe bloccarsi, e anche se non sembra cosi preoccupante, in realtà arresterebbe il caricamento di un numero stratosferico di immagini della stessa persona. E si verifica un’interruzione momentanea dello streaming. Immagino di poter scrivere file in una cartella locale (temporanea) da qualche parte, che un’altra funzione Lambda li carichi o, meglio ancora, che riesca direttamente a rilevare i volti dal dispositivo.

Evita attivazioni multiple: ogni volta che una persona cammina lentamente davanti alla videocamera o torna indietro nel giro di un minuto, Slack registra più post che ti verranno inviati. Mi piacerebbe aggiungere una funzione che archivia l'ultimo stato in termini di data e ora di una persona in Dynamo e che, una volta che se ne riscontra l’accesso in un periodo di tempo stabilito, non si postasse su Slack.

Esegui il rilevamento facciale sul dispositivo: l’ideale sarebbe poter farlo funzionare direttamente sul dispositivo.

Rendi pubblica l'app di Slack: attualmente, per far funzionare l'integrazione, è necessario configurare la tua app "dev" di Slack. Sarebbe bello se potessi lanciare la mia app, indicando semplicemente l’applicazione giusta.

Aggiungi Amazon Polly: Ho lavorato sull’API di Polly, ho creato mp3 che funzionano correttamente ma non riesco a trovare il modo di farli funzionare su DeepLens. Ho degli altoparlanti disponibili :)

Contrassegna una persona come "attiva": al momento non è consentito contrassegnare una persona come attiva attraverso l’API se non si ottiene precedentemente il permesso esplicito da parte dell’utente in questione. Non volevo intromettermi tra i miei colleghi e questa funzionalità non è stata ancora aggiunta.

Contrassegna lo stato di una persona: come già esposto, gli utenti finali devono prima confermarlo individualmente. L’ideale sarebbe poter contrassegnare il nostro stato indicando la sede dell’ufficio da cui lavoriamo.

Creato con

Python
DeepLens
Rekognition
Serverless
Polly

Fai una prova