Sommario:

CribSense: un baby monitor senza contatto basato su video: 9 passaggi (con immagini)
CribSense: un baby monitor senza contatto basato su video: 9 passaggi (con immagini)

Video: CribSense: un baby monitor senza contatto basato su video: 9 passaggi (con immagini)

Video: CribSense: un baby monitor senza contatto basato su video: 9 passaggi (con immagini)
Video: Позвольте мне дать вам Raspberry Pi [Обновление для создателя № 13] 2024, Novembre
Anonim
CribSense: un baby monitor senza contatto basato su video
CribSense: un baby monitor senza contatto basato su video
CribSense: un baby monitor senza contatto basato su video
CribSense: un baby monitor senza contatto basato su video

CribSense è un baby monitor senza contatto basato su video che puoi realizzare da solo senza spendere troppo

CribSense è un'implementazione C++ di Ingrandimento video ottimizzata per funzionare su un Raspberry Pi 3 Modello B. Durante un fine settimana, puoi configurare il tuo baby monitor da culla che emette un allarme se il tuo bambino smette di muoversi. Come bonus, tutto il software è gratuito per scopi non commerciali ed è facilmente estensibile.

Il repository completo contenente i file sorgente e la documentazione è disponibile su

Sebbene pensiamo che CribSense sia piuttosto divertente, è importante ricordare che questo non è in realtà un dispositivo di sicurezza certificato e infallibile. Cioè, deve essere configurato correttamente e avere un ambiente ben controllato per funzionare. Ad esempio, se non è calibrato bene e/o l'ambiente nel video non è favorevole all'ingrandimento del video, potresti non essere in grado di usarlo. L'abbiamo realizzato come un progetto divertente per vedere come avremmo potuto far funzionare software pesanti come l'ingrandimento video su hardware a calcolo limitato come un Raspberry Pi. Qualsiasi prodotto reale richiederebbe molti più test di quelli che abbiamo fatto. Quindi, se usi questo progetto, prendilo per quello che è: una breve esplorazione dell'ingrandimento video su un Pi.

Di cosa avrai bisogno:

