Table des matières:

CribSense : un moniteur vidéo sans contact pour bébé : 9 étapes (avec photos)
CribSense : un moniteur vidéo sans contact pour bébé : 9 étapes (avec photos)

Vidéo: CribSense : un moniteur vidéo sans contact pour bébé : 9 étapes (avec photos)

Vidéo: CribSense : un moniteur vidéo sans contact pour bébé : 9 étapes (avec photos)
Vidéo: MACQUERIPE SUNSET | Richard Atkins| Keevo | Solo Coconut Flavoured Water | Cup of Joe After Dark 2024, Novembre
Anonim
CribSense: un moniteur vidéo sans contact pour bébé
CribSense: un moniteur vidéo sans contact pour bébé
CribSense: un moniteur vidéo sans contact pour bébé
CribSense: un moniteur vidéo sans contact pour bébé

CribSense est un moniteur vidéo pour bébé sans contact que vous pouvez fabriquer vous-même sans vous ruiner

CribSense est une implémentation C++ de l'agrandissement vidéo réglée pour fonctionner sur un Raspberry Pi 3 modèle B. Au cours d'un week-end, vous pouvez configurer votre propre babyphone pour lit de bébé qui déclenche une alarme si votre bébé cesse de bouger. En prime, tous les logiciels sont libres d'utilisation à des fins non commerciales et sont facilement extensibles.

Le référentiel complet contenant les fichiers sources et la documentation est disponible sur

Bien que nous pensons que CribSense est assez amusant, il est important de se rappeler qu'il ne s'agit pas en fait d'un dispositif de sécurité certifié et infaillible. C'est-à-dire qu'il doit être correctement configuré et avoir un environnement bien contrôlé pour fonctionner. Par exemple, s'il n'est pas bien calibré et/ou si l'environnement de la vidéo n'est pas propice au grossissement vidéo, vous ne pourrez peut-être pas l'utiliser. Nous en avons fait un projet amusant pour voir à quel point nous pouvions faire fonctionner des logiciels lourds comme l'agrandissement vidéo sur du matériel à calcul limité comme un Raspberry Pi. Tout produit réel nécessiterait beaucoup plus de tests que nous n'en avons fait. Donc, si vous utilisez ce projet, prenez-le pour ce qu'il est: une courte exploration du grossissement vidéo sur un Pi.

Ce dont vous aurez besoin:

