Découverte du framework TFJS
Dans cet article, nous allons explorer comment créer votre propre système de sécurité qui utilise TensorFlow.js pour détecter la présence d’une personne dans les caméras de votre ordinateur. Cette démonstration montre comment l’intelligence artificielle peut être intégrée dans des applications web pour créer des fonctionnalités innovantes et interactives
Cette article est redigé dans le but de vous faire une première découverte et donc de s’abstraire des difficultées, mais ne vous en faites pas, le prochain article est consacré à la manipulation des tenseurs
En hébergement, j’utilise azure et vercel, libre à vous d’adapter le code pour utiliser vos hébergeurs favoris
Verisure ne passera plus jamais chez vous après cette article. 😉
Qu’est-ce que TensorFlow.js ?
TensorFlow.js est une bibliothèque open-source qui permet d’exécuter des modèles de machine learning directement dans le navigateur ou sur Node.js.
Elle offre la possibilité de déployer des modèles entraînés avec TensorFlow sur des applications web, facilitant ainsi l’intégration de l’IA dans les applications front-end.
Pourquoi utiliser TensorFlow.js ?
- Simplicité : Intégration facile dans les applications web.
- Performance : Exécution rapide des modèles de machine learning grâce à l’utilisation de WebGL et WebAssembly.
- Flexibilité : Possibilité de déployer des modèles pré-entraînés ou d’entraîner des modèles directement dans le navigateur.
Ok et maintenant commençons
Avant toute chose il vous faut node.js, un éditeur de code et git.
Ensuite vous pouvez cloner ce projet github.
Vous pouvez tester l’app ici :
C’est une implémentation extrêmement simple d’un modèle de detection d’objet, l’objectif ? Envoyer une notification telegram à chaque detections de personne. Dans ce projet on utilise azure pour la persistance des données. Azure table pour l’utilisateur et azure blob pour le stockage des detections. Vous pouvez utiliser ce code et heberger à votre guise, de mon côté je paye zéro euro pour ce projet sur azure.
C’est une application next.js avec typescript et tailwind-css.
Il y’a beaucoup de code mais concentrons nous sur l’implémentation de tensorflow.js et donc du composant Board.tsx
Imports et Dépendances
- Le code commence par importer les bibliothèques et les composants nécessaires, notamment
TensorFlow.js
,coco-ssd
pour la détection d’objets,react-webcam
pour accéder à la webcam, et divers composants d’interface utilisateur.
Composant Board
- Ce composant est le cœur de l’application. Il gère la détection d’objets, la capture d’images et l’affichage des caméras disponibles.
- Le composant utilise plusieurs états pour gérer les caméras disponibles (
cameras
), l’état de chaque caméra (cameraChecked
), le modèle de détection d’objets (net
), et l’état de chargement du modèle (modelLoading
). - Il utilise également une référence
webcamRefs
pour stocker les instances deWebcam
pour chaque caméra.
Chargement du Modèle de Détection
- La fonction
runCocoSsd()
est appelée pour charger le modèle de détection d’objetscoco-ssd
de TensorFlow.js. - Une fois le modèle chargé,
setModelLoading(false)
est appelé pour indiquer que le chargement est terminé.
Détection d’Objets et Capture d’Images
- La fonction
runObjectDetection()
est appelée régulièrement (toutes les 3 secondes) pour détecter les objets dans l’image de chaque caméra activée. - Lorsqu’une personne est détectée, la fonction
sendPicture()
est appelée pour envoyer l’image capturée et les informations de détection.
Cycle de Vie et Nettoyage
- Dans le
useEffect()
qui suit le chargement du modèle, un intervalle est défini pour appeler régulièrementrunObjectDetection()
. - Lors du démontage du composant, l’intervalle est effacé, et les ressources TensorFlow.js sont libérées.
Gestion du Composant lors du chargement du modèle
- Lorsque le modèle est en cours de chargement, un écran de chargement avec un avatar et un badge est affiché.
Affichage du Composant
- Lorsque le modèle est chargé, le composant affiche une carte pour chaque caméra disponible, avec un interrupteur pour activer/désactiver la caméra et l’affichage de la capture vidéo.
Vous voyez, je vous avais prévenu que nous allions commencé tout doucement 😄.
Ici, nous avons utilisé un node package manager mis à disposition pour l’inférence du modèle, nous n’avons pas à gérer manuellement les dépendances complexes ou la configuration des environnements d’exécution spécifiques à l’IA. Grâce à l’utilisation de TensorFlow.js et des packages tels que @tensorflow-models/coco-ssd
, tout le processus d’intégration, de chargement et d’exécution du modèle se fait de manière automatisée et optimisée. Ces packages gèrent les détails sous-jacents tels que le chargement des poids du modèle, l’initialisation des tensors, et l’optimisation des calculs pour tirer parti des capacités de traitement disponible, que ce soit sur CPU ou GPU via WebGL. Cela permet de concentrer les efforts sur le développement des fonctionnalités spécifiques à l’application, comme la logique de capture d’image et la réaction aux résultats de l’inférence, plutôt que sur la gestion de l’infrastructure de machine learning.
Et voila c’est déjâ terminé, encore une fois on reste simple pour cette première découverte.
Mais je vous promet que le prochain article va être très très intéressant.
Si jamais tout cela ne vous intéresse pas mais que vous aimeriez bien utiliser des modèles Computer Vision dans vos projets ou même NLP, je vous invite fortement à vous diriger du côté de Mediapipe ou de Transformers.js