Raspberry Pi + Fotocamera + Strumenti di configurazione:

  • Raspberry Pi 3 Modello B
  • Alimentatore micro USB da 5 V 2,5 A
  • Modulo fotocamera Raspberry Pi NoIR V2
  • Scheda MicroSD (abbiamo usato una scheda di classe 10 da 16 GB)
  • Cavo flessibile per fotocamera Raspberry Pi (12")
  • Altoparlanti con ingresso da 3,5 mm
  • Monitor HDMI
  • Tastiera USB
  • Mouse USB
  • [opzionale] Dissipatore Raspberry Pi (se sei preoccupato per il calore, puoi attaccarne uno sul tuo Pi)

Circuito LED IR per funzionamento in condizioni di scarsa illuminazione:

  • [3x] Diodi 1N4001
  • Resistenza da 1 Ohm, 1W
  • LED IR 1W
  • 2 fili per l'aggancio del LED al Pi
  • Saldatore

Telaio:

  • Accesso a una stampante 3D (volume minimo di costruzione = 9,9" L x 7,8" P x 5,9" A) per stampare il nostro telaio. Tuttavia, sentiti libero di costruirne uno tuo.
  • Colla (va bene qualsiasi tipo di colla, ma per la prototipazione è consigliata la colla a caldo).

Passaggio 1: prerequisiti

Prima di iniziare la nostra guida passo passo, dovresti aver già installato l'ultima versione di Raspbian sulla tua scheda SD e assicurato che il tuo Pi sia funzionante. Sarà inoltre necessario abilitare il modulo della fotocamera prima di poter accedere alla fotocamera.

Passaggio 2: installazione del software CribSense

CribSense dipende da autoconf, libtool, OpenCV e libcanberra, nonché da strumenti software comuni.

  • autoconf e libtool vengono utilizzati per configurare automaticamente i makefile e creare script per CribSense su molte piattaforme (come Linux, OSX e Raspberry Pi).
  • OpenCV è un potente pacchetto di visione artificiale utilizzato per eseguire l'elaborazione delle immagini ed è la base dell'ingrandimento video e del codice di rilevamento del movimento. Ha un ottimo supporto, è facile da usare e ha buone prestazioni.
  • libcanberra è una semplice libreria per riprodurre suoni di eventi. Viene utilizzato per riprodurre il suono della sveglia per CribSense.

Visita le loro singole pagine per ottenere tutti i dettagli.

Installali aprendo un terminale sul tuo Pi ed eseguendo:

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

Successivamente è necessario impostare il driver della fotocamera per il caricamento automatico aggiungendo bcm2835-v4l2 a `/etc/modules-load.d/modules.conf`. Il tuo module.conf dovrebbe assomigliare a questo:

# /etc/modules: moduli del kernel da caricare all'avvio.

# # Il file contiene i nomi dei moduli del kernel che dovrebbero essere caricati # all'avvio, uno per riga. Le righe che iniziano con "#" vengono ignorate. i2c-dev bcm2835-v4l2

Una volta che il file è stato modificato, devi riavviare il tuo Pi. Questo driver è utilizzato da CribSense per estrarre direttamente i fotogrammi dalla fotocamera NoIR.

Quindi, puoi clonare il repository eseguendo:

git clone

Quindi, spostati nel repository e crea il software eseguendo

cd CribSense

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

Congratulazioni, hai installato tutto il software necessario!

Configurazione

CribSense è personalizzabile tramite un semplice file di configurazione INI. Dopo aver eseguito `make install`, il file di configurazione si trova in /etc/cribsense/config.ini. Puoi visualizzare e modificare questi parametri eseguendo

sudo nano /etc/cribsense/config.ini

Una breve spiegazione di ciascun parametro è fornita nella configurazione predefinita, ma maggiori dettagli sono disponibili su https://lukehsiao.github.io/CribSense/setup/config/. Discuteremo anche della calibrazione e della configurazione alla fine di questa guida.

Running CribSense

CribSense è stato progettato per essere eseguito all'avvio utilizzando un servizio systemd. Mentre sei connesso al tuo Raspberry Pi con la tastiera e il mouse, dovresti assicurarti che i parametri di configurazione funzionino per la tua culla. Potrebbe essere necessario regolare nuovamente questi parametri se lo si sposta.

Mentre stai regolando i parametri, puoi eseguire cribsense a piacimento dalla riga di comando eseguendo

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

Una volta che sei soddisfatto, puoi abilitare l'esecuzione automatica eseguendo

sudo systemctl abilita cribsense

Puoi impedire a cribsense di funzionare automaticamente correndo

sudo systemctl disabilita cribsense

Panoramica del software

Il software CribSense è il cuore e l'anima di questo progetto. Abbiamo visto alcune delle fantastiche demo di ingrandimento video del MIT e volevamo provare a eseguire un algoritmo simile su un Raspberry Pi. Ciò ha richiesto un'accelerazione di oltre 10 volte dal lavoro di tbl3rd sulla sua implementazione C++ dell'ingrandimento video per funzionare in tempo reale sul Pi. Le ottimizzazioni richieste hanno guidato la nostra progettazione del software.

Ad un livello elevato, CribSense scorre ripetutamente una macchina a stati software. Innanzitutto, divide ogni fotogramma video in scala di grigi 640x480 in 3 sezioni orizzontali (640x160) per una migliore posizione della cache. Quindi ingrandisce ogni banda in un thread separato e monitora il movimento visto nel fotogramma. Dopo aver monitorato il movimento per diversi secondi, determina l'area di movimento principale e ritaglia il fotogramma su di essa. Ciò riduce il numero totale di pixel che l'algoritmo deve elaborare. Quindi, CribSense monitora la quantità di movimento nel flusso ritagliato e emette un allarme se non viene percepito alcun movimento per un periodo di tempo configurabile. Periodicamente, CribSense aprirà di nuovo la sua vista per monitorare l'intero fotogramma nel caso in cui il bambino si sia spostato e ritagli intorno alla nuova area di movimento primaria.

L'ingrandimento video viene utilizzato per aumentare il rapporto segnale/rumore di movimenti sottili come la respirazione infantile. Non sarebbe necessario per movimenti più ampi, ma può aiutare per movimenti molto sottili. Nota che la nostra implementazione è vagamente basata sull'algoritmo descritto nei documenti del MIT e non funziona così bene come il loro codice proprietario.

Ottimizzazioni come il multithreading, il ritaglio adattivo e le ottimizzazioni del compilatore ci hanno dato una velocità di circa 3x, 3x e 1.2x, rispettivamente. Questo ci ha permesso di ottenere l'accelerazione di 10 volte necessaria per l'esecuzione in tempo reale sul Pi.

Tutti i dettagli possono essere trovati nella pagina Architettura Software del repository CribSense.

Se sei interessato all'ingrandimento video, visita la pagina del MIT.

Passaggio 3: preparare l'hardware: collegare la fotocamera

Preparare l'hardware: collegare la fotocamera
Preparare l'hardware: collegare la fotocamera

Innanzitutto, scambia il cavo da 6 "in dotazione con la fotocamera con il cavo da 12". Per fare ciò, puoi semplicemente seguire questo tutorial su come sostituire il cavo della fotocamera.

In sintesi, vedrai una linguetta push/pull sul retro della fotocamera che puoi estrarre per rilasciare il cavo flessibile. Sostituire il cavo corto con quello più lungo e reinserire la linguetta.

Noterai che nelle nostre immagini abbiamo un cavo da 24". Era troppo lungo. Il cavo da 12" nell'elenco dei materiali è di una lunghezza molto più ragionevole.

Passaggio 4: preparazione dell'hardware: LED IR

Preparare l'hardware: LED IR
Preparare l'hardware: LED IR
Preparare l'hardware: LED IR
Preparare l'hardware: LED IR
Preparare l'hardware: LED IR
Preparare l'hardware: LED IR

CribSense è relativamente facile da costruire ed è in gran parte costituito da parti disponibili in commercio. Come si vede nella figura sopra, ci sono 5 componenti hardware principali, di cui solo 2 realizzati su misura. Questa pagina illustrerà come costruire il circuito LED IR e la pagina successiva descriverà come costruire lo chassis.

Per questa parte, devi procurarti il saldatore, i fili, i diodi, il LED IR e la resistenza. Costruiremo il circuito mostrato nella seconda figura. Se sei nuovo nella saldatura, ecco una bella guida che ti raggiungerà. Mentre questa guida discute la saldatura a foro passante, è possibile utilizzare le stesse tecniche di base per collegare insieme questi componenti come mostrato nella terza figura.

Per fornire un'illuminazione adeguata di notte, utilizziamo un LED IR, che non è visibile all'occhio umano ma visibile alla telecamera NoIR. Il LED IR non consuma molta energia rispetto al Raspberry Pi, quindi lasciamo il LED IR acceso per semplicità.

Nelle versioni precedenti del Pi, l'uscita di corrente massima di questi pin era di 50 mA. Il Raspberry Pi B+ lo ha aumentato a 500 mA. Tuttavia, per semplicità utilizziamo solo i pin di alimentazione da 5 V, che possono fornire fino a 1,5 A. La tensione diretta del LED IR è di circa 1,7~1,9 V secondo le nostre misurazioni. Sebbene il LED IR possa assorbire 500 mA senza danneggiarsi, riduciamo la corrente a circa 200 mA per ridurre il calore e il consumo energetico complessivo. I risultati sperimentali mostrano anche che il LED IR è sufficientemente luminoso con 200 mA di corrente in ingresso. Per colmare il divario tra 5V e 1,9V, utilizziamo tre diodi 1N4001 e un resistore da 1 Ohm in serie con il LED IR. La caduta di tensione sul filo, sui diodi e sul resistore è rispettivamente di circa 0,2 V, 0,9 V (per ciascuno) e 0,2 V. Pertanto, la tensione sul LED IR è 5 V - 0,2 V - (3 * 0,9 V) - 0,2 V = 1,9 V. La dissipazione del calore sul LED è 0,18 W e 0,2 W sul resistore, tutti entro i valori massimi.

Ma non abbiamo ancora finito! Per adattarsi meglio allo chassis stampato in 3D, vogliamo che la lente LED IR sporga dal nostro chassis e che la scheda PCB sia a filo con il foro. Il piccolo fotodiodo in basso a destra si metterà in mezzo. Per rimediare, lo dissaldiamo e lo giriamo sul lato opposto del tabellone come mostrato nelle ultime due foto. Il fotodiodo non è necessario poiché vogliamo che il LED sia sempre acceso. Il semplice passaggio al lato opposto lascia invariato il circuito LED originale.

Quando si saldano i fili, assicurarsi che i fili siano lunghi almeno 12 pollici e abbiano intestazioni dei pin che possano scivolare sui GPIO del Pi.

Passaggio 5: preparazione dell'hardware: chassis

Preparare l'hardware: chassis
Preparare l'hardware: chassis
Preparare l'hardware: chassis
Preparare l'hardware: chassis
Preparare l'hardware: chassis
Preparare l'hardware: chassis

File sorgenti:

  • Custodia STL
  • Case Makerbot
  • Copertina STL
  • Cover Makerbot

Abbiamo utilizzato un semplice chassis stampato in 3D per ospitare il Pi, la fotocamera e il LED. L'uso del nostro telaio è facoltativo, sebbene consigliato per impedire ai bambini piccoli di toccare i circuiti elettronici esposti. Ogni culla è diversa, quindi il nostro telaio non include una staffa di montaggio. Diverse opzioni di montaggio potrebbero includere:

  • Fascette
  • Doppia serratura 3M
  • Velcro
  • Nastro

Se hai accesso a MakerBot Replicator (5a generazione), puoi semplicemente scaricare i file.makerbot per la custodia e la copertina su MakerBot Replicator e stampare. Occorrono circa 6 ore per stampare la custodia e 3 ore per stampare la copertina. Se stai utilizzando un diverso tipo di stampante 3D, continua a leggere.

Per stampare CribSense è necessario un volume di costruzione minimo di 9,9" (L) x 7,8" (L) x 5,9" (A). Se non hai accesso a una stampante 3D con questo volume di costruzione, puoi utilizzare una stampa 3D online servizio (come Shapeways o Sculpteo) per stampare CribSense. La risoluzione di stampa minima è 0,015". Se stai utilizzando una stampante 3D con fabbricazione a filamento fuso, significa che il diametro dell'ugello deve essere 0,015 "o più piccolo. Le stampanti con risoluzioni di stampa inferiori (diametri dell'ugello più grandi) potrebbero funzionare, ma il Raspberry Pi potrebbe non adattarsi allo chassis. Consigliamo il PLA (acido polilattico) come materiale di stampa preferito. Altre plastiche potrebbero funzionare, ma il Raspberry Pi potrebbe non adattarsi alla custodia se il coefficiente di espansione termica della plastica scelta è maggiore di quello del PLA. Se la tua stampante 3D ha un piastra di costruzione riscaldata, spegnere il riscaldatore prima di procedere.

L'orientamento del modello sulla piastra di costruzione della stampante è fondamentale per una stampa di successo. Questi modelli sono stati progettati con cura in modo da non dover essere stampati con materiale di supporto, risparmiando così plastica e migliorando la qualità di stampa. Prima di procedere, scarica i file 3D per la custodia e la copertina. Quando si stampano questi modelli, il collo di CribSense deve essere piatto sulla piastra di costruzione. Ciò garantisce che tutti gli angoli di sbalzo sui modelli non superino i 45 gradi, eliminando così la necessità di materiale di supporto. Per istruzioni sull'orientamento dei modelli 3D nel volume di costruzione della stampante, fare riferimento al manuale di istruzioni fornito con la stampante 3D. Gli esempi per l'orientamento di costruzione della custodia e della copertura sono mostrati sopra.

Oltre a mettere il collo di CribSense piatto contro la piastra di costruzione, potresti notare che i modelli vengono ruotati attorno all'asse verticale. Questo potrebbe essere necessario per adattare il modello all'interno del volume di costruzione della stampante 3D. Questa rotazione è facoltativa se la lunghezza del volume di build è sufficientemente lunga da ospitare CribSense.

Passaggio 6: preparazione dell'hardware: assemblaggio

Preparare l'hardware: montaggio
Preparare l'hardware: montaggio
Preparare l'hardware: montaggio
Preparare l'hardware: montaggio
Preparare l'hardware: montaggio
Preparare l'hardware: montaggio
Preparare l'hardware: montaggio
Preparare l'hardware: montaggio

Una volta che tutto l'hardware è pronto, puoi iniziare l'assemblaggio. Qualsiasi colla può essere utilizzata in questo processo, ma consigliamo la colla a caldo per due motivi principali. La colla a caldo si asciuga rapidamente, quindi non è necessario attendere molto tempo affinché la colla si asciughi. Inoltre, la colla a caldo è rimovibile in caso di errore. Per rimuovere la colla a caldo secca, immergere la colla a caldo in alcool (isopropilico). Consigliamo una concentrazione del 90% o superiore, ma la concentrazione del 70% funzionerà comunque. Immergere la colla a caldo essiccata nell'alcol isopropilico indebolirà il legame tra la colla e la superficie sottostante, permettendoti di staccare la colla in modo pulito. Quando si immerge la colla nell'alcol isopropilico, il Raspberry Pi deve essere spento e scollegato. Assicurati di lasciare asciugare tutto prima di riapplicare la colla a caldo e avviare il Raspberry Pi.

Tutte le immagini per questi passaggi sono in ordine e seguono i passaggi del testo.

  1. Inserisci il Raspberry Pi nello chassis. Dovrai fletterlo un po' per inserire la porta audio, ma una volta inserito, il jack audio lo manterrà in posizione. Una volta installato, assicurati che sia ancora possibile accedere a tutte le porte (ad esempio, puoi collegare il cavo di alimentazione).
  2. Quindi, usa la colla a caldo per fissare il Pi in posizione e attaccare la fotocamera al Pi. Ci sono anche fori per le viti se preferisci usarli.
  3. Ora incolla il LED e la fotocamera sul coperchio anteriore (nella foto). Inizia incollando a caldo la fotocamera NoIR al foro della fotocamera. Assicurati che la fotocamera sia aderente e allineata al telaio. Non usare troppa colla; in caso contrario, non sarà possibile inserire la fotocamera nel case principale. Assicurati di accendere il Pi e dai un'occhiata alla fotocamera (`raspistill -v`, per esempio) per assicurarti che sia ben angolata e abbia un buon campo visivo. In caso contrario, rimuovere la colla a caldo e riposizionarla.
  4. Quindi, incollare il LED IR al foro sul collo del coperchio. Il collo è a un angolo di 45 gradi per illuminare lateralmente la culla, il che si traduce in più ombre in situazioni di scarsa illuminazione. Ciò aggiunge più contrasto all'immagine, facilitando il rilevamento del movimento.
  5. Collegare i cavi del LED IR ai pin dell'intestazione del Raspberry Pi come mostrato nell'immagine schematica.
  6. Imballare i cavi nello chassis in modo da non piegarli o sforzarli. Abbiamo finito per piegare il cavo a fisarmonica perché il cavo flessibile della nostra fotocamera era troppo lungo.
  7. Con tutto infilato, colla a caldo attorno ai bordi dove i due pezzi si incontrano, sigillandoli in posizione.

Passaggio 7: calibrazione

Image
Image
Calibrazione
Calibrazione

I dettagli sui parametri di configurazione possono essere trovati nella documentazione del repository CribSense. Guarda anche il video per vedere un esempio di come potresti calibrare CribSense dopo aver impostato tutto.

Ecco un esempio del file di configurazione:

[io]; Configurazione I/O

; input = percorso_del_file; File di input da utilizzare input_fps = 15; fps di input (40 max, 15 consigliati se si utilizza la fotocamera) full_fps = 4.5; fps a cui possono essere elaborati fotogrammi interi crop_fps = 15; fps a cui è possibile elaborare i fotogrammi ritagliati camera = 0; Camera da utilizzare larghezza = 640; Larghezza dell'altezza del video in ingresso = 480; Altezza del video in ingresso time_to_alarm = 10; Quanti secondi di attesa senza movimento prima dell'allarme. [ritaglio]; Impostazioni di ritaglio adattivo crop = true; Se ritagliare frame_to_settle = 10; # frame da attendere dopo il ripristino prima dell'elaborazione roi_update_interval = 800; # frame tra il ricalcolo della ROI roi_window = 50; # frame da monitorare prima di selezionare ROI [movimento]; Impostazioni di rilevamento del movimento erode_dim = 4; dimensione del nucleo di erosione dilate_dim = 60; dimensione del kernel dilatato diff_threshold = 8; differenza abs necessaria prima di riconoscere la durata del cambiamento = 1; # frame per mantenere il movimento prima di contrassegnare true pixel_threshold = 5; # pixel che devono essere diversi da contrassegnare come motion show_diff = false; visualizzare la differenza tra 3 fotogrammi [ingrandimento]; Impostazioni di ingrandimento video amplificare = 25; La % di amplificazione desiderata low-cutoff = 0,5; La bassa frequenza della banda passante. cutoff alto = 1.0; L'alta frequenza della banda passante. soglia = 50; La soglia di fase in % di pi. mostra_ingrandimento = falso; Mostra i fotogrammi di output di ogni ingrandimento [debug] print_times = false; Tempi di analisi della stampa

La calibrazione dell'algoritmo è uno sforzo iterativo, senza una soluzione esatta. Ti invitiamo a sperimentare vari valori, combinandoli con le funzionalità di debug, per trovare la combinazione di parametri più adatta al tuo ambiente. Prima di iniziare la calibrazione, assicurati che show_diff e show_magnification siano impostati su true.

Come linea guida, l'aumento dell'amplificazione e dei valori phase_threshold aumenta la quantità di ingrandimento applicata al video in ingresso. Dovresti cambiare questi valori finché non vedi chiaramente il movimento che vuoi tracciare nel fotogramma video. Se vedi artefatti, potrebbe essere utile ridurre la soglia_fase mantenendo la stessa amplificazione.

I parametri di rilevamento del movimento aiutano a compensare il rumore. Quando si rilevano le regioni di movimento, vengono utilizzati erode_dim e dilate_dim per dimensionare le dimensioni dei kernel OpenCV utilizzati per erodere e dilatare il movimento in modo che il rumore venga prima eroso, quindi il segnale di movimento rimanente viene significativamente dilatato per rendere evidenti le regioni di movimento. Potrebbe essere necessario regolare questi parametri anche se la culla si trova in un'impostazione a contrasto molto elevato. In generale, avrai bisogno di un erode_dim più alto per impostazioni ad alto contrasto e di un erode_dim più basso per un contrasto basso.

Se esegui CribSense con show_diff = true e noti che troppo dell'output dell'accumulatore è bianco, o una parte del video completamente non correlata viene rilevata come movimento (ad esempio una lampada tremolante), aumenta erode_dim fino a quando solo la parte del video corrispondente al tuo bambino è la più grande sezione di bianco. La prima figura mostra un esempio in cui la dimensione dell'erosione è troppo bassa per la quantità di movimento nel fotogramma, mentre la successiva mostra un fotogramma ben calibrato.

Una volta che questo è stato calibrato, assicurati che pixel_threshold sia impostato su un valore tale che "Pixel Movement" riporti solo i valori di picco del movimento dei pixel, e non tutti (il che significa che devi eliminare il rumore). Idealmente, vedrai un output come questo nel tuo terminale, dove c'è un chiaro schema periodico corrispondente al movimento:

[info] Movimento pixel: 0 [info] Stima movimento: 1.219812 Hz

[info] Movimento Pixel: 0 [info] Motion Stima: 1.219812 Hz [info] Movimento Pixel: 0 [info] Motion Stima: 1.219812 Hz [info] Movimento Pixel: 0 [info] Motion Stima: 1.219812 Hz [info] Movimento Pixel: 44 [info] Motion Stima: 1.219812 Hz [info] Movimento Pixel: 0 [info] Motion Stima: 1.219812 Hz [info] Movimento Pixel: 161 [info] Motion Stima: 1.219812 Hz [info] Movimento Pixel: 121 [info] Stima del movimento: 0,841416 Hz [info] Movimento dei pixel: 0 [info] Stima del movimento: 0,841416 Hz [info] Movimento dei pixel: 86 [info] Stima del movimento: 0,841416 Hz [info] Movimento dei pixel: 0 [info] Stima del movimento: 0,841416 Hz [info] Movimento Pixel: 0 [info] Motion Stima: 0,841416 Hz [info] Movimento Pixel: 0 [info] Motion Stima: 0,841416 Hz [info] Movimento Pixel: 0 [info] Motion Stima: 0,841416 Hz [info] Movimento Pixel: 0 [info] Motion Stima: 0,841416 Hz [info] Movimento Pixel: 0 [info] Motion Stima: 0,841416 Hz [info] Movimento Pixel: 0 [info] Motion Stima: 0,841416 Hz [info] Pixel Movem ent: 0 [info] Stima del movimento: 0.841416 Hz [info] Movimento dei pixel: 0 [info] Stima del movimento: 0.841416 Hz [info] Movimento dei pixel: 0 [info] Stima del movimento: 0.841416 Hz [info] Movimento dei pixel: 0 [info] Motion Stima: 0,841416 Hz [info] Movimento Pixel: 0 [info] Motion Stima: 0,841416 Hz [info] Movimento Pixel: 0 [info] Motion Stima: 0,841416 Hz [info] Movimento Pixel: 0 [info] Motion Stima: 0,841416 Hz [info] Movimento pixel: 0 [info] Movimento stimato: 0,841416 Hz [info] Movimento pixel: 97 [info] Movimento stimato: 0,841416 Hz [info] Movimento pixel: 74 [info] Movimento stimato: 0,839298 Hz [info] Pixel Movimento: 0 [info] Motion Stima: 0.839298 Hz [info] Movimento Pixel: 60 [info] Motion Stima: 0.839298 Hz [info] Movimento Pixel: 0 [info] Motion Stima: 0.839298 Hz [info] Movimento Pixel: 0 [info] Motion Stima: 0.839298 Hz [info] Movimento Pixel: 0 [info] Motion Stima: 0.839298 Hz [info] Movimento Pixel: 0 [info] Motion Stima: 0.839298 Hz [info] Movimento Pixel: 48 [info] Motion Stima: 0,839298 Hz [info] Movimento pixel: 38 [info] Stima movimento: 0,839298 Hz [info] Movimento pixel: 29 [info] Stima movimento: 0,839298 Hz [info] Movimento pixel: 28 [info] Stima movimento: 0,839298 Hz [info] Movimento Pixel: 22 [info] Motion Stima: 0.839298 Hz [info] Movimento Pixel: 0 [info] Motion Stima: 0.839298 Hz [info] Movimento Pixel: 0 [info] Motion Stima: 0.839298 Hz [info] Movimento Pixel: 0 [info] Stima del movimento: 0.839298 Hz [info] Movimento dei pixel: 0 [info] Stima del movimento: 0.839298 Hz

Se il tuo output è più simile a questo:

[info] Movimento pixel: 921 [info] Stima movimento: 1.352046 Hz

[info] Movimento Pixel: 736 [info] Motion Stima: 1.352046 Hz [info] Movimento Pixel: 666 [info] Motion Stima: 1.352046 Hz [info] Movimento Pixel: 663 [info] Motion Stima: 1.352046 Hz [info] Movimento Pixel: 1196 [info] Motion Stima: 1.352046 Hz [info] Movimento Pixel: 1235 [info] Motion Stima: 1.352046 Hz [info] Movimento Pixel: 1187 [info] Motion Stima: 1.456389 Hz [info] Movimento Pixel: 1115 [info] Motion Stima: 1,456389 Hz [info] Movimento Pixel: 959 [info] Motion Stima: 1,456389 Hz [info] Movimento Pixel: 744 [info] Motion Stima: 1,456389 Hz [info] Movimento Pixel: 611 [info] Motion Stima: 1,456389 Hz [info] Movimento Pixel: 468 [info] Motion Stima: 1,456389 Hz [info] Movimento Pixel: 371 [info] Motion Stima: 1,456389 Hz [info] Movimento Pixel: 307 [info] Motion Stima: 1,456389 Hz [info] Movimento Pixel: 270 [info] Stima del movimento: 1,456389 Hz [info] Movimento dei pixel: 234 [info] Stima del movimento: 1,456389 Hz [info] Movimento dei pixel: 197 [info] Stima del movimento: 1,456389 Hz [info] Movimento Pixel: 179 [info] Motion Stima: 1,456389 Hz [info] Movimento Pixel: 164 [info] Motion Stima: 1,456389 Hz [info] Movimento Pixel: 239 [info] Motion Stima: 1,456389 Hz [info] Movimento Pixel: 733 [info] Motion Stima: 1.456389 Hz [info] Movimento Pixel: 686 [info] Motion Stima: 1.229389 Hz [info] Movimento Pixel: 667 [info] Motion Stima: 1.229389 Hz [info] Movimento Pixel: 607 [info] Motion Stima: 1.229389 Hz [info] Movimento Pixel: 544 [info] Motion Stima: 1.229389 Hz [info] Movimento Pixel: 499 [info] Motion Stima: 1.229389 Hz [info] Movimento Pixel: 434 [info] Motion Stima: 1.229389 Hz [info] Movimento Pixel: 396 [info] Motion Stima: 1.229389 Hz [info] Movimento Pixel: 375 [info] Motion Stima: 1.229389 Hz [info] Movimento Pixel: 389 [info] Motion Stima: 1.229389 Hz [info] Movimento Pixel: 305 [info] Motion Stima: 1.312346 Hz [info] Movimento Pixel: 269 [info] Motion Stima: 1.312346 Hz [info] Movimento Pixel: 1382 [info] Motion E stima: 1.312346 Hz [info] Movimento Pixel: 1086 [info] Motion Stima: 1.312346 Hz [info] Movimento Pixel: 1049 [info] Motion Stima: 1.312346 Hz [info] Movimento Pixel: 811 [info] Motion Stima: 1.312346 Hz [info] Movimento Pixel: 601 [info] Motion Stima: 1.312346 Hz [info] Movimento Pixel: 456 [info] Motion Stima: 1.312346 Hz

Regola pixel_threshold e diff_threshold finché non vengono visualizzati solo i picchi, altrimenti il movimento dei pixel è 0.

Passaggio 8: dimostrazione

Image
Image

Ecco una piccola demo di come funziona CribSense. Dovrai immaginare che questo sia attaccato al lato di una culla.

Quando posizioni CribSense sulla culla, dovrai ottimizzare la distanza tra il bambino e la videocamera. Idealmente, il petto del tuo bambino riempirà meno di 1/3 della cornice. Il bambino non dovrebbe essere troppo lontano, altrimenti il video a bassa risoluzione farà fatica a trovare abbastanza dettagli da ingrandire. Se la videocamera è troppo vicina, potrebbe non essere in grado di vedere tuo figlio se rotola o si sposta fuori dall'inquadratura. Allo stesso modo, se il bambino è sotto una coperta "tenda", dove c'è un contatto limitato tra la coperta e il torace del bambino, potrebbe essere difficile rilevare il movimento. Infilateli bene!

Dovrai anche considerare la situazione di illuminazione intorno alla tua culla. Se la tua culla si trova proprio accanto a una finestra, potresti ottenere ombre in movimento o cambiare i valori della luce poiché il sole è bloccato dalle nuvole o si verificano movimenti fuori dalla finestra. Un posto con un'illuminazione costante è il migliore.

Con un po' di lavoro in più, pensiamo che qualcuno potrebbe migliorare il nostro software in modo che la calibrazione sia un processo molto più fluido. In futuro potrebbero essere aggiunte anche funzionalità aggiuntive come le notifiche push.

Passaggio 9: risoluzione dei problemi

Potresti riscontrare alcuni problemi comuni durante la configurazione di CribSense. Ad esempio, avere problemi a creare/eseguire il programma o non sentire alcun audio. Ricorda, CribSense non è un baby monitor perfettamente affidabile. Saremmo lieti di ricevere contributi sul nostro repository GitHub man mano che apporti miglioramenti!

Ecco alcuni suggerimenti per la risoluzione dei problemi che abbiamo raccolto durante la creazione di CribSense.

Nessuna sveglia sta suonando

  • I tuoi altoparlanti funzionano?
  • Riesci a riprodurre altri suoni dal Pi al di fuori dell'allarme CribSense?
  • Se il tuo Pi prova a riprodurre l'audio tramite HDMI anziché tramite la porta audio? Controlla la pagina Configurazione audio Raspberry Pi per assicurarti di aver selezionato l'uscita corretta.
  • Il software CribSense rileva il movimento? Se CribSense è in esecuzione in background, puoi controllare con journalctl -f in un terminale.
  • Se CribSense rileva molto movimento, potrebbe essere necessario calibrare CribSense.

Il LED IR non funziona

  • Riesci a vedere un debole colore rosso quando guardi il LED IR? Quando il LED è acceso, dovrebbe essere visibile un debole anello rosso.
  • Controllare la polarità dei collegamenti. Se +5V e GND sono invertiti, non funzionerà.
  • Collegare il LED a un alimentatore con un limite di tensione/corrente di 5 V/0,5 A. Normalmente, dovrebbe consumare 0,2 A a 5 V. In caso contrario, il LED potrebbe non funzionare correttamente.

CribSense rileva il movimento anche se non c'è un neonato

  • Hai calibrato correttamente CribSense?
  • Ricorda, CribSense sta solo cercando cambiamenti nei valori dei pixel

    • Ci sono ombre che si muovono all'interno dell'inquadratura?
    • C'è sfarfallio o cambiamento di illuminazione?
    • CribSense è montato su una superficie stabile (ovvero qualcosa che non si muoverà se le persone ci camminano accanto)?
    • Ci sono altre fonti di movimento nell'inquadratura (specchi che catturano i riflessi, ecc.)?

CribSense NON rileva il movimento anche se c'è movimento

  • Hai calibrato correttamente CribSense?
  • C'è qualcosa nel modo della fotocamera?
  • Riesci a connetterti alla fotocamera da Raspberry Pi? Controlla eseguendo raspistill -v in un terminale per aprire la fotocamera sul Pi per alcuni secondi.
  • Se guardi sudo systemctl status cribsense, CribSense è effettivamente in esecuzione?
  • Il tuo bambino è sotto una coperta "tendata" in modo che non entri in contatto con il bambino? Se ci sono vuoti d'aria significativi tra la coperta e il bambino, la coperta potrebbe mascherare il movimento.
  • Riesci a vedere il movimento se amplifichi di più il video?
  • Riesci a vedere il movimento se sintonizzi i cutoff delle frequenze basse e alte?
  • Se questo accade solo in condizioni di scarsa illuminazione, ti sei assicurato che la calibrazione funzioni in condizioni di scarsa illuminazione?

CribSense non costruisce

Hai installato tutte le dipendenze?

Non riesco a eseguire cribsense dalla riga di comando

  • Hai digitato in modo errato qualcosa durante l'esecuzione di./autogen.sh --prefix=/usr --sysconfdir=/etc --disable-debug durante la compilazione del software?
  • cribsense è presente in /usr/bin ?
  • Quale percorso viene fornito se esegui " which cribsense" ?

Consigliato: