Innehållsförteckning:
- Steg 1: Förutsättningar
- Steg 2: Installera CribSense -programvaran
- Steg 3: Gör din maskinvara redo: Anslut din kamera
- Steg 4: Gör din maskinvara klar: IR -LED
- Steg 5: Gör din maskinvara redo: Chassi
- Steg 6: Gör din maskinvara klar: Montering
- Steg 7: Kalibrering
- Steg 8: Demonstration
- Steg 9: Felsökning
Video: CribSense: en kontaktlös, videobaserad babyvakt: 9 steg (med bilder)
2024 Författare: John Day | [email protected]. Senast ändrad: 2024-01-30 12:45
CribSense är en videobaserad, kontaktlös babyvakt som du kan göra själv utan att bryta banken
CribSense är en C ++-implementering av videoförstoring inställd för att köras på en Raspberry Pi 3 modell B. Under en helg kan du ställa in din egen babysäng för barn som larmar om ditt barn slutar röra sig. Som en bonus är all programvara gratis att använda för icke-kommersiella ändamål och är lätt att förlänga.
Hela förvaret som innehåller källfiler och dokumentation finns på
Även om vi tycker att CribSense är ganska roligt, är det viktigt att komma ihåg att detta faktiskt inte är en certifierad, idiotsäker säkerhetsanordning. Det vill säga att den måste vara korrekt konfigurerad och ha en välkontrollerad miljö för att fungera. Om den till exempel inte är kalibrerad väl och/eller om miljön i videon inte bidrar till videoförstoring, kanske du inte kan använda den. Vi gjorde det här som ett roligt projekt för att se hur bra vi kunde ha datortung programvara som videoförstoring köra på datorbegränsad maskinvara som en Raspberry Pi. Varje riktig produkt skulle kräva mycket mer testning än vi har gjort. Så, om du använder det här projektet, ta det för vad det är: en kort undersökning av videoförstoring på en Pi.
Vad du kommer att behöva:
Raspberry Pi + kamera + konfigurationsverktyg:
- Raspberry Pi 3 Modell B
- 5V 2,5A Micro USB -strömförsörjning
- Raspberry Pi NoIR -kameramodul V2
- MicroSD -kort (vi använde ett 16 GB klass 10 -kort)
- Flexkabel för Raspberry Pi -kamera (12 ")
- Högtalare med 3,5 mm ingång
- HDMI -skärm
- USB -tangentbord
- USB -mus
- [valfritt] Raspberry Pi kylfläns (om du är orolig för värme kan du fästa en av dessa på din Pi)
IR LED-krets för svagt ljus:
- [3x] 1N4001 Dioder
- 1 Ohm, 1W motstånd
- 1W IR LED
- 2 ledningar för att ansluta lysdioden till Pi
- Lödkolv
Chassi:
- Tillgång till en 3D -skrivare (minsta byggvolym = 9,9 "L x 7,8" B x 5,9 "H) för att skriva ut vårt chassi, men konstruera gärna ditt eget.
- Lim (vilken typ av lim som helst fungerar, men varmt lim rekommenderas för prototyper).
Steg 1: Förutsättningar
Innan du börjar vår steg-för-steg-guide borde du redan ha installerat den senaste versionen av Raspbian på ditt SD-kort och se till att din Pi fungerar. Du måste också aktivera kameramodulen innan du kan komma åt kameran.
Steg 2: Installera CribSense -programvaran
CribSense är beroende av autoconf, libtool, OpenCV och libcanberra, liksom vanliga programverktyg.
- autoconf och libtool används för att automatiskt konfigurera makefiler och bygga skript för CribSense på många plattformar (som Linux, OSX och Raspberry Pi).
- OpenCV är ett kraftfullt datorsynpaket som används för bildbehandling och är grunden för videoförstorings- och rörelsedetekteringskoden. Den har bra stöd, är lätt att använda och har bra prestanda.
- libcanberra är ett enkelt bibliotek för att spela händelseljud. Det används för att spela alarmljudet för CribSense.
Besök deras enskilda sidor för att få fullständig information.
Installera dessa genom att öppna en terminal på din Pi och köra:
sudo apt-get install git build-essential autoconf libtool libopencv-dev libcanberra-dev
Därefter måste du ställa in kameradrivrutinen på autoladdning genom att lägga till bcm2835-v4l2 till `/etc/modules-load.d/modules.conf`. Dina modules.conf ska se ut så här:
# /etc /modules: kernelmoduler som ska laddas vid starttiden.
# # Filen innehåller namnen på kärnmoduler som ska laddas # vid starttid, en per rad. Rader som börjar med "#" ignoreras. i2c-dev bcm2835-v4l2
När filen har redigerats måste du starta om din Pi. Denna drivrutin används av CribSense för att direkt dra ramar från NoIR -kameran.
Sedan kan du klona förvaret genom att köra:
git -klon
Gå sedan in i förvaret och bygg programvaran genom att köra
cd CribSense
./autogen.sh --prefix =/usr --sysconfdir =/etc --disable-debug make sudo make install sudo systemctl daemon-reload
Grattis, du har installerat all nödvändig programvara!
Konfiguration
CribSense kan anpassas genom en enkel INI -konfigurationsfil. Efter att ha kört 'installera' finns konfigurationsfilen på /etc/cribsense/config.ini. Du kan visa och redigera dessa parametrar genom att köra
sudo nano /etc/cribsense/config.ini
En kort förklaring av varje parameter ges i standardkonfigurationen, men mer information finns på https://lukehsiao.github.io/CribSense/setup/config/. Vi kommer också att diskutera kalibrering och konfiguration i slutet av denna guide.
Kör CribSense
CribSense utformades för att köras vid start med hjälp av en systemd -tjänst. Medan du är ansluten till din Raspberry Pi med tangentbordet och musen, bör du se till att konfigurationsparametrarna fungerar för din spjälsäng. Du kan behöva justera om dessa parametrar om du flyttar den.
Medan du ställer in parametrarna kan du köra cribsense efter behag från kommandoraden genom att köra
cribsense --config /etc/cribsense/config.ini
När du är nöjd kan du aktivera autorun genom att köra
sudo systemctl aktivera cribsense
Du kan stoppa att cribsense körs automatiskt genom att köra
sudo systemctl inaktivera cribsense
Programvaruöversikt
CribSense -programvaran är hjärtat och själen i detta projekt. Vi såg några av de stora demonstrationerna för videoförstoring från MIT och ville försöka köra en liknande algoritm på en Raspberry Pi. Detta krävde mer än 10 gånger snabbare från tbl3rd: s arbete med hans C ++-implementering av videoförstoring för att kunna köras i realtid på Pi. De nödvändiga optimeringarna styr vår design av programvaran.
På en hög nivå cyklar CribSense upprepade gånger genom en programvarutillståndsmaskin. Först delar den upp varje 640x480, gråskala videoram i 3 horisontella sektioner (640x160) för bättre cacheplats. Det förstorar sedan varje band i en separat tråd och övervakar rörelsen som ses i ramen. Efter att ha övervakat rörelse i flera sekunder bestämmer den det primära rörelseområdet och beskär ramen till den. Detta minskar det totala antalet pixlar som algoritmen behöver bearbeta. Sedan övervakar CribSense rörelsemängden i den beskurna strömmen och larmar om ingen rörelse uppfattas under en konfigurerbar tid. Med jämna mellanrum kommer CribSense att öppna sin vy igen för att övervaka hela bildrutan om barnet har flyttat och beskär om det nya primära rörelseområdet.
Videoförstoring används för att öka signal / brusförhållandet för subtila rörelser som spädbarnsandning. Det skulle inte vara nödvändigt för större rörelser, men kan hjälpa till för mycket subtila rörelser. Observera att vår implementering är löst baserad på algoritmen som beskrivs i MIT: s artiklar och inte fungerar lika bra som deras egna kod.
Optimeringar som multithreading, adaptiv beskärning och kompilatoroptimeringar gav oss cirka 3x, 3x respektive 1.2x speedup. Detta tillät oss att uppnå den 10x snabbhet som krävs för att köra realtid på Pi.
Fullständig information finns på sidan Software Architecture i CribSense -förvaret.
Om du är intresserad av videoförstoring, besök MIT: s sida.
Steg 3: Gör din maskinvara redo: Anslut din kamera
Först byter du den 6 "kabel som följde med kameran med 12" kabeln. För att göra detta kan du helt enkelt följa denna handledning om hur du byter kamerakabel.
Sammanfattningsvis ser du en push/pull -flik på kamerans baksida som du kan dra ut för att lossa flexkabeln. Byt ut den korta kabeln mot den längre och skjut in fliken igen.
Du kommer att märka att vi har en 24 "kabel i våra bilder. Den var för lång. 12" kabeln på materiallistan är en mycket mer rimlig längd.
Steg 4: Gör din maskinvara klar: IR -LED
CribSense är relativt lätt att konstruera och består till stor del av kommersiellt tillgängliga delar. Som framgår av figuren ovan finns det fem huvudkomponenter, varav endast två är specialtillverkade. Denna sida kommer att gå igenom hur man konstruerar IR LED -kretsen, och nästa sida kommer att gå igenom hur man konstruerar chassit.
För den här delen måste du skaffa ditt lödkolv, ledningar, dioder, IR -LED och motstånd. Vi kommer att konstruera kretsen som visas i den andra figuren. Om du är ny på lödning, här är en trevlig guide som kommer att komma ikapp dig. Medan den här guiden diskuterar genomlödning, kan du använda samma grundläggande tekniker för att ansluta dessa komponenter som visas i den tredje figuren.
För att ge tillräcklig belysning på natten använder vi en IR -LED, som inte är synlig för det mänskliga ögat men synlig för NoIR -kameran. IR -lysdioden förbrukar inte mycket ström jämfört med Raspberry Pi, så vi lämnar IR -lysdioden tänd för enkelhetens skull.
I tidigare versioner av Pi var den maximala strömutgången för dessa stift 50mA. Raspberry Pi B+ ökade detta till 500mA. Vi använder dock bara 5V -strömstiften för enkelhet, som kan leverera upp till 1,5A. Framspänningen för IR -lysdioden är cirka 1,7 ~ 1,9V enligt våra mätningar. Även om IR -LED: n kan dra 500mA utan att skada sig, minskar vi strömmen till cirka 200mA för att minska värme och total strömförbrukning. Experimentella resultat visar också att IR -lysdioden är tillräckligt stark med 200mA ingångsström. För att överbrygga klyftan mellan 5V och 1.9V använder vi tre 1N4001 -dioder och ett 1 Ohm -motstånd i serie med IR -LED. Spänningsfallet över tråden, dioderna och motståndet är cirka 0,2V, 0,9V (för var och en) respektive 0,2V. Således är spänningen över IR -lysdioden 5V - 0,2V - (3 * 0,9V) - 0,2V = 1,9V. Värmeavledningen över lysdioden är 0,18 W och 0,2 W över motståndet, allt väl inom sina maximala värden.
Men vi är inte klara än! För att få en bättre passform i det 3D -tryckta chassit vill vi ha IR -LED -linsen som sticker ut från vårt chassi och har kretskortet i linje med hålet. Den lilla fotodioden längst ner till höger kommer i vägen. För att åtgärda detta avlödar vi det och vänder det till motsatta sidan av brädet som visas på de två sista bilderna. Fotodioden behövs inte eftersom vi vill att lysdioden alltid ska vara på. Att helt enkelt byta den till motsatt sida lämnar den ursprungliga LED -kretsen oförändrad.
Vid lödning till trådarna, se till att trådarna är minst 12 tum långa och har stifthuvuden som kan glida över Pi: s GPIO: er.
Steg 5: Gör din maskinvara redo: Chassi
Källfiler:
- Fodral STL
- Case Makerbot
- Omslag STL
- Cover Makerbot
Vi använde ett enkelt 3D -tryckt chassi för att hysa Pi, kamera och LED. Att använda vårt chassi är valfritt, men rekommenderas för att förhindra att små barn rör vid exponerade elektroniska kretsar. Varje spjälsäng är olika, så vårt chassi inkluderar inte en monteringsfäste. Flera monteringsalternativ kan inkludera:
- Buntband
- 3M Dual Lock
- Kardborre
- Tejp
Om du har tillgång till en MakerBot Replicator (5: e generationen) kan du helt enkelt ladda ner.makerbot -filerna för fodralet och täcka det på din MakerBot Replicator och skriva ut. Det tar cirka 6 timmar att skriva ut fodralet och 3 timmar att skriva ut omslaget. Om du använder en annan typ av 3D -skrivare, fortsätt läsa.
En minsta byggvolym på 9,9 "(L) x 7,8" (W) x 5,9 "(H) krävs för att skriva ut CribSense. Om du inte har tillgång till en 3D -skrivare med denna byggvolym kan du använda online 3D -utskrift tjänst (t.ex. Shapeways eller Sculpteo) för att skriva ut CribSense. Minsta utskriftsupplösning är 0,015 ". Om du använder en 3D -skrivare av en smält filamenttillverkningstyp betyder det att din munstycksdiameter måste vara 0,015 "eller mindre. Skrivare med lägre utskriftsupplösning (större munstycksdiametrar) kan fungera, men Raspberry Pi kanske inte passar in i chassit. Vi rekommenderar PLA (polymjölksyra) som det föredragna utskriftsmaterialet. Annan plast kan fungera, men Raspberry Pi passar kanske inte i fodralet om den utvalda termiska expansionskoefficienten för den valda plasten är större än den för PLA. Om din 3D -skrivare har en uppvärmd byggplatta, stäng av värmaren innan du fortsätter.
Att orientera modellen på skrivarens byggplatta är avgörande för ett framgångsrikt utskrift. Dessa modeller var noggrant utformade så att de inte behöver skrivas ut med stödmaterial, vilket sparar plast och förbättrar utskriftskvaliteten. Innan du fortsätter, ladda ner 3D -filerna för fodralet och omslaget. När du skriver ut dessa modeller måste CribSenses hals ligga platt på byggplattan. Detta säkerställer att alla överhängsvinklar på modellerna inte överstiger 45 grader, vilket eliminerar kravet på stödmaterial. För instruktioner om hur du orienterar 3D -modeller i skrivarens byggvolym, se bruksanvisningen som följde med din 3D -skrivare. Exempel på byggorienteringen av fodralet och omslaget visas ovan.
Förutom att sätta halsen på CribSense platt mot byggplattan kan du märka att modellerna roteras runt den vertikala axeln. Detta kan vara nödvändigt för att passa modellen inuti byggnadsvolymen på din 3D -skrivare. Denna rotation är valfri om byggvolymen är tillräckligt lång för att rymma CribSense.
Steg 6: Gör din maskinvara klar: Montering
När du har all hårdvara klar kan du börja montera. Vilket lim som helst kan användas i denna process, men vi rekommenderar varmt lim av två huvudskäl. Hett lim torkar snabbt, så du behöver inte vänta länge innan limmet torkar. Dessutom kan varmt lim tas bort om du gör ett misstag. För att ta bort torkat varmt lim, blötlägg det heta limet i gnidnings (alkohol). Vi rekommenderar 90% koncentration eller högre, men 70% koncentration fungerar fortfarande. Blötläggning av det torkade heta limet i isopropylalkohol försvagar bindningen mellan limmet och den underliggande ytan, så att du kan ta bort limet rent. När blötläggning av limet i isopropylalkohol bör Raspberry Pi stängas av och kopplas ur. Var noga med att låta allt torka innan du applicerar hett lim igen och startar Raspberry Pi.
Alla bilder för dessa steg är i ordning och följer tillsammans med textstegen.
- Sätt i Raspberry Pi i chassit. Du måste böja den lite för att få in ljudporten, men när den väl är inne kommer ljuduttaget att hålla den på plats. När det är på plats, se till att alla portar fortfarande kan nås (t.ex. att du kan ansluta strömkabeln).
- Använd sedan varmt lim för att fästa Pi på plats och fäst kameran på Pi. Det finns också skruvhål om du föredrar att använda dem.
- Limma nu LED och kamera på framsidan (bilden). Börja med att limma NoIR -kameran på kamerahålet. Se till att kameran sitter tätt och ligger i linje med chassit. Använd inte för mycket lim; annars kommer du inte att kunna passa kameran i huvudfodralet. Var noga med att slå på Pi och ta en titt på kameran (`raspistill -v`, till exempel) för att se till att den är vinklad väl och har ett bra synfält. Om det inte är det, ta bort det heta limet och placera om det.
- Limma sedan IR -lysdioden till hålet på lockets hals. Halsen är i 45 graders vinkel mot sidoljus i spjälsängen, vilket resulterar i fler skuggor i situationer med svagt ljus. Detta ger mer kontrast till bilden, vilket gör det lättare att upptäcka rörelse.
- Fäst IR -LED -kablarna på Raspberry Pi: s huvudstiften som visas i den schematiska bilden.
- Packa kablarna i chassit på ett sätt som inte veckas eller belastas. Det slutade med att vi fällde ihop dragspelsstilen eftersom kamerakabeln var för lång.
- Med allt stoppat, varmt lim runt kanterna där de två bitarna möts och förseglar dem på plats.
Steg 7: Kalibrering
Detaljer om konfigurationsparametrar finns i CribSense -förvaringsdokumentationen. Titta också på videon för att se ett exempel på hur du kan kalibrera CribSense efter att du har konfigurerat allt.
Här är ett exempel på konfigurationsfilen:
[io]; I/O -konfiguration
; input = path_to_file; Inmatningsfil för att använda input_fps = 15; fps ingång (40 max, 15 rekommenderas om du använder kamera) full_fps = 4,5; fps där hela ramar kan bearbetas crop_fps = 15; fps där beskurna ramar kan bearbetas kamera = 0; Kamera att använda bredd = 640; Bredden på inmatningsvideohöjden = 480; Inmatningsvideos höjd time_to_alarm = 10; Hur många sekunder att vänta utan rörelse innan larm. [beskärning]; Adaptive Cropping Settings crop = true; Om du vill beskära frames_to_settle = 10; # ramar att vänta efter återställning innan bearbetning av roi_update_interval = 800; # ramar mellan omräkning av ROI roi_window = 50; # ramar att övervaka innan du väljer ROI [rörelse]; Rörelsedetekteringsinställningar erode_dim = 4; dimension av erodkärnan dilate_dim = 60; dimension av dilatationskärnan diff_threshold = 8; abs -skillnad behövs för att känna igen förändringstiden = 1; # ramar för att bibehålla rörelse innan flaggning av äkta pixel_tröskel = 5; # pixlar som måste vara annorlunda för att flagga som motion show_diff = false; visa skillnaden mellan 3 ramar [förstoring]; Video förstoringsinställningar amplify = 25; % Amplifiering önskad lågavstängning = 0,5; Bandpassens låga frekvens. hög cutoff = 1,0; Bandpassens höga frekvens. tröskel = 50; Fas -tröskeln som % av pi. show_magnification = false; Visa utmatningsramarna för varje förstoring [debug] print_times = false; Skriv ut analystider
Kalibrering av algoritmen är en iterativ ansträngning, utan någon exakt lösning. Vi uppmuntrar dig att experimentera med olika värden, kombinera dem med felsökningsfunktionerna, för att hitta den kombination av parametrar som passar bäst för din miljö. Innan du börjar kalibrera, se till att show_diff och show_magnification är satt till true.
Som en riktlinje ökar förstärkningen och fasvärdena mängden förstoring som appliceras på inmatningsvideon. Du bör ändra dessa värden tills du tydligt ser rörelsen du vill spåra i videoramen. Om du ser artefakter kan det hjälpa att minska fas_tröskeln samtidigt som du behåller samma förstärkning.
Rörelsedetekteringsparametrarna hjälper till att kompensera för buller. Vid detektering av rörelseområden används erode_dim och dilate_dim för att storleksanpassa måtten på OpenCV -kärnorna som används för att erodera och vidga rörelse så att buller först urholkas, sedan utvidgas den återstående rörelsessignalen avsevärt för att göra rörelseområdena uppenbara. Dessa parametrar kan också behöva justeras om din spjälsäng har en mycket hög kontrast. I allmänhet behöver du en högre erode_dim för högkontrastinställningar och en lägre erode_dim för låg kontrast.
Om du kör CribSense med show_diff = true och du märker att för mycket av ackumulatorutmatningen är vit, eller om någon helt orelaterad del av videon detekteras som rörelse (t.ex. en flimrande lampa), öka erode_dim tills endast delen av videon motsvarande din baby är den största delen av vitt. Den första figuren visar ett exempel där eroderingsdimensionen är för låg för rörelsemängden i ramen, medan nästa visar en välkalibrerad ram.
När detta har kalibrerats, se till att pixel_threshold är inställd på ett värde så att "Pixel Movement" bara rapporterar toppvärdena för pixelrörelser, och inte alla (vilket innebär att du måste stänga av bruset). Helst ser du utdata så här i din terminal, där det finns ett tydligt periodiskt mönster som motsvarar rörelsen:
[info] Pixelrörelse: 0 [info] Rörelseuppskattning: 1.219812 Hz
[info] Pixel Movement: 0 [info] Motion Estimate: 1.219812 Hz [info] Pixel Movement: 0 [info] Motion Estimate: 1.219812 Hz [info] Pixel Movement: 0 [info] Motion Estimate: 1.219812 Hz [info] Pixel Movement: 44 [info] Motion Estimate: 1.219812 Hz [info] Pixel Movement: 0 [info] Motion Estimate: 1.219812 Hz [info] Pixel Movement: 161 [info] Motion Estimate: 1.219812 Hz [info] Pixel Movement: 121 [info] Motion Estimate: 0.841416 Hz [info] Pixel Movement: 0 [info] Motion Estimate: 0.841416 Hz [info] Pixel Movement: 86 [info] Motion Estimate: 0.841416 Hz [info] Pixel Movement: 0 [info] Motion Estimate: 0.841416 Hz [info] Pixel Movement: 0 [info] Motion Estimate: 0.841416 Hz [info] Pixel Movement: 0 [info] Motion Estimate: 0.841416 Hz [info] Pixel Movement: 0 [info] Motion Estimate: 0.841416 Hz [info] Pixel Movement: 0 [info] Motion Estimate: 0.841416 Hz [info] Pixel Movement: 0 [info] Motion Estimate: 0.841416 Hz [info] Pixel Movement: 0 [info] Motion Estimate: 0.841416 Hz [info] Pixel Movem ent: 0 [info] Motion Estimate: 0.841416 Hz [info] Pixel Movement: 0 [info] Motion Estimate: 0.841416 Hz [info] Pixel Movement: 0 [info] Motion Estimate: 0.841416 Hz [info] Pixel Movement: 0 [info] Motion Estimate: 0.841416 Hz [info] Pixel Movement: 0 [info] Motion Estimate: 0.841416 Hz [info] Pixel Movement: 0 [info] Motion Estimate: 0.841416 Hz [info] Pixel Movement: 0 [info] Motion Estimate: 0.841416 Hz [info] Pixel Movement: 0 [info] Motion Estimate: 0.841416 Hz [info] Pixel Movement: 97 [info] Motion Estimate: 0.841416 Hz [info] Pixel Movement: 74 [info] Motion Estimate: 0.839298 Hz [info] Pixel Rörelse: 0 [info] Rörelseuppskattning: 0,839298 Hz [info] Pixelrörelse: 60 [info] Rörelseuppskattning: 0,839298 Hz [info] Pixelrörelse: 0 [info] Rörelseuppskattning: 0,839298 Hz [info] Pixelrörelse: 0 [info] Motion Estimate: 0.839298 Hz [info] Pixel Movement: 0 [info] Motion Estimate: 0.839298 Hz [info] Pixel Movement: 0 [info] Motion Estimate: 0.839298 Hz [info] Pixel Movement: 48 [info] Motion Uppskattning: 0.839298 Hz [info] Pixel Movement: 38 [info] Motion Estimate: 0.839298 Hz [info] Pixel Movement: 29 [info] Motion Estimate: 0.839298 Hz [info] Pixel Movement: 28 [info] Motion Estimate: 0.839298 Hz [info] Pixel Movement: 22 [info] Motion Estimate: 0.839298 Hz [info] Pixel Movement: 0 [info] Motion Estimate: 0.839298 Hz [info] Pixel Movement: 0 [info] Motion Estimate: 0.839298 Hz [info] Pixel Movement: 0 [info] Rörelseuppskattning: 0,839298 Hz [info] Pixelrörelse: 0 [info] Rörelseuppskattning: 0,839298 Hz
Om din produktion ser mer ut så här:
[info] Pixelrörelse: 921 [info] Rörelseuppskattning: 1.352046 Hz
[info] Pixel Movement: 736 [info] Motion Estimate: 1.352046 Hz [info] Pixel Movement: 666 [info] Motion Estimate: 1.352046 Hz [info] Pixel Movement: 663 [info] Motion Estimate: 1.352046 Hz [info] Pixel Movement: 1196 [info] Motion Estimate: 1.352046 Hz [info] Pixel Movement: 1235 [info] Motion Estimate: 1.352046 Hz [info] Pixel Movement: 1187 [info] Motion Estimate: 1.456389 Hz [info] Pixel Movement: 1115 [info] Motion Estimate: 1.456389 Hz [info] Pixel Movement: 959 [info] Motion Estimate: 1.456389 Hz [info] Pixel Movement: 744 [info] Motion Estimate: 1.456389 Hz [info] Pixel Movement: 611 [info] Motion Estimate: 1.456389 Hz [info] Pixel Movement: 468 [info] Motion Estimate: 1.456389 Hz [info] Pixel Movement: 371 [info] Motion Estimate: 1.456389 Hz [info] Pixel Movement: 307 [info] Motion Estimate: 1.456389 Hz [info] Pixel Movement: 270 [info] Motion Estimate: 1.456389 Hz [info] Pixel Movement: 234 [info] Motion Estimate: 1.456389 Hz [info] Pixel Movement: 197 [info] Motion Estimate: 1.456389 Hz [info] Pixel Movement: 179 [info] Motion Estimate: 1.456389 Hz [info] Pixel Movement: 164 [info] Motion Estimate: 1.456389 Hz [info] Pixel Movement: 239 [info] Motion Estimate: 1.456389 Hz [info] Pixel Movement: 733 [info] Motion Estimate: 1.456389 Hz [info] Pixel Movement: 686 [info] Motion Estimate: 1.229389 Hz [info] Pixel Movement: 667 [info] Motion Estimate: 1.229389 Hz [info] Pixel Movement: 607 [info] Motion Estimate: 1.229389 Hz [info] Pixel Movement: 544 [info] Motion Estimate: 1.229389 Hz [info] Pixel Movement: 499 [info] Motion Estimate: 1.229389 Hz [info] Pixel Movement: 434 [info] Motion Estimate: 1.229389 Hz [info] Pixel Movement: 396 [info] Motion Estimate: 1.229389 Hz [info] Pixel Movement: 375 [info] Motion Estimate: 1.229389 Hz [info] Pixel Movement: 389 [info] Motion Estimate: 1.229389 Hz [info] Pixel Movement: 305 [info] Motion Estimate: 1.312346 Hz [info] Pixel Movement: 269 [info] Motion Estimate: 1.312346 Hz [info] Pixel Movement: 1382 [info] Motion E stimate: 1.312346 Hz [info] Pixel Movement: 1086 [info] Motion Estimate: 1.312346 Hz [info] Pixel Movement: 1049 [info] Motion Estimate: 1.312346 Hz [info] Pixel Movement: 811 [info] Motion Estimate: 1.312346 Hz [info] Pixel Movement: 601 [info] Motion Estimate: 1.312346 Hz [info] Pixel Movement: 456 [info] Motion Estimate: 1.312346 Hz
Justera pixel_threshold och diff_threshold tills bara toppar syns, och pixelrörelse är 0 annars.
Steg 8: Demonstration
Här är en liten demo av hur CribSense fungerar. Du måste föreställa dig att detta är fäst på sidan av en spjälsäng.
När du placerar CribSense över din spjälsäng måste du optimera avståndet mellan barnet och kameran. Helst kommer ditt barns bröst att fylla mindre än 1/3 av ramen. Barnet ska inte vara för långt bort, annars kommer den lågupplösta videon att kämpa för att hitta tillräckligt med detaljer för att förstora. Om kameran är för nära kanske kameran inte kan se ditt barn om de rullar eller rör sig ur ramen. På samma sätt kan barnet vara svårt att upptäcka rörelse om barnet befinner sig under en "tält" filt, där det finns begränsad kontakt mellan filten och barnets bröst. Ta in dem bra!
Du kommer också att vilja överväga belysningssituationen runt din spjälsäng. Om din spjälsäng ligger precis bredvid ett fönster kan du få rörliga skuggor eller ändra ljusvärden eftersom solen blockeras av moln, eller rörelse sker utanför fönstret. Någonstans med konsekvent belysning är bäst.
Med lite mer arbete tror vi att någon kan förbättra vår programvara så att kalibrering är en mycket smidigare process. I framtiden kan ytterligare funktioner som push -aviseringar också läggas till.
Steg 9: Felsökning
Du kan stöta på några vanliga problem när du konfigurerar CribSense. Till exempel problem med att bygga/köra programmet eller att inte höra något ljud. Kom ihåg att CribSense inte är en helt pålitlig babyvakt. Vi tar gärna emot bidrag på vårt GitHub -arkiv när du gör förbättringar!
Här är några felsökningstips vi har samlat när vi gjorde CribSense.
Inget larm spelas
- Fungerar dina högtalare?
- Kan du spela andra ljud från Pi utanför CribSense -larmet?
- Om din Pi försöker spela ljud via HDMI istället för ljudporten? Kontrollera Raspberry Pi Audio Configuration -sidan för att se till att du har valt rätt utmatning.
- Upptäcker CribSense -programvaran rörelse? Om CribSense körs i bakgrunden kan du kontrollera med journalctl -f i en terminal.
- Om CribSense känner av mycket rörelse kan du behöva kalibrera CribSense.
IR -lysdioden fungerar inte
- Kan du se en svag röd färg när du tittar på IR -lysdioden? En svagt röd ring ska synas när lysdioden lyser.
- Kontrollera anslutningens polaritet. Om +5V och GND är omvända fungerar det inte.
- Anslut lysdioden till en strömförsörjning med en spänning/strömgräns på 5V/0,5A. Normalt bör den förbrukas 0,2A vid 5V. Om den inte gör det kan det hända att din LED inte fungerar.
CribSense upptäcker rörelse även om det inte finns ett spädbarn
- Har du korrekt kalibrerat CribSense?
-
Kom ihåg att CribSense bara letar efter förändringar i pixelvärden
- Är det några skuggor som rör sig inom ramen?
- Blir det flimmer eller byter belysning?
- Är CribSense monterad på en stabil yta (dvs. något som inte kommer att skaka om folk går förbi det)?
- Finns det några andra rörelsekällor i ramen (speglar som fångar reflektioner osv)?
CribSense upptäcker INTE rörelse även om det finns rörelse
- Har du korrekt kalibrerat CribSense?
- Finns det något i vägen för kameran?
- Kan du överhuvudtaget ansluta till kameran från Raspberry Pi? Kontrollera genom att köra raspistill -v i en terminal för att öppna kameran på Pi i några sekunder.
- Om du tittar på sudo systemctl status cribsense, körs CribSense faktiskt?
- Ligger ditt spädbarn under en filt som är "tältad" så att det inte kommer i kontakt med barnet? Om det finns betydande luftgap mellan filten och barnet kan filten dölja rörelsen.
- Kan du se rörelsen om du förstärker videon mer?
- Kan du se rörelsen om du ställer in låg- och högfrekventa avstängningar?
- Om detta bara händer i svagt ljus, såg du till att din kalibrering fungerar i svagt ljus?
CribSense bygger inte
Har du installerat alla beroenden?
Jag kan inte köra cribsense från kommandoraden
- Felade du av misstag något när du körde./autogen.sh --prefix =/usr --sysconfdir =/etc --disable-debug under din programvarubyggnad?
- Finns cribsense i /usr /bin?
- Vilken sökväg tillhandahålls om du kör "vilken cribsense"?
Rekommenderad:
Kontaktlös Halloween Candy Dispenser: 6 steg
Kontaktlös Halloween Candy Dispenser: Det är den tiden på året igen, där vi firar Halloween, men i år på grund av COVID-19 är alla spel avstängda. Men i Halloween -andan får vi inte glömma det roliga med Trick or Treating. Så detta inlägg är skapat för att låta familjen stilla
RGB-ljusdriven rörelse i handflatorna Kontaktlös: 4 steg
RGB-ljusdriven rörelse i handflatorna Kontaktlös: RGB-nattljus, med möjlighet att styra nattljusets färg med hjälp av handrörelser. Med hjälp av tre avståndssensorer ändrar vi ljusstyrkan för var och en av de tre komponenterna i RGB -färgen när du närmar dig eller tar bort handen. Ett ar
Kontaktlös vattenfontän: 9 steg (med bilder)
Kontaktlös vattenfontän: I slutet av mitt första år som MCT -student fick jag i uppdrag att göra ett projekt som innehöll alla de färdigheter jag hade plockat upp från kurser under hela året.Jag letade efter ett projekt som skulle kontrollera alla krav som ställts av mina lärare och på
Arduino -gränssnitt med ultraljudssensor och kontaktlös temperatursensor: 8 steg
Arduino -gränssnitt med ultraljudssensor och kontaktlös temperatursensor: Numera föredrar tillverkare, utvecklare Arduino för snabb utveckling av prototyper av projekt. Arduino är en elektronisk plattform med öppen källkod baserad på lättanvänd maskinvara och programvara. Arduino har ett mycket bra användargemenskap. I detta projekt
Kontaktlös spänningsdetektor: 15 steg (med bilder)
Kontaktlös spänningsdetektor: 3 sätt att bygga din egen kontaktlösa spänningsdetektor för mindre än en dollarIntroduktion ------------ När el inte hanteras korrekt leder det till elektriska stötar med en otäck upplevelse; därför måste säkerheten komma först när du arbetar