Parc canin

Inspiration

Je souhaitais savoir à quoi pouvait servir AWS DeepLens dès son désemballage. La plupart des nouveaux utilisateurs de DeepLens ont peu d’expérience en Machine Learning ou en Deep Learning. Amazon SageMaker est un puissant outil, dont la maîtrise de l’utilisation requiert un peu de temps. J’ai ainsi cherché à savoir à quoi peuvent servir les exemples d’applications fournis. J’ai découvert pas mal de cas d’utilisation.

Fonctionnement

Le parc canin utilise le modèle « Hot Dog or No Hot Dog » et capture les probabilités pour les correspondances les plus élevées. Le parc canin examine ensuite la correspondance maximale pour déterminer s’il s’agit d’un chien. L’opération se fait par mise en correspondance du sous-ensemble de 1 000 catégories de chiens. Le cas échéant, le parc canin vérifie la probabilité. Si elle est supérieure au seuil (défini de façon arbitraire sur 0,5), le système indique qu’un chien a été détecté. Il passe ensuite à la deuxième correspondance de catégorie pour déterminer s’il s’agit d’un chien. Dans l’affirmative, il procède à l’écriture de l’image en taille réelle (et non la miniaturisée sur laquelle s’est effectuée la reconnaissance) dans un compartiment S3, ainsi qu’à l’écriture des deux probabilités de races les plus élevées et de l’image URL dans une rubrique MQTT. La console AWS IoT peut être utilisée pour surveiller les résultats. Une seconde fonction Lambda (écrite en langage Node.js), appelée DogParkNotifier, reçoit le message provenant de la rubrique et en extrait les informations des champs pertinents via une instruction SQL. Les champs sont formatés pour tronquer la probabilité en un nombre entier, avant d’être envoyés à l’utilisateur via le système SNS. L’envoi peut se faire sous forme de SMS textuel ou d’e-mail. Une étape supplémentaire (création d’une rubrique et vérification de l’e-mail) est requise pour configurer le chemin de l’e-mail.

En général, les résultats visuels sont un SMS textuel contenant l’image du chien et les résultats des probabilités, envoyé sur le téléphone. C’est tout à fait impressionnant de recevoir un résultat quelques secondes après avoir pointé la caméra DeepLens sur un chien.

J’ai trouvé intéressant le fait que les probabilités changent avec les images. Les chiens sont rarement statiques. En conséquence, la probabilité de reconnaissance change, parfois de l’ordre de 10 %, en fonction des mouvements du chien.

Les gens sont disposés à participer à des expériences technologiques. Ils étaient très intéressés de savoir ce que disait DeepLens au sujet de leur chien.

Créé par : Dan Brennan

Création

Le projet a été créé en prenant l’exemple d’application « Hot Dog or Not Hot Dog » comme point de départ. Constatant qu’elle pouvait reconnaître une grande variété de races de chiens, j’ai pensé qu’elle ferait un excellent cas d’utilisation pour les débutants. Le code que j’ai créé peut être réutilisé facilement. L’utilisateur doit disposer d’un compte AWS, créer un compartiment S3 dans la même région que celle dans laquelle les fonctions Lambda sont déployées, définir le rôle IAM sur le compartiment S3 et inclure dans la fonction Lambda un rôle IAM doté d’assez de privilèges. Il dispose d’espaces réservés pour [YOUR_BUCKET_NAME]. L’utilisateur doit également avoir accès à l’exemple d’application « Hot Dog or Not Hot Dog » de DeepLens.

La fonction Lambda DogParkNotifier est la deuxième partie de l’application. Ici, le numéro de téléphone ou l’adresse électronique de l’utilisateur peut être utilisé pour la notification SNS. 

Défis à relever

J’ai créé plus de 100 générations pour parvenir à créer cette vidéo de démonstration. Honnêtement, il m’a fallu plus de 100 heures et plus de quatre semaines de travail. Une énorme courbe d’apprentissage en somme ! Ça m’a pris quelque temps pour apprendre à déboguer le code de la fonction Lambda Python sur DeepLens. L’enregistrement de l’appareil DeepLens s’est fait rapidement. Les instructions étaient parfaites. J’apprenais le langage Node.js également pour DogParkNotifier. Et bien entendu, j’ai été confronté au problème de mise à niveau automatique du système d’exploitation, à l’origine de l’échec de la connexion Wi-Fi. Heureusement, l’équipe DeepLens d’AWS a rapidement proposé une alternative.

L’un des défis à relever résidait dans l’alimentation de DeepLens pour une utilisation extérieure. J’ai essayé un bloc batterie à courant continu, comme celui que vous utilisez pour charger votre téléphone. La sortie d’intensité était 3,2 A, alors que DeepLens nécessite 4,04 A. Avec cette alimentation, le système essaierait de démarrer, mais s’arrêterait au bout de quelques secondes. J’ai trouvé d’autres blocs batteries à courant continu dans le commerce, avec une sortie d’intensité 4,8 A. Comme je craignais pour DeepLens, j’ai décidé de ne pas prendre de risque : j’ai opté pour une alimentation en courant alternatif. Elle offre l’avantage de stocker une quantité impressionnante d’énergie et de fournir une autonomie de fonctionnement de plus de 10 heures pour DeepLens. L’inconvénient, cependant, est qu’elle est plutôt encombrante. Elle coûte 79 USD, un prix légèrement supérieur à celui d’un bloc batterie à courant continu.

Au bout de quelques centaines de messages, mon opérateur de services téléphoniques (Verizon) a bloqué les messages textuels entrants provenant du parc canin. Je ne suis pas parvenu à réinitialiser ce paramètre, et Verizon ne propose aucune documentation au sujet de cette limite. AWS a essayé de transmettre les messages, mais ceux-ci connaissaient un échec total d’envoi depuis l’opérateur. La solution alternative a consisté à envoyer les messages par e-mail.

J’ai également été confronté au problème de météo, ce qui a entraîné une baisse du nombre de tests à réaliser. Nous avons connu le gel dans le New Jersey, et personne ne promenait son chien. Par la suite, nous avons enregistré plusieurs jours de pluie incessante, à quelques jours de la fin du challenge. Nous avons toutefois pu visiter deux fois le parc, et les résultats étaient d’une précision étonnante.

Autre problème : la connexion Internet. DeepLens nécessite la connexion Internet pour envoyer les images dans le compartiment S3 et renseigner la rubrique MQTT. Mon téléphone servait à la fois de point d’accès et de point de réception des messages textuels. J’ai constaté que la connexion au point d’accès s’arrêtait lorsqu’elle n’était pas utilisée. Or, DeepLens n’essayait pas de se reconnecter. La solution était à deux volets : Dans un premier temps, j’ai pris un iPad que j’ai configuré comme point d’accès. Pour une raison ou une autre, l’iPad maintenait active la connexion au point d’accès sur mon téléphone, ce qui permettait à DeepLens de rester connecté en permanence. Dans un second temps, j’ai supprimé les connexions sans fil secondaires sur le système Ubuntu de DeepLens. Résultat : je disposais d’une connexion sans fil haut débit pour le développement du projet et d’une autre pour le point d’accès pour une utilisation à distance. Lorsque le point d’accès est devenu inaccessible, DeepLens a essayé de se reconnecter au réseau Wi-Fi haut débit, qui, bien évidemment, n’était pas disponible dans le parc canin. Il est resté dans cet état et n’a plus tenté de se reconnecter au point d’accès. Ainsi, j’ai dû supprimer toutes les autres connexions Wi-Fi de la liste avant de quitter la maison pour le parc canin.

J’ai rencontré un mystérieux problème : les fonctions Lambda se déploient sur DeepLens, mais l’éclairage de la caméra ne s’allume pas. Le fichier journal Python de l’appareil a indiqué une erreur. L’équipe AWS (à une heure ouvrée) m’a demandé d’essayer la solution ci-dessous.

Sur le système DeepLens, saisir : aws_cam@Deepcam:~$ git clone https://github.com/boto/boto3.git aws_cam@Deepcam:~$ cd boto3 aws_cam@Deepcam:~$ sudo cp -r boto3 /usr/local/lib/python2.7/dist-packages aws_cam@Deepcam:~$ sudo pip install awscli –force-reinstall –upgrade.

Cela a fonctionné. La réinstallation de l’interface de la ligne de commande AWS a résolu le problème.

Les réalisations qui font ma fierté

Je suis fier que cela ait fonctionné. J’ai appris énormément sur Lambda, DeepLens, Python, IAM et les rubriques, ainsi que sur les innombrables problèmes susceptibles de bloquer l’aboutissement d’un projet. Alors que j’estimais que le projet me prendrait environ 10 heures, cela m’a pris 100 heures. En général, je travaillais jusqu’au-delà de 1 heure du matin.
Je suis donc fière d’avoir achevé ce projet. Il utilise l’exemple d’application« Hot Dog » et le développe pour en faire quelque chose d’intéressant et d’externe. Il utilise le Deep Learning pour créer des curiosités pour des gens. Au point où ceux-ci sont amenés à s’interroger sur son mode de fonctionnement.

Leçons apprises

J’ai appris que je n’étais pas doué pour évaluer la durée d’un projet ! J’ai beaucoup appris au sujet des services AWS. J’ai appris le côté pratique de la mise ensemble. J’ai appris à être plus rapide dans ce que je fais. Je n’ai plus d’inquiétude quant à l’emplacement de destination d’une fonction Lambda après son déploiement. J’ai trouvé l’emplacement des messages journaux Python sur DeepLens.

Quelle est la prochaine étape pour le parc canin ?

Le parc canin doit utiliser un petit bloc batterie à courant continu. Je dois rendre le seuil programmable à partir d’une application iOS Apple afin qu’elle soit modifiable sur le terrain. Je dois renforcer la sécurité. Je l’ai laissée trop grande ouverte pendant les tests.
J’ai beaucoup d’idées relatives à la reconnaissance des oiseaux dans les mangeoires. Seulement, leur mise en œuvre nécessitera un ajustement précis du modèle et de la formation à l’aide d’une variété d’images d’oiseaux. Évidemment, Amazon SageMaker sera précieux à cet effet.

Créé avec

lambda
deeplens
python
node.js
s3
amazon-sns

Tester