Doorman

Inspiration

Au sein de notre entreprise, de nombreuses personnes travaillent à distance et dans les bureaux (plusieurs sites). Parfois, il est très difficile de savoir si une personne est au travail / disponible ou non, ou de déterminer l’endroit où elle se trouve. Il arrive aussi que les personnes oublient d’activer leur statut. Nous avons également à tenir compte de plusieurs régions et fuseaux horaires

Nous utilisons également le message de statut personnel Slack pour indiquer où nous nous trouvons (travail à domicile, au bureau, et dans ce cas, à quel endroit).

C’est là qu’intervient l’appareil DeepLens. Est-ce que ce ne serait pas génial si à chaque fois que vous arrivez au bureau, vous soyez reconnu et signalé comme « actif » dans Slack, et que votre statut soit défini quel que soit le bureau dans lequel vous vous trouvez ?

Ce qu’il fait

  • Chaque fois qu'une personne entre dans l'un des bureaux, il la détecte.
  • Il essaye de déterminer qui est la personne.
  • S'il identifie la personne, un message de bienvenue s’affiche sur Slack : « Bienvenue @svdgraaf! ».
  • S'il n'identifie pas la personne, il demande sur Slack « Qui est-ce ? ». Et vous pouvez indiquer de quel utilisateur il s'agit.
  • Si vous ne souhaitez pas que cette personne soit reconnue (par exemple, des clients ou des personnes qui n’utilisent pas Slack), vous pouvez sélectionner « Ignorer », et l'image sera supprimée de S3.
  • Il stocke ensuite l’information dans l'API Rekognition.
    La fois suivante, il identifie la personne en tant que telle et la note sur le canal Slack.

Ce qu’il ne fait pas encore :

  • Signaler les personnes comme au travail sur Slack
  • Définir le statut de la personne sur Slack
  • Parler à voix haute avec Polly, je ne l’ai pas encore fait fonctionner sur l'appareil.

Créé par : Sander van de Graaf

Comment je l’ai construit

Je l'ai construit en utilisant le mode sans serveur, ce qui facilite vraiment le déploiement des fonctions Lambda. J'ai essayé de construire mon propre modèle, mais j'ai échoué (et les coûts de l’entraînement des instances EC2 m’inquiétaient). Finalemente, j'ai utilisé le modèle « DeepLens-object-detection » (détection d’objet DeepLens), sans aucun modèle personnalisé, et avec vérification des objets « personne ».

Fonctionnement: l’appareil DeepLens détecte les objets qui arrivent. S'il détecte une personne, il prend un instantané de cette partie du champ de vision, puis le télécharge sur S3. Cela déclenche une fonction « d’interrogation », qui tente de déterminer qui est la personne. S’il s’agit d’une personne connue, il appelle l'API Slack. S’il s’agit d’une personne inconnue, il appelle aussi Slack. Dans le canal, les personnes peuvent relier la personne inconnue à un utilisateur spécifique, et il appellera la passerelle Api pour qu’elle s’entraîne avec l'image.

Le diagramme d'architecture se trouve dans le carrousel d'images ci-dessus.

Les défis

Greengrass : à plusieurs reprises, Greengrass a échoué en ne déployant pas, ou n’exécutant pas ma fonction Lambda.

Deeplens : à un moment donné, mes appareils DeepLens fonctionnaient, et le lendemain non. La fonction de mise à jour automatique Ubuntu est parfaite, jusqu'à ce qu'elle s’arrête. Par ailleurs, j’ai mis du temps à comprendre que plusieurs fonctions Lambda peuvent être exécutées en même temps sur l’appareil Deeplens. Une révélation !
 
Journaux : il est très difficile de déboguer les fonctions Lambda sur l’appareil quand elles ne fonctionnent pas. J'ai fini par trouver un moyen de transférer les journaux dans CloudWatch, ce qui était parfait ; cependant, cela n'était pas très bien documenté.

Problèmes de confidentialité (réglage de la minuterie et du contrôle) : un(e) collègue a demandé s’il/si elle pouvait être exclu(e) du test. Je comprends les implications. Heureusement, il s’agissait seulement d’un point de contact avec lequel je partage aussi des distractions, mais cela a suscité une conversation intéressante sur les problèmes de protection de la vie privée liés à ce type de technologie Nous avons fini par paramétrer une minuterie afin que la détection n’ait lieu qu'entre 08h00 et 10h00.

API Slack
(le délai d'attente est très court) : j'ai rapidement appris qu'il faut répondre dans l'API Slack au bout de quelques millisecondes, sinon cela ne fonctionne pas. J'ai fini par établir un autre appel de manière asynchrone pour que tout fonctionne correctement.

Polly :  ma génération de fichiers mp3 est prête, et je peux parfaitement les jouer localement. Mais je n'ai pas encore compris comment jouer sur l’appareil DeepLens lui-même.

Les réalisations dont je suis fier.

Cela fonctionne ! Voir que toutes les fonctions Lambda se déclenchent et agissent sans devoir s’exécuter sur un serveur, c’est vraiment génial ! 

Ce que j’ai appris

  • Greengrass
  • API Slack
  • OpenCV
  • Polly

Quelle est la prochaine étape ?

Rendre le téléchargement S3 asynchrone : actuellement, le téléchargement S3 se bloque, ce qui en soit est acceptable car de toute manière il ne télécharge pas une multitude d'images de la même personne. Mais cela bloque momentanément le flux. J'envisage simplement d'écrire les fichiers dans un dossier local (tmp) quelque part, et de faire en sorte qu'une autre fonction Lambda les télécharge, ou mieux encore : détecter les visages directement sur l’appareil.

Suppression des déclenchements multiples : chaque fois qu'une personne passe lentement devant la caméra, ou repasse dans la minute qui suit, plusieurs publications sont faites sur Slack. Je souhaite ajouter une fonction qui stocke la date et l'heure à laquelle une personne a été détectée la dernière fois dans Dynamo, et bloque l’envoi à Slack si la personne est de nouveau détectée dans un délai X.

Détection des visages sur l’appareil : ce serait appréciable si j’avais le temps de la faire fonctionner directement sur l’appareil.

Rendre l'application Slack publique :  actuellement, vous devez configurer votre propre application Slack de « développement » pour que l'intégration fonctionne. Ce serait génial si j’étais en mesure de publier mon application, et que je puisse simplement pointer vers la bonne application.

Ajouter Amazon Polly : je travaille sur l'API Polly, la génération des mp3 fonctionne, mais je n’ai pas trouvé le moyen de lire les mp3 sur l’appareil DeepLens. J'ai quelques haut-parleurs disponibles !

Signaler une personne comme « active » : pour le moment, il est interdit de signaler une personne comme active via l'API Slack sans obtenir la permission explicite de l'utilisateur lui-même. Étant donné que je souhaitais pas déranger mes collègues, cela n'a pas encore été ajouté.

Indiquer le statut d’une personne : comme ci-dessus, l’approbation individuelle des utilisateurs finaux est nécessaire. Pouvoir indiquer dans leur statut la localisation du bureau actuel serait un point positif.

Construit avec

Python
DeepLens
Rekognition
Sans serveur
Polly