Raspberry Pi + Caméra + Outils de configuration:

  • Raspberry Pi 3 modèle B
  • Alimentation Micro USB 5V 2.5A
  • Module de caméra Raspberry Pi NoIR V2
  • Carte MicroSD (nous avons utilisé une carte de classe 10 de 16 Go)
  • Câble flexible pour caméra Raspberry Pi (12")
  • Haut-parleurs avec entrée 3,5 mm
  • Moniteur HDMI
  • Clavier USB
  • Souris USB
  • [optionnel] Radiateur Raspberry Pi (si vous vous inquiétez de la chaleur, vous pouvez en coller un sur votre Pi)

Circuit LED IR pour un fonctionnement à faible luminosité:

  • [3x] 1N4001 Diodes
  • 1 Ohm, 1W Résistance
  • LED infrarouge 1W
  • 2 fils pour accrocher la LED au Pi
  • Fer à souder

Châssis:

  • Accès à une imprimante 3D (volume de construction minimum = 9,9" L x 7,8" L x 5,9" H) pour imprimer notre châssis. Cependant, n'hésitez pas à construire le vôtre.
  • Colle (tout type de colle fonctionnera, mais la colle chaude est recommandée pour le prototypage).

Étape 1: Prérequis

Avant de commencer notre guide étape par étape, vous devez déjà avoir installé la dernière version de Raspbian sur votre carte SD et vous être assuré que votre Pi est fonctionnel. Vous devrez également activer le module de caméra avant de pouvoir accéder à la caméra.

Étape 2: Installation du logiciel CribSense

CribSense dépend d'autoconf, libtool, OpenCV et libcanberra, ainsi que des outils logiciels courants.

  • autoconf et libtool sont utilisés pour configurer automatiquement les makefiles et créer des scripts pour CribSense sur de nombreuses plates-formes (comme Linux, OSX et Raspberry Pi).
  • OpenCV est un puissant progiciel de vision par ordinateur utilisé pour le traitement d'images et constitue la base du code de grossissement vidéo et de détection de mouvement. Il offre un excellent support, est facile à utiliser et offre de bonnes performances.
  • libcanberra est une bibliothèque simple pour jouer des sons d'événements. Il est utilisé pour jouer le son de l'alarme pour CribSense.

Visitez leurs pages individuelles pour obtenir tous les détails.

Installez-les en ouvrant un terminal sur votre Pi et en exécutant:

sudo apt-get install git build-essential autoconf libtool libopencv-dev libcanberra-dev

Ensuite, vous devez configurer le pilote de la caméra pour qu'il se charge automatiquement en ajoutant bcm2835-v4l2 à `/etc/modules-load.d/modules.conf`. Votre modules.conf devrait ressembler à ceci:

# /etc/modules: modules du noyau à charger au démarrage.

# # Le fichier contient les noms des modules du noyau qui doivent être chargés # au démarrage, un par ligne. Les lignes commençant par "#" sont ignorées. i2c-dev bcm2835-v4l2

Une fois le fichier édité, vous devez redémarrer votre Pi. Ce pilote est utilisé par CribSense pour extraire directement les images de la caméra NoIR.

Ensuite, vous pouvez cloner le dépôt en exécutant:

git clone

Ensuite, déplacez-vous dans le référentiel et créez le logiciel en exécutant

cd CribSense

./autogen.sh --prefix=/usr --sysconfdir=/etc --disable-debug make sudo make install sudo systemctl daemon-reload

Félicitations, vous avez installé tous les logiciels nécessaires !

Configuration

CribSense est personnalisable via un simple fichier de configuration INI. Après avoir exécuté `make install`, le fichier de configuration se trouve dans /etc/cribsense/config.ini. Vous pouvez afficher et modifier ces paramètres en exécutant

sudo nano /etc/cribsense/config.ini

Une brève explication de chaque paramètre est donnée dans la configuration par défaut, mais plus de détails sont disponibles sur https://lukehsiao.github.io/CribSense/setup/config/. Nous discuterons également de l'étalonnage et de la configuration à la fin de ce guide.

Exécuter CribSense

CribSense a été conçu pour s'exécuter au démarrage en utilisant un service systemd. Pendant que vous êtes connecté à votre Raspberry Pi avec votre clavier et votre souris, vous devez vous assurer que les paramètres de configuration fonctionnent pour votre berceau. Vous devrez peut-être réajuster ces paramètres si vous le déplacez.

Pendant que vous réglez les paramètres, vous pouvez exécuter cribsense à volonté à partir de la ligne de commande en exécutant

cribsense --config /etc/cribsense/config.ini

Une fois que vous êtes satisfait, vous pouvez activer l'exécution automatique en exécutant

sudo systemctl activer cribsense

Vous pouvez empêcher cribsense de s'exécuter automatiquement en exécutant

sudo systemctl désactiver cribsense

Présentation du logiciel

Le logiciel CribSense est le cœur et l'âme de ce projet. Nous avons vu quelques-unes des grandes démonstrations de grossissement vidéo du MIT et voulions essayer d'exécuter un algorithme similaire sur un Raspberry Pi. Cela a nécessité une accélération de plus de 10 fois du travail de tbl3rd sur son implémentation C++ du grossissement vidéo afin de fonctionner en temps réel sur le Pi. Les optimisations requises ont guidé notre conception du logiciel.

À un niveau élevé, CribSense parcourt à plusieurs reprises une machine d'état logicielle. Tout d'abord, il divise chaque image vidéo en niveaux de gris de 640x480 en 3 sections horizontales (640x160) pour une meilleure localisation du cache. Il agrandit ensuite chaque bande dans un fil séparé et surveille le mouvement observé dans le cadre. Après avoir surveillé le mouvement pendant plusieurs secondes, il détermine la zone de mouvement principale et y recadre le cadre. Cela réduit le nombre total de pixels que l'algorithme doit traiter. Ensuite, CribSense surveille la quantité de mouvement dans le flux recadré et déclenche une alarme si aucun mouvement n'est perçu pendant une durée configurable. Périodiquement, CribSense rouvrira sa vue pour surveiller l'intégralité de l'image au cas où le nourrisson se serait déplacé et recadrait autour de la nouvelle zone de mouvement principale.

Le grossissement vidéo est utilisé pour augmenter le rapport signal/bruit de mouvements subtils comme la respiration du nourrisson. Cela ne serait pas nécessaire pour les mouvements plus importants, mais peut aider pour les mouvements très subtils. Notez que notre implémentation est vaguement basée sur l'algorithme décrit dans les articles du MIT et ne fonctionne pas aussi bien que leur code propriétaire.

Des optimisations telles que le multithreading, le recadrage adaptatif et les optimisations du compilateur nous ont donné une accélération d'environ 3x, 3x et 1,2x, respectivement. Cela nous a permis d'atteindre l'accélération 10x requise pour fonctionner en temps réel sur le Pi.

Tous les détails sont disponibles sur la page Architecture logicielle du référentiel CribSense.

Si vous êtes intéressé par l'agrandissement vidéo, veuillez visiter la page du MIT.

Étape 3: Préparation de votre matériel: connectez votre caméra

Préparation de votre matériel: connectez votre caméra
Préparation de votre matériel: connectez votre caméra

Tout d'abord, vous devez échanger le câble 6" fourni avec l'appareil photo avec le câble 12". Pour ce faire, vous pouvez simplement suivre ce tutoriel pour savoir comment remplacer le câble de la caméra.

En résumé, vous verrez une languette pousser/tirer à l'arrière de la caméra que vous pouvez retirer pour libérer le câble flexible. Remplacez le câble court par le plus long et repoussez la languette.

Vous remarquerez que nous avons un câble de 24" sur nos photos. Il était trop long. Le câble de 12" sur la liste des matériaux est une longueur beaucoup plus raisonnable.

Étape 4: Préparation de votre matériel: LED IR

Préparation de votre matériel: LED IR
Préparation de votre matériel: LED IR
Préparation de votre matériel: LED IR
Préparation de votre matériel: LED IR
Préparation de votre matériel: LED IR
Préparation de votre matériel: LED IR

CribSense est relativement facile à construire et se compose en grande partie de pièces disponibles dans le commerce. Comme le montre la figure ci-dessus, il existe 5 composants matériels principaux, dont seulement 2 sont fabriqués sur mesure. Cette page expliquera comment construire le circuit LED IR, et la page suivante expliquera comment construire le châssis.

Pour cette partie, vous devez vous procurer votre fer à souder, vos fils, vos diodes, votre LED IR et votre résistance. Nous allons construire le circuit montré dans la 2ème figure. Si vous débutez dans la soudure, voici un bon guide qui vous rattrapera. Bien que ce guide traite de la soudure par trou traversant, vous pouvez utiliser les mêmes techniques de base pour connecter ces composants ensemble, comme indiqué dans la 3ème figure.

Afin de fournir un éclairage adéquat la nuit, nous utilisons une LED IR, qui n'est pas visible à l'œil humain mais visible par la caméra NoIR. La LED IR ne consomme pas beaucoup d'énergie par rapport au Raspberry Pi, nous laissons donc la LED IR allumée par souci de simplicité.

Dans les versions antérieures du Pi, la sortie de courant maximale de ces broches était de 50 mA. Le Raspberry Pi B+ l'a augmenté à 500mA. Cependant, nous utilisons simplement les broches d'alimentation 5V pour plus de simplicité, qui peuvent fournir jusqu'à 1,5A. La tension directe de la LED IR est d'environ 1,7 ~ 1,9 V selon nos mesures. Bien que la LED IR puisse consommer 500 mA sans s'endommager, nous réduisons le courant à environ 200 mA pour réduire la chaleur et la consommation électrique globale. Les résultats expérimentaux montrent également que la LED IR est suffisamment lumineuse avec 200 mA de courant d'entrée. Pour combler l'écart entre 5V et 1,9V, nous utilisons trois diodes 1N4001 et une résistance de 1 Ohm en série avec la LED IR. La chute de tension sur le fil, les diodes et la résistance est d'environ 0,2 V, 0,9 V (pour chacun) et 0,2 V, respectivement. Ainsi, la tension sur la LED IR est de 5V - 0,2V - (3 * 0,9V) - 0,2V = 1,9V. La dissipation thermique sur la LED est de 0,18 W et de 0,2 W sur la résistance, le tout bien en deçà de leurs valeurs nominales maximales.

Mais nous n'avons pas encore fini! Afin d'obtenir un meilleur ajustement dans le châssis imprimé en 3D, nous voulons que la lentille LED IR dépasse de notre châssis et que la carte PCB affleure le trou. La petite photodiode en bas à droite gênera. Pour y remédier, nous le dessoudons et le retournons sur le côté opposé de la carte, comme indiqué sur les deux dernières photos. La photodiode n'est pas nécessaire car nous voulons que la LED soit toujours allumée. Le simple fait de le basculer du côté opposé laisse le circuit LED d'origine inchangé.

Lors de la soudure aux fils, assurez-vous que les fils mesurent au moins 12 pouces de long et ont des en-têtes de broche qui peuvent glisser sur les GPIO du Pi.

Étape 5: Préparation de votre matériel: Châssis

Préparation de votre matériel: châssis
Préparation de votre matériel: châssis
Préparation de votre matériel: châssis
Préparation de votre matériel: châssis
Préparation de votre matériel: châssis
Préparation de votre matériel: châssis

Fichiers source:

  • Cas STL
  • Case Makerbot
  • Couverture STL
  • Couvercle Makerbot

Nous avons utilisé un simple châssis imprimé en 3D pour loger le Pi, la caméra et la LED. L'utilisation de notre châssis est facultative, mais recommandée pour empêcher les jeunes enfants de toucher les circuits électroniques exposés. Chaque berceau est différent, notre châssis n'inclut donc pas de support de montage. Plusieurs options de montage peuvent inclure:

  • Attaches de câble
  • 3M Double Verrouillage
  • Velcro
  • Ruban

Si vous avez accès à une MakerBot Replicator (5e génération), vous pouvez simplement télécharger les fichiers.makerbot pour le boîtier et la couverture sur votre MakerBot Replicator et imprimer. Il faut environ 6 heures pour imprimer le boîtier et 3 heures pour imprimer la couverture. Si vous utilisez un autre type d'imprimante 3D, continuez à lire.

Un volume de construction minimum de 9,9" (L) x 7,8" (L) x 5,9" (H) est requis pour imprimer CribSense. Si vous n'avez pas accès à une imprimante 3D avec ce volume de construction, vous pouvez utiliser une impression 3D en ligne service (comme Shapeways ou Sculpteo) pour imprimer CribSense. La résolution d'impression minimale est de 0,015". Si vous utilisez une imprimante 3D de type fabrication à filament fusionné, cela signifie que le diamètre de votre buse doit être de 0,015" ou moins. Les imprimantes avec des résolutions d'impression inférieures (diamètres de buse plus grands) peuvent fonctionner, mais le Raspberry Pi peut ne pas s'intégrer dans le châssis. Nous recommandons le PLA (acide polylactique) comme matériau d'impression préféré. D'autres plastiques peuvent fonctionner, mais le Raspberry Pi peut ne pas rentrer dans le boîtier si le coefficient de dilatation thermique du plastique choisi est supérieur à celui du PLA. Si votre imprimante 3D a un plaque de construction chauffée, éteignez le radiateur avant de continuer.

L'orientation du modèle sur la plaque de construction de votre imprimante est essentielle pour une impression réussie. Ces modèles ont été soigneusement conçus pour qu'ils n'aient pas besoin d'être imprimés avec un support, ce qui permet d'économiser du plastique et d'améliorer la qualité d'impression. Avant de continuer, téléchargez les fichiers 3D pour le boîtier et la couverture. Lors de l'impression de ces modèles, le col de CribSense doit reposer à plat sur la plaque de construction. Cela garantit que tous les angles de porte-à-faux sur les modèles ne dépassent pas 45 degrés, éliminant ainsi le besoin de matériel de support. Pour obtenir des instructions sur l'orientation des modèles 3D dans le volume de construction de votre imprimante, veuillez vous référer au manuel d'instructions fourni avec votre imprimante 3D. Des exemples d'orientation de construction du boîtier et du couvercle sont présentés ci-dessus.

En plus de mettre le col de CribSense à plat contre la plaque de construction, vous remarquerez peut-être que les modèles pivotent autour de l'axe vertical. Cela peut être nécessaire pour adapter le modèle à l'intérieur du volume de construction de votre imprimante 3D. Cette rotation est facultative si la longueur de votre volume de construction est suffisamment longue pour accueillir CribSense.

Étape 6: Préparation de votre matériel: Assemblage

Préparation de votre matériel: assemblage
Préparation de votre matériel: assemblage
Préparation de votre matériel: assemblage
Préparation de votre matériel: assemblage
Préparation de votre matériel: assemblage
Préparation de votre matériel: assemblage
Préparation de votre matériel: assemblage
Préparation de votre matériel: assemblage

Une fois que vous avez tout le matériel prêt, vous pouvez commencer l'assemblage. N'importe quelle colle peut être utilisée dans ce processus, mais nous recommandons la colle chaude pour deux raisons principales. La colle chaude sèche rapidement, vous n'avez donc pas besoin d'attendre longtemps pour que la colle sèche. De plus, la colle chaude est amovible en cas d'erreur. Pour enlever la colle chaude séchée, faites tremper la colle chaude dans de l'alcool à friction (isopropylique). Nous recommandons une concentration de 90 % ou plus, mais une concentration de 70 % fonctionnera toujours. Tremper la colle chaude séchée dans de l'alcool isopropylique affaiblira le lien entre la colle et la surface sous-jacente, vous permettant de décoller la colle proprement. Lors du trempage de la colle dans de l'alcool isopropylique, le Raspberry Pi doit être éteint et débranché. Assurez-vous de tout laisser sécher avant de réappliquer de la colle chaude et de démarrer le Raspberry Pi.

Toutes les images de ces étapes sont dans l'ordre et suivent les étapes du texte.

  1. Insérez le Raspberry Pi dans le châssis. Vous devrez le plier un peu pour faire entrer le port audio, mais une fois inséré, la prise audio le maintiendra en place. Une fois qu'il est en place, assurez-vous que tous les ports sont toujours accessibles (par exemple, vous pouvez brancher le câble d'alimentation).
  2. Ensuite, utilisez de la colle chaude pour fixer le Pi en place et fixez la caméra au Pi. Il y a aussi des trous de vis si vous préférez les utiliser.
  3. Maintenant, collez la LED et la caméra sur le capot avant (photo). Commencez par coller à chaud la caméra NoIR sur le trou de la caméra. Assurez-vous que la caméra est bien ajustée et alignée avec le châssis. N'utilisez pas trop de colle; sinon, vous ne pourrez pas installer l'appareil photo dans le boîtier principal. Assurez-vous d'allumer le Pi et jetez un œil à la caméra (`raspistill -v`, par exemple) pour vous assurer qu'elle est bien inclinée et a un bon champ de vision. Si ce n'est pas le cas, retirez la colle chaude et repositionnez-la.
  4. Ensuite, collez la LED IR au trou sur le col du couvercle. Le cou est à un angle de 45 degrés pour éclairer latéralement le berceau, ce qui entraîne plus d'ombres dans les situations de faible luminosité. Cela ajoute plus de contraste à l'image, ce qui facilite la détection de mouvement.
  5. Fixez les fils LED IR aux broches d'en-tête du Raspberry Pi comme indiqué sur l'image schématique.
  6. Emballez les câbles dans le châssis de manière à ne pas les froisser ou les fatiguer. Nous avons fini par plier le câble en accordéon parce que le câble flexible de notre appareil photo était trop long.
  7. Avec tout rentré, collez à chaud sur les bords où les deux pièces se rencontrent, les scellant en place.

Étape 7: Étalonnage

Image
Image
Étalonnage
Étalonnage

Des détails sur les paramètres de configuration sont disponibles dans la documentation du référentiel CribSense. Regardez également la vidéo pour voir un exemple de la façon dont vous pouvez calibrer CribSense après avoir tout configuré.

Voici un exemple du fichier de configuration:

[io]; Configuration des E/S

; input = path_to_file; Fichier d'entrée à utiliser input_fps = 15; fps d'entrée (40 max, 15 recommandé si vous utilisez la caméra) full_fps = 4.5; fps auquel les images complètes peuvent être traitées crop_fps = 15; fps auquel les images recadrées peuvent être traitées camera = 0; Caméra à utiliser largeur = 640; Largeur de la vidéo d'entrée hauteur = 480; Hauteur de la vidéo d'entrée time_to_alarm = 10; Combien de secondes attendre sans mouvement avant l'alarme. [recadrage]; Paramètres de recadrage adaptatifs crop = true; Recadrer ou non frames_to_settle = 10; # trames à attendre après la réinitialisation avant de traiter roi_update_interval = 800; # frames entre le recalcul du ROI roi_window = 50; # images à surveiller avant de sélectionner ROI [motion]; Paramètres de détection de mouvement erode_dim = 4; dimension du noyau d'érosion dilate_dim = 60; dimension du noyau dilaté diff_threshold = 8; différence abs nécessaire avant de reconnaître la durée du changement = 1; # images pour maintenir le mouvement avant de signaler true pixel_threshold = 5; # pixels qui doivent être différents pour signaler comme mouvement show_diff = false; afficher le diff entre 3 images [grossissement]; Paramètres d'agrandissement vidéo amplifier = 25; Le % d'amplification souhaité du seuil bas = 0,5; La basse fréquence de la bande passante. seuil haut = 1,0; La haute fréquence de la bande passante. seuil = 50; Le seuil de phase en % de pi. show_magnification = false; Afficher les images de sortie de chaque grossissement [debug] print_times = false; Imprimer les temps d'analyse

L'étalonnage de l'algorithme est un effort itératif, sans solution exacte. Nous vous encourageons à expérimenter différentes valeurs, en les combinant avec les fonctionnalités de débogage, pour trouver la combinaison de paramètres la plus adaptée à votre environnement. Avant de commencer l'étalonnage, assurez-vous que show_diff et show_magnification sont définis sur true.

À titre indicatif, l'augmentation de l'amplification et des valeurs phase_threshold augmente la quantité de grossissement appliquée à la vidéo d'entrée. Vous devez modifier ces valeurs jusqu'à ce que vous voyiez clairement le mouvement que vous souhaitez suivre dans l'image vidéo. Si vous voyez des artefacts, réduire le seuil_phase tout en conservant la même amplification peut aider.

Les paramètres de détection de mouvement aident à compenser le bruit. Lors de la détection des régions de mouvement, erode_dim et dilate_dim sont utilisés pour dimensionner les dimensions des noyaux OpenCV utilisés pour éroder et dilater le mouvement afin que le bruit soit d'abord érodé, puis le signal de mouvement restant est considérablement dilaté pour rendre les régions de mouvement évidentes. Ces paramètres peuvent également avoir besoin d'être réglés si votre berceau est dans un réglage très contrasté. En général, vous aurez besoin d'un erode_dim plus élevé pour les paramètres de contraste élevé et d'un erode_dim inférieur pour un contraste faible.

Si vous exécutez CribSense avec show_diff = true et que vous remarquez qu'une trop grande partie de la sortie de l'accumulateur est blanche, ou qu'une partie complètement indépendante de la vidéo est détectée comme un mouvement (par exemple une lampe vacillante), augmentez erode_dim jusqu'à ce que seule la partie de la vidéo correspondant à votre bébé est la plus grande section de blanc. La première figure montre un exemple où la dimension d'érosion est trop faible pour la quantité de mouvement dans le cadre, tandis que la suivante montre un cadre bien calibré.

Une fois que cela a été calibré, assurez-vous que le pixel_threshold est défini sur une valeur telle que "Pixel Movement" ne rapporte que les valeurs maximales du mouvement des pixels, et pas toutes (ce qui signifie que vous devez supprimer le bruit). Idéalement, vous verrez une sortie comme celle-ci dans votre terminal, où il existe un modèle périodique clair correspondant au mouvement:

[info] Mouvement des pixels: 0 [info] Estimation du mouvement: 1,219812 Hz

[info] Mouvement du pixel: 0 [info] Estimation du mouvement: 1,219812 Hz [info] Mouvement du pixel: 0 [info] Estimation du mouvement: 1,219812 Hz [info] Mouvement du pixel: 0 [info] Estimation du mouvement: 1,219812 Hz [info] Mouvement du pixel: 44 [info] Estimation du mouvement: 1,219812 Hz [info] Mouvement du pixel: 0 [info] Estimation du mouvement: 1,219812 Hz [info] Mouvement du pixel: 161 [info] Estimation du mouvement: 1,219812 Hz [info] Mouvement du pixel: 121 [info] Estimation du mouvement: 0,841416 Hz [info] Mouvement du pixel: 0 [info] Estimation du mouvement: 0,841416 Hz [info] Mouvement du pixel: 86 [info] Estimation du mouvement: 0,841416 Hz [info] Mouvement du pixel: 0 [info] Estimation du mouvement: 0,841416 Hz [info] Mouvement du pixel: 0 [info] Estimation du mouvement: 0,841416 Hz [info] Mouvement du pixel: 0 [info] Estimation du mouvement: 0,841416 Hz [info] Mouvement du pixel: 0 [info] Estimation du mouvement: 0,841416 Hz [info] Mouvement du pixel: 0 [info] Estimation du mouvement: 0,841416 Hz [info] Mouvement du pixel: 0 [info] Estimation du mouvement: 0,841416 Hz [info] Mouvement du pixel: 0 [info] Estimation du mouvement: 0,841416 Hz [info] Déplacement du pixel ent: 0 [info] Estimation du mouvement: 0,841416 Hz [info] Mouvement du pixel: 0 [info] Estimation du mouvement: 0,841416 Hz [info] Mouvement du pixel: 0 [info] Estimation du mouvement: 0,841416 Hz [info] Mouvement du pixel: 0 [info] Estimation du mouvement: 0,841416 Hz [info] Mouvement du pixel: 0 [info] Estimation du mouvement: 0,841416 Hz [info] Mouvement du pixel: 0 [info] Estimation du mouvement: 0,841416 Hz [info] Mouvement du pixel: 0 [info] Estimation du mouvement: 0,841416 Hz [info] Mouvement du pixel: 0 [info] Estimation du mouvement: 0,841416 Hz [info] Mouvement du pixel: 97 [info] Estimation du mouvement: 0,841416 Hz [info] Mouvement du pixel: 74 [info] Estimation du mouvement: 0,839298 Hz [info] Pixel Mouvement: 0 [info] Estimation du mouvement: 0,839298 Hz [info] Mouvement du pixel: 60 [info] Estimation du mouvement: 0,839298 Hz [info] Mouvement du pixel: 0 [info] Estimation du mouvement: 0,839298 Hz [info] Mouvement du pixel: 0 [info] Estimation du mouvement: 0,839298 Hz [info] Mouvement du pixel: 0 [info] Estimation du mouvement: 0,839298 Hz [info] Mouvement du pixel: 0 [info] Estimation du mouvement: 0,839298 Hz [info] Mouvement du pixel: 48 [info] Mouvement Estimation: 0,839298 Hz [info] Mouvement du pixel: 38 [info] Estimation du mouvement: 0,839298 Hz [info] Mouvement du pixel: 29 [info] Estimation du mouvement: 0,839298 Hz [info] Mouvement du pixel: 28 [info] Estimation du mouvement: 0,839298 Hz [info] Mouvement du pixel: 22 [info] Estimation du mouvement: 0,839298 Hz [info] Mouvement du pixel: 0 [info] Estimation du mouvement: 0,839298 Hz [info] Mouvement du pixel: 0 [info] Estimation du mouvement: 0,839298 Hz [info] Mouvement du pixel: 0 [info] Estimation du mouvement: 0,839298 Hz [info] Mouvement du pixel: 0 [info] Estimation du mouvement: 0,839298 Hz

Si votre sortie ressemble plus à ceci:

[info] Mouvement des pixels: 921 [info] Estimation du mouvement: 1,352046 Hz

[info] Mouvement du pixel: 736 [info] Estimation du mouvement: 1,352046 Hz [info] Mouvement du pixel: 666 [info] Estimation du mouvement: 1,352046 Hz [info] Mouvement du pixel: 663 [info] Estimation du mouvement: 1,352046 Hz [info] Mouvement du pixel: 1196 [info] Estimation du mouvement: 1,352046 Hz [info] Mouvement du pixel: 1235 [info] Estimation du mouvement: 1,352046 Hz [info] Mouvement du pixel: 1187 [info] Estimation du mouvement: 1,456389 Hz [info] Mouvement du pixel: 1115 [info] Estimation du mouvement: 1,456389 Hz [info] Mouvement du pixel: 959 [info] Estimation du mouvement: 1,456389 Hz [info] Mouvement du pixel: 744 [info] Estimation du mouvement: 1,456389 Hz [info] Mouvement du pixel: 611 [info] Estimation du mouvement: 1,456389 Hz [info] Mouvement du pixel: 468 [info] Estimation du mouvement: 1,456389 Hz [info] Mouvement du pixel: 371 [info] Estimation du mouvement: 1,456389 Hz [info] Mouvement du pixel: 307 [info] Estimation du mouvement: 1,456389 Hz [info] Mouvement du pixel: 270 [info] Estimation du mouvement: 1,456389 Hz [info] Mouvement du pixel: 234 [info] Estimation du mouvement: 1,456389 Hz [info] Mouvement du pixel: 197 [info] Estimation du mouvement: 1,456389 Hz [info] Mouvement du pixel: 179 [info] Estimation du mouvement: 1,456389 Hz [info] Mouvement du pixel: 164 [info] Estimation du mouvement: 1,456389 Hz [info] Mouvement du pixel: 239 [info] Estimation du mouvement: 1,456389 Hz [info] Mouvement du pixel: 733 [info] Estimation du mouvement: 1,456389 Hz [info] Mouvement du pixel: 686 [info] Estimation du mouvement: 1,229389 Hz [info] Mouvement du pixel: 667 [info] Estimation du mouvement: 1,229389 Hz [info] Mouvement du pixel: 607 [info] Estimation du mouvement: 1,229389 Hz [info] Mouvement du pixel: 544 [info] Estimation du mouvement: 1,229389 Hz [info] Mouvement du pixel: 499 [info] Estimation du mouvement: 1,229389 Hz [info] Mouvement du pixel: 434 [info] Estimation du mouvement: 1,229389 Hz [info] Mouvement du pixel: 396 [info] Estimation du mouvement: 1,229389 Hz [info] Mouvement du pixel: 375 [info] Estimation du mouvement: 1,229389 Hz [info] Mouvement du pixel: 389 [info] Estimation du mouvement: 1,229389 Hz [info] Mouvement du pixel: 305 [info] Estimation du mouvement: 1,312346 Hz [info] Mouvement du pixel: 269 [info] Estimation du mouvement: 1,312346 Hz [info] Mouvement du pixel: 1382 [info] Motion E estimation: 1,312346 Hz [info] Mouvement du pixel: 1086 [info] Estimation du mouvement: 1,312346 Hz [info] Mouvement du pixel: 1049 [info] Estimation du mouvement: 1,312346 Hz [info] Mouvement du pixel: 811 [info] Estimation du mouvement: 1,312346 Hz [info] Mouvement du pixel: 601 [info] Estimation du mouvement: 1,312346 Hz [info] Mouvement du pixel: 456 [info] Estimation du mouvement: 1,312346 Hz

Ajustez pixel_threshold et diff_threshold jusqu'à ce que seuls les pics soient vus, et le mouvement des pixels est de 0 sinon.

Étape 8: Démonstration

Image
Image

Voici une petite démo du fonctionnement de CribSense. Vous devrez imaginer que celui-ci est fixé sur le côté d'un berceau.

Lorsque vous placez CribSense au-dessus de votre berceau, vous devez optimiser la distance entre le bébé et la caméra. Idéalement, la poitrine de votre bébé remplira moins d'1/3 du cadre. L'enfant ne doit pas être trop loin, sinon la vidéo basse résolution aura du mal à trouver suffisamment de détails pour être agrandie. Si la caméra est trop proche, la caméra peut ne pas voir votre enfant s'il roule ou sort du cadre. De même, si l'enfant est sous une couverture « sous tente », où le contact entre la couverture et la poitrine de l'enfant est limité, il peut être difficile de détecter un mouvement. Rentrez-les bien !

Vous voudrez également tenir compte de la situation d'éclairage autour de votre berceau. Si votre berceau est juste à côté d'une fenêtre, vous pourriez avoir des ombres en mouvement ou des valeurs de lumière changeantes car le soleil est bloqué par des nuages, ou un mouvement se produit à l'extérieur de la fenêtre. Quelque part avec un éclairage cohérent est le meilleur.

Avec un peu plus de travail, nous pensons que quelqu'un pourrait améliorer notre logiciel afin que l'étalonnage soit un processus beaucoup plus fluide. À l'avenir, des fonctionnalités supplémentaires telles que les notifications push pourraient également être ajoutées.

Étape 9: Dépannage

Vous pouvez rencontrer quelques problèmes courants lors de la configuration de CribSense. Par exemple, avoir du mal à créer/exécuter le programme ou ne pas entendre le son. N'oubliez pas que CribSense n'est pas un moniteur pour bébé parfaitement fiable. Nous serions heureux de recevoir des contributions sur notre référentiel GitHub à mesure que vous apportez des améliorations !

Voici quelques conseils de dépannage que nous avons rassemblés lors de la création de CribSense.

Aucune alarme ne joue

  • Vos haut-parleurs fonctionnent-ils ?
  • Pouvez-vous jouer d'autres sons du Pi en dehors de l'alarme CribSense ?
  • Si votre Pi essaie de lire l'audio via HDMI plutôt que le port audio ? Vérifiez la page Raspberry Pi Audio Configuration pour vous assurer que vous avez sélectionné la bonne sortie.
  • Le logiciel CribSense détecte-t-il le mouvement ? Si CribSense s'exécute en arrière-plan, vous pouvez vérifier avec journalctl -f dans un terminal.
  • Si CribSense détecte beaucoup de mouvement, vous devrez peut-être calibrer CribSense.

La LED IR ne fonctionne pas

  • Pouvez-vous voir une légère couleur rouge lorsque vous regardez la LED IR ? Un léger anneau rouge doit être visible lorsque la LED est allumée.
  • Vérifiez la polarité des connexions. Si +5V et GND sont inversés, cela ne fonctionnera pas.
  • Connectez la LED à une alimentation avec une limite de tension/courant de 5 V/0,5 A. Normalement, il devrait consommer 0,2A à 5V. Si ce n'est pas le cas, votre LED peut mal fonctionner.

CribSense détecte un mouvement même s'il n'y a pas de bébé

  • Avez-vous correctement calibré CribSense ?
  • N'oubliez pas que CribSense recherche simplement des changements dans les valeurs de pixels

    • Y a-t-il des ombres qui bougent dans le cadre ?
    • Y a-t-il un éclairage vacillant ou changeant ?
    • Le CribSense est-il monté sur une surface stable (c'est-à-dire quelque chose qui ne tremblera pas si des personnes marchent à côté) ?
    • Y a-t-il d'autres sources de mouvement dans le cadre (miroirs captant les reflets, etc.) ?

CribSense ne détecte PAS de mouvement même s'il y a du mouvement

  • Avez-vous correctement calibré CribSense ?
  • Y a-t-il quelque chose dans le chemin de la caméra?
  • Pouvez-vous vous connecter à la caméra depuis Raspberry Pi ? Vérifiez en exécutant raspistill -v dans un terminal pour ouvrir la caméra sur le Pi pendant quelques secondes.
  • Si vous regardez sudo systemctl status cribsense, CribSense est-il réellement en cours d'exécution ?
  • Votre bébé est-il sous une couverture qui est « tentée » pour qu'il n'entre pas en contact avec l'enfant ? S'il y a des espaces d'air importants entre la couverture et l'enfant, la couverture peut masquer le mouvement.
  • Pouvez-vous voir le mouvement si vous amplifiez davantage la vidéo ?
  • Pouvez-vous voir le mouvement si vous réglez les fréquences de coupure basse et haute ?
  • Si cela se produit uniquement en basse lumière, vous êtes-vous assuré que votre étalonnage fonctionne en basse lumière ?

CribSense ne construit pas

As-tu installé toutes les dépendances ?

Je ne peux pas exécuter cribsense à partir de la ligne de commande

  • Avez-vous accidentellement mal tapé quelque chose lorsque vous avez exécuté./autogen.sh --prefix=/usr --sysconfdir=/etc --disable-debug pendant la construction de votre logiciel ?
  • Est-ce que cribsense est présent dans /usr/bin ?
  • Quel chemin est fourni si vous exécutez « quel cribsense » ?

Conseillé: