Inhaltsverzeichnis:

CribSense: ein kontaktloses, videobasiertes Babyphone – Gunook
CribSense: ein kontaktloses, videobasiertes Babyphone – Gunook

Video: CribSense: ein kontaktloses, videobasiertes Babyphone – Gunook

Video: CribSense: ein kontaktloses, videobasiertes Babyphone – Gunook
Video: Bereit für einen smarten Move? Einfach, kontaktlos und schnell direkt im Bus Tickets kaufen. 2024, November
Anonim
CribSense: ein kontaktloses, videobasiertes Babyphone
CribSense: ein kontaktloses, videobasiertes Babyphone
CribSense: ein kontaktloses, videobasiertes Babyphone
CribSense: ein kontaktloses, videobasiertes Babyphone

CribSense ist ein videobasiertes, kontaktloses Babyphone, das Sie selbst herstellen können, ohne die Bank zu sprengen

CribSense ist eine C++-Implementierung von Video Magnification, die darauf abgestimmt ist, auf einem Raspberry Pi 3 Model B ausgeführt zu werden. Über ein Wochenende können Sie Ihr eigenes Babyphone auf der Krippe einrichten, das einen Alarm auslöst, wenn Ihr Baby aufhört, sich zu bewegen. Als Bonus ist die gesamte Software für nicht-kommerzielle Zwecke kostenlos nutzbar und leicht erweiterbar.

Das vollständige Repository mit Quelldateien und Dokumentation finden Sie unter

Obwohl wir denken, dass CribSense ziemlich lustig ist, ist es wichtig, sich daran zu erinnern, dass dies kein zertifiziertes, narrensicheres Sicherheitsgerät ist. Das heißt, es muss richtig konfiguriert sein und eine gut kontrollierte Umgebung haben, damit es funktioniert. Wenn es beispielsweise nicht gut kalibriert ist und/oder die Umgebung im Video der Videovergrößerung nicht zuträglich ist, können Sie es möglicherweise nicht verwenden. Wir haben dies zu einem unterhaltsamen Projekt gemacht, um zu sehen, wie gut rechenintensive Software wie die Videovergrößerung auf rechenbegrenzter Hardware wie einem Raspberry Pi ausgeführt werden kann. Jedes echte Produkt würde viel mehr Tests erfordern, als wir es getan haben. Wenn Sie also dieses Projekt verwenden, nehmen Sie es als das, was es ist: eine kurze Untersuchung der Videovergrößerung auf einem Pi.

Was wirst du brauchen:

Raspberry Pi + Kamera + Konfigurationstools:

  • Raspberry Pi 3 Modell B
  • 5V 2.5A Micro-USB-Netzteil
  • Raspberry Pi NoIR-Kameramodul V2
  • MicroSD-Karte (wir haben eine 16-GB-Karte der Klasse 10 verwendet)
  • Flexkabel für Raspberry Pi Kamera (12")
  • Lautsprecher mit 3,5-mm-Eingang
  • HDMI-Monitor
  • USB-Tastatur
  • USB-Maus
  • [optional] Raspberry Pi Kühlkörper (wenn Sie sich Sorgen um Hitze machen, können Sie einen davon auf Ihren Pi kleben)

IR-LED-Schaltung für Low-Light-Betrieb:

  • [3x] 1N4001 Dioden
  • 1 Ohm, 1W Widerstand
  • 1W IR-LED
  • 2 Drähte zum Anschließen der LED an den Pi
  • Lötkolben

Chassis:

  • Zugriff auf einen 3D-Drucker (Mindestbauvolumen = 9,9" L x 7,8" B x 5,9" H), um unser Chassis zu drucken. Sie können jedoch gerne Ihr eigenes bauen.
  • Kleber (jede Art von Kleber wird funktionieren, aber Heißkleber wird für das Prototyping empfohlen).

Schritt 1: Voraussetzungen

Bevor Sie mit unserer Schritt-für-Schritt-Anleitung beginnen, sollten Sie bereits die neueste Version von Raspbian auf Ihrer SD-Karte installiert und sichergestellt haben, dass Ihr Pi funktionstüchtig ist. Sie müssen auch das Kameramodul aktivieren, bevor Sie auf die Kamera zugreifen können.

Schritt 2: Installieren der CribSense-Software

CribSense hängt von autoconf, libtool, OpenCV und libcanberra sowie von gängigen Softwaretools ab.

  • autoconf und libtool werden verwendet, um auf vielen Plattformen (wie Linux, OSX und Raspberry Pi) automatisch Makefiles zu konfigurieren und Skripte für CribSense zu erstellen.
  • OpenCV ist ein leistungsstarkes Computer-Vision-Paket, das zur Bildverarbeitung verwendet wird und die Grundlage für die Videovergrößerung und den Bewegungserkennungscode bildet. Es hat eine großartige Unterstützung, ist einfach zu bedienen und hat eine gute Leistung.
  • libcanberra ist eine einfache Bibliothek zum Abspielen von Event-Sounds. Es wird verwendet, um den Alarmton für CribSense abzuspielen.

Besuchen Sie ihre einzelnen Seiten, um alle Details zu erfahren.

Installieren Sie diese, indem Sie ein Terminal auf Ihrem Pi öffnen und ausführen:

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

Als nächstes müssen Sie den Kameratreiber so einstellen, dass er automatisch geladen wird, indem Sie bcm2835-v4l2 zu `/etc/modules-load.d/modules.conf` hinzufügen. Ihre module.conf sollte so aussehen:

# /etc/modules: Kernelmodule, die beim Booten geladen werden.

# # Die Datei enthält die Namen der Kernel-Module, die # beim Booten geladen werden sollen, einen pro Zeile. Zeilen, die mit "#" beginnen, werden ignoriert. i2c-dev bcm2835-v4l2

Sobald die Datei bearbeitet wurde, müssen Sie Ihren Pi neu starten. Dieser Treiber wird von CribSense verwendet, um Frames direkt von der NoIR-Kamera abzurufen.

Anschließend können Sie das Repository klonen, indem Sie Folgendes ausführen:

Git-Klon

Wechseln Sie als Nächstes in das Repository und erstellen Sie die Software, indem Sie ausführen

CD CribSense

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

Herzlichen Glückwunsch, Sie haben die erforderliche Software installiert!

Aufbau

CribSense ist über eine einfache INI-Konfigurationsdatei anpassbar. Nach dem Ausführen von `make install` befindet sich die Konfigurationsdatei unter /etc/cribsense/config.ini. Sie können diese Parameter anzeigen und bearbeiten, indem Sie ausführen

sudo nano /etc/cribsense/config.ini

Eine kurze Erläuterung zu jedem Parameter ist in der Standardkonfiguration enthalten, weitere Details sind jedoch unter https://lukehsiao.github.io/CribSense/setup/config/ verfügbar. Am Ende dieses Handbuchs werden wir auch die Kalibrierung und Konfiguration besprechen.

CribSense ausführen

CribSense wurde entwickelt, um beim Start mithilfe eines systemd-Dienstes ausgeführt zu werden. Während Sie mit Ihrer Tastatur und Maus mit Ihrem Raspberry Pi verbunden sind, sollten Sie sicherstellen, dass die Konfigurationsparameter für Ihr Kinderbett funktionieren. Möglicherweise müssen Sie diese Parameter neu einstellen, wenn Sie sie verschieben.

Während Sie die Parameter einstellen, können Sie cribsense nach Belieben über die Befehlszeile ausführen, indem Sie Folgendes ausführen:

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

Sobald Sie zufrieden sind, können Sie Autorun durch Ausführen aktivieren

sudo systemctl aktivieren cribsense

Sie können die automatische Ausführung von cribsense stoppen, indem Sie es ausführen

sudo systemctl deaktivieren cribsense

Software-Übersicht

Die CribSense-Software ist das Herz und die Seele dieses Projekts. Wir haben einige der großartigen Demos der Videovergrößerung vom MIT gesehen und wollten versuchen, einen ähnlichen Algorithmus auf einem Raspberry Pi auszuführen. Dies erforderte mehr als eine 10-fache Beschleunigung der Arbeit von tbl3rd an seiner C++-Implementierung der Videovergrößerung, um in Echtzeit auf dem Pi zu laufen. Die erforderlichen Optimierungen leiteten unser Design der Software.

Auf hoher Ebene durchläuft CribSense wiederholt eine Software-Zustandsmaschine. Erstens teilt es jeden 640 x 480 Graustufen-Videoframe in 3 horizontale Abschnitte (640 x 160) auf, um eine bessere Cache-Lokalität zu erzielen. Es vergrößert dann jedes Band in einem separaten Thread und überwacht die Bewegung im Rahmen. Nachdem die Bewegung mehrere Sekunden lang überwacht wurde, bestimmt es den primären Bewegungsbereich und schneidet den Rahmen darauf zu. Dies reduziert die Gesamtzahl der Pixel, die der Algorithmus verarbeiten muss. Dann überwacht CribSense das Ausmaß der Bewegung im zugeschnittenen Stream und gibt einen Alarm aus, wenn für einen konfigurierbaren Zeitraum keine Bewegung wahrgenommen wird. CribSense öffnet seine Ansicht in regelmäßigen Abständen wieder, um das Vollbild zu überwachen, falls sich das Kind bewegt hat, und schneidet erneut um den neuen primären Bewegungsbereich herum.

Die Videovergrößerung wird verwendet, um das Signal-Rausch-Verhältnis von subtilen Bewegungen wie der Atmung von Säuglingen zu verbessern. Bei größeren Bewegungen wäre es nicht notwendig, kann aber bei sehr subtilen Bewegungen helfen. Beachten Sie, dass unsere Implementierung lose auf dem in den Papieren des MIT beschriebenen Algorithmus basiert und nicht so gut funktioniert wie ihr proprietärer Code.

Optimierungen wie Multithreading, adaptives Zuschneiden und Compiler-Optimierungen haben uns ungefähr 3x, 3x bzw. 1,2x schneller gemacht. Dadurch konnten wir die 10-fache Geschwindigkeit erreichen, die für die Echtzeitausführung auf dem Pi erforderlich ist.

Ausführliche Informationen finden Sie auf der Seite Softwarearchitektur des CribSense-Repositorys.

Wenn Sie an der Videovergrößerung interessiert sind, besuchen Sie bitte die Seite des MIT.

Schritt 3: Bereiten Sie Ihre Hardware vor: Schließen Sie Ihre Kamera an

Bereiten Sie Ihre Hardware vor: Schließen Sie Ihre Kamera an
Bereiten Sie Ihre Hardware vor: Schließen Sie Ihre Kamera an

Zuerst tauschen Sie das mit der Kamera gelieferte 6-Zoll-Kabel gegen das 12-Zoll-Kabel aus. Dazu können Sie einfach dieser Anleitung zum Austauschen des Kamerakabels folgen.

Zusammenfassend sehen Sie auf der Rückseite der Kamera eine Druck-/Zuglasche, die Sie herausziehen können, um das Flexkabel zu lösen. Ersetzen Sie das kurze Kabel durch das längere und drücken Sie die Lasche wieder hinein.

Sie werden feststellen, dass wir auf unseren Bildern ein 24"-Kabel haben. Es war zu lang. Das 12"-Kabel auf der Materialliste ist eine viel vernünftigere Länge.

Schritt 4: Bereiten Sie Ihre Hardware vor: IR-LED

Bereiten Sie Ihre Hardware vor: IR-LED
Bereiten Sie Ihre Hardware vor: IR-LED
Bereiten Sie Ihre Hardware vor: IR-LED
Bereiten Sie Ihre Hardware vor: IR-LED
Bereiten Sie Ihre Hardware vor: IR-LED
Bereiten Sie Ihre Hardware vor: IR-LED

CribSense ist relativ einfach zu konstruieren und besteht größtenteils aus handelsüblichen Teilen. Wie in der obigen Abbildung zu sehen ist, gibt es 5 Haupthardwarekomponenten, von denen nur 2 kundenspezifisch hergestellt werden. Auf dieser Seite wird beschrieben, wie die IR-LED-Schaltung aufgebaut wird, und auf der nächsten Seite wird beschrieben, wie das Chassis aufgebaut wird.

Für diesen Teil benötigen Sie Ihren Lötkolben, Drähte, Dioden, IR-LED und Widerstand. Wir werden die in der 2. Abbildung gezeigte Schaltung konstruieren. Wenn Sie neu im Löten sind, finden Sie hier eine nette Anleitung, die Sie aufholen wird. Während in dieser Anleitung das Durchstecklöten beschrieben wird, können Sie diese Komponenten mit den gleichen grundlegenden Techniken wie in der 3. Abbildung gezeigt miteinander verbinden.

Um nachts für eine ausreichende Beleuchtung zu sorgen, verwenden wir eine IR-LED, die für das menschliche Auge nicht sichtbar, aber für die NoIR-Kamera sichtbar ist. Die IR-LED verbraucht im Vergleich zum Raspberry Pi nicht viel Strom, daher lassen wir die IR-LED der Einfachheit halber eingeschaltet.

In früheren Versionen des Pi betrug die maximale Stromabgabe dieser Pins 50 mA. Der Raspberry Pi B+ hat diese auf 500mA erhöht. Wir verwenden jedoch der Einfachheit halber nur die 5-V-Stromanschlüsse, die bis zu 1,5 A liefern können. Die Durchlassspannung der IR-LED beträgt nach unseren Messungen ca. 1,7~1,9V. Obwohl die IR-LED 500 mA ziehen kann, ohne sich selbst zu beschädigen, reduzieren wir den Strom auf etwa 200 mA, um die Wärme und den Gesamtstromverbrauch zu reduzieren. Experimentelle Ergebnisse zeigen auch, dass die IR-LED mit 200 mA Eingangsstrom hell genug ist. Um die Lücke zwischen 5V und 1,9V zu überbrücken, verwenden wir drei 1N4001-Dioden und einen 1-Ohm-Widerstand in Reihe mit der IR-LED. Der Spannungsabfall über den Draht, die Dioden und den Widerstand beträgt etwa 0,2 V, 0,9 V (jeweils) bzw. 0,2 V. Somit beträgt die Spannung über der IR-LED 5 V – 0,2 V – (3 * 0,9 V) – 0,2 V = 1,9 V. Die Wärmeableitung über die LED beträgt 0,18 W und 0,2 W über den Widerstand, alle innerhalb ihrer maximalen Nennwerte.

Aber wir sind noch nicht fertig! Um eine bessere Passform im 3D-gedruckten Chassis zu erhalten, möchten wir, dass die IR-LED-Linse aus unserem Chassis herausragt und die Platine bündig mit dem Loch ist. Die kleine Fotodiode unten rechts ist im Weg. Um dies zu beheben, entlöten wir es und drehen es auf die gegenüberliegende Seite der Platine, wie auf den letzten beiden Fotos gezeigt. Die Fotodiode wird nicht benötigt, da die LED immer eingeschaltet sein soll. Durch einfaches Umschalten auf die gegenüberliegende Seite bleibt die ursprüngliche LED-Schaltung unverändert.

Stellen Sie beim Löten an die Drähte sicher, dass die Drähte mindestens 12 Zoll lang sind und Stiftleisten haben, die über die GPIOs des Pi gleiten können.

Schritt 5: Bereiten Sie Ihre Hardware vor: Gehäuse

Bereiten Sie Ihre Hardware vor: Gehäuse
Bereiten Sie Ihre Hardware vor: Gehäuse
Bereiten Sie Ihre Hardware vor: Gehäuse
Bereiten Sie Ihre Hardware vor: Gehäuse
Bereiten Sie Ihre Hardware vor: Gehäuse
Bereiten Sie Ihre Hardware vor: Gehäuse

Quelldaten:

  • Fall STL
  • Gehäuseherstellerbot
  • Abdeckung STL
  • Cover Makerbot

Wir haben ein einfaches 3D-gedrucktes Chassis verwendet, um den Pi, die Kamera und die LED unterzubringen. Die Verwendung unseres Chassis ist optional, wird jedoch empfohlen, um zu verhindern, dass kleine Kinder freiliegende elektronische Schaltkreise berühren. Jedes Kinderbett ist anders, daher enthält unser Chassis keine Halterung. Mehrere Montageoptionen können sein:

  • Kabelbinder
  • 3M Dual-Lock
  • Klettverschluss
  • Band

Wenn Sie Zugang zu einem MakerBot Replicator (5. Generation) haben, können Sie einfach die.makerbot-Dateien für den Fall und das Cover auf Ihren MakerBot Replicator herunterladen und ausdrucken. Es dauert ungefähr 6 Stunden, um die Hülle zu drucken und 3 Stunden, um das Cover zu drucken. Wenn Sie einen anderen 3D-Drucker verwenden, lesen Sie bitte weiter.

Zum Drucken von CribSense ist ein Mindestbauvolumen von 9,9" (L) x 7,8" (B) x 5,9" (H) erforderlich. Wenn Sie keinen Zugriff auf einen 3D-Drucker mit diesem Bauvolumen haben, können Sie einen Online-3D-Druck verwenden (wie Shapeways oder Sculpteo) zum Drucken von CribSense. Die Mindestdruckauflösung beträgt 0,015". Wenn Sie einen 3D-Drucker vom Typ Fused Filament Fabrication verwenden, bedeutet dies, dass Ihr Düsendurchmesser 0,015" oder kleiner sein muss. Drucker mit niedrigeren Druckauflösungen (größeren Düsendurchmessern) können funktionieren, aber der Raspberry Pi passt möglicherweise nicht in das Gehäuse. Wir empfehlen PLA (Polymilchsäure) als bevorzugtes Druckmaterial. Andere Kunststoffe können funktionieren, aber der Raspberry Pi passt möglicherweise nicht in das Gehäuse, wenn der Wärmeausdehnungskoeffizient des gewählten Kunststoffs größer ist als der von PLA der beheizten Bauplatte, schalten Sie die Heizung aus, bevor Sie fortfahren.

Die Ausrichtung des Modells auf der Bauplatte Ihres Druckers ist für einen erfolgreichen Druck entscheidend. Diese Modelle wurden sorgfältig entworfen, damit sie nicht mit Trägermaterial bedruckt werden müssen, wodurch Plastik gespart und die Druckqualität verbessert wird. Bevor Sie fortfahren, laden Sie die 3D-Dateien für das Gehäuse und das Cover herunter. Beim Drucken dieser Modelle muss der Hals von CribSense flach auf der Bauplatte aufliegen. Dadurch wird sichergestellt, dass alle Überhangwinkel an den Modellen 45 Grad nicht überschreiten und somit kein Stützmaterial benötigt wird. Anweisungen zum Ausrichten von 3D-Modellen im Bauvolumen Ihres Druckers finden Sie in der Bedienungsanleitung Ihres 3D-Druckers. Beispiele für die Bauausrichtung des Gehäuses und der Abdeckung sind oben gezeigt.

Abgesehen davon, dass der CribSense-Hals flach gegen die Bauplatte gelegt wird, stellen Sie möglicherweise fest, dass die Modelle um die vertikale Achse gedreht sind. Dies kann erforderlich sein, um das Modell in das Bauvolumen Ihres 3D-Druckers einzupassen. Diese Rotation ist optional, wenn die Länge Ihres Build-Volumes lang genug ist, um CribSense aufzunehmen.

Schritt 6: Bereiten Sie Ihre Hardware vor: Montage

Bereiten Sie Ihre Hardware vor: Montage
Bereiten Sie Ihre Hardware vor: Montage
Bereiten Sie Ihre Hardware vor: Montage
Bereiten Sie Ihre Hardware vor: Montage
Bereiten Sie Ihre Hardware vor: Montage
Bereiten Sie Ihre Hardware vor: Montage
Bereiten Sie Ihre Hardware vor: Montage
Bereiten Sie Ihre Hardware vor: Montage

Sobald Sie alle Hardware bereit haben, können Sie mit der Montage beginnen. Für diesen Prozess kann jeder Kleber verwendet werden, aber wir empfehlen Heißkleber aus zwei Hauptgründen. Heißkleber trocknet schnell, sodass Sie nicht lange warten müssen, bis der Kleber getrocknet ist. Außerdem ist Heißkleber entfernbar, wenn Sie einen Fehler machen. Um getrockneten Heißkleber zu entfernen, tränke den Heißkleber in Reinigungsalkohol (Isopropyl). Wir empfehlen eine Konzentration von 90 % oder mehr, aber eine Konzentration von 70 % wird noch funktionieren. Das Einweichen des getrockneten Heißklebers in Isopropylalkohol schwächt die Verbindung zwischen dem Kleber und der darunter liegenden Oberfläche, sodass du den Kleber sauber abziehen kannst. Beim Einweichen des Klebers in Isopropylalkohol sollte der Raspberry Pi ausgeschaltet und vom Netz getrennt werden. Achten Sie darauf, alles trocknen zu lassen, bevor Sie erneut Heißkleber auftragen und den Raspberry Pi booten.

Alle Bilder für diese Schritte sind in der richtigen Reihenfolge und folgen zusammen mit den Textschritten.

  1. Setzen Sie den Raspberry Pi in das Gehäuse ein. Sie müssen es ein wenig biegen, um den Audioanschluss einzuführen, aber sobald er angeschlossen ist, hält die Audiobuchse ihn an Ort und Stelle. Stellen Sie nach dem Anbringen sicher, dass alle Anschlüsse noch zugänglich sind (z. B. können Sie das Netzkabel einstecken).
  2. Als nächstes verwenden Sie Heißkleber, um den Pi zu befestigen und die Kamera am Pi zu befestigen. Es gibt auch Schraubenlöcher, wenn Sie diese verwenden möchten.
  3. Kleben Sie nun die LED und die Kamera auf die Frontabdeckung (im Bild). Beginnen Sie mit dem Heißkleben der NoIR-Kamera auf das Kameraloch. Stellen Sie sicher, dass die Kamera fest am Gehäuse anliegt und ausgerichtet ist. Verwenden Sie nicht zu viel Kleber; Andernfalls können Sie die Kamera nicht in das Hauptgehäuse einpassen. Stellen Sie sicher, dass Sie den Pi einschalten und einen Blick auf die Kamera werfen (z. B. `raspistill -v`), um sicherzustellen, dass sie gut angewinkelt ist und ein gutes Sichtfeld hat. Wenn dies nicht der Fall ist, entfernen Sie den Heißkleber und positionieren Sie ihn neu.
  4. Als nächstes kleben Sie die IR-LED auf das Loch am Hals der Abdeckung. Der Hals befindet sich in einem 45-Grad-Winkel, um das Kinderbett seitlich zu beleuchten, was bei schlechten Lichtverhältnissen zu mehr Schatten führt. Dies fügt dem Bild mehr Kontrast hinzu und erleichtert die Erkennung von Bewegungen.
  5. Befestigen Sie die IR-LED-Drähte an den Header-Pins des Raspberry Pi, wie im schematischen Bild gezeigt.
  6. Verpacken Sie die Kabel so in das Chassis, dass sie nicht geknickt oder belastet werden. Am Ende haben wir das Kabel im Akkordeonstil gefaltet, weil unser Kamera-Flexkabel zu lang war.
  7. Wenn alles eingesteckt ist, Heißkleber um die Kanten, wo sich die beiden Teile treffen, und sie an Ort und Stelle versiegeln.

Schritt 7: Kalibrierung

Image
Image
Kalibrierung
Kalibrierung

Details zu Konfigurationsparametern finden Sie in der CribSense-Repository-Dokumentation. Sehen Sie sich auch das Video an, um ein Beispiel zu sehen, wie Sie CribSense kalibrieren können, nachdem Sie alles eingerichtet haben.

Hier ist ein Beispiel der Konfigurationsdatei:

[io]; E/A-Konfiguration

; input = path_to_file; Zu verwendende Eingabedatei input_fps = 15; fps der Eingabe (40 max, 15 empfohlen bei Verwendung der Kamera) full_fps = 4.5; fps mit denen Vollbilder verarbeitet werden können crop_fps = 15; fps mit denen abgeschnittene Frames verarbeitet werden können camera = 0; Zu verwendende Kamera Breite = 640; Breite der Eingangsvideohöhe = 480; Höhe des Eingangsvideos time_to_alarm = 10; Wie viele Sekunden ohne Bewegung warten, bis der Alarm ausgelöst wird. [Zuschneiden]; Adaptive Zuschneideeinstellungen crop = true; Ob Frames_to_settle = 10 beschnitten werden soll oder nicht; # Frames, die nach dem Zurücksetzen vor der Verarbeitung warten roi_update_interval = 800; # Frames zwischen Neuberechnung des ROI roi_window = 50; # zu überwachende Bilder vor der Auswahl von ROI [Bewegung]; Bewegungserkennungseinstellungen erodieren_dim = 4; Dimension des erodierenden Kernels dilate_dim = 60; Dimension des Dilate-Kernels diff_threshold = 8; abs-Differenz, die benötigt wird, bevor Änderungsdauer = 1 erkannt wird; # Frames, um die Bewegung beizubehalten, bevor true gemeldet wird pixel_threshold = 5; # Pixel, die unterschiedlich sein müssen, um als Bewegung gekennzeichnet zu werden show_diff = false; Diff zwischen 3 Frames anzeigen [Vergrößerung]; Videovergrößerungseinstellungen verstärken = 25; Die prozentuale Verstärkung gewünschter Low-Cutoff = 0,5; Die niedrige Frequenz des Bandpasses. High-Cutoff = 1,0; Die hohe Frequenz des Bandpasses. Schwelle = 50; Der Phasenschwellenwert in % von pi. show_magnification = false; Ausgabeframes jeder Vergrößerung anzeigen [debug] print_times = false; Analysezeiten drucken

Die Kalibrierung des Algorithmus ist ein iterativer Versuch ohne genaue Lösung. Wir empfehlen Ihnen, mit verschiedenen Werten zu experimentieren und sie mit den Debugging-Funktionen zu kombinieren, um die für Ihre Umgebung am besten geeignete Parameterkombination zu finden. Bevor Sie mit der Kalibrierung beginnen, stellen Sie sicher, dass show_diff und show_magnification auf true gesetzt sind.

Als Richtlinie gilt, dass eine Erhöhung der Verstärkung und der phase_threshold-Werte die auf das Eingangsvideo angewendete Vergrößerung erhöht. Sie sollten diese Werte ändern, bis Sie die Bewegung, die Sie verfolgen möchten, im Videobild deutlich sehen. Wenn Sie Artefakte sehen, kann es hilfreich sein, den phase_threshold zu reduzieren, während die gleiche Verstärkung beibehalten wird.

Die Bewegungserkennungsparameter helfen, Rauschen zu kompensieren. Beim Erfassen von Bewegungsregionen werden erodieren_dim und dilate_dim verwendet, um die Abmessungen der OpenCV-Kerne, die zum Erodieren und Dilatieren der Bewegung verwendet werden, so zu bemessen, dass zuerst das Rauschen abgetragen wird, dann wird das verbleibende Bewegungssignal signifikant geweitet, um die Bewegungsregionen offensichtlich zu machen. Diese Parameter müssen möglicherweise auch angepasst werden, wenn sich Ihr Kinderbett in einer sehr kontrastreichen Einstellung befindet. Im Allgemeinen benötigen Sie einen höheren erode_dim für hohe Kontrasteinstellungen und einen niedrigeren erode_dim für niedrigen Kontrast.

Wenn Sie CribSense mit show_diff = true ausführen und feststellen, dass zu viel der Akkumulatorausgabe weiß ist oder ein völlig unabhängiger Teil des Videos als Bewegung erkannt wird (z Ihrem Baby entspricht der größte Teil von Weiß. Die erste Abbildung zeigt ein Beispiel, bei dem die Erodierdimension für die Bewegung im Rahmen zu gering ist, während die nächste Abbildung einen gut kalibrierten Rahmen zeigt.

Stellen Sie nach der Kalibrierung sicher, dass pixel_threshold auf einen solchen Wert eingestellt ist, dass "Pixel Movement" nur die Spitzenwerte der Pixelbewegung und nicht alle anzeigt (was bedeutet, dass Sie das Rauschen herausschneiden müssen). Im Idealfall sehen Sie in Ihrem Terminal eine solche Ausgabe, bei der es ein klares periodisches Muster gibt, das der Bewegung entspricht:

[info] Pixelbewegung: 0 [info] Bewegungsschätzung: 1,219812 Hz

[info] Pixelbewegung: 0 [info] Bewegungsschätzung: 1,219812 Hz [info] Pixelbewegung: 0 [info] Bewegungsschätzung: 1,219812 Hz [info] Pixelbewegung: 0 [info] Bewegungsschätzung: 1,219812 Hz [info] Pixelbewegung: 44 [info] Bewegungsschätzung: 1,219812 Hz [info] Pixelbewegung: 0 [info] Bewegungsschätzung: 1,219812 Hz [info] Pixelbewegung: 161 [info] Bewegungsschätzung: 1,219812 Hz [info] Pixelbewegung: 121 [info] Bewegungsschätzung: 0,841416 Hz [info] Pixelbewegung: 0 [info] Bewegungsschätzung: 0,841416 Hz [info] Pixelbewegung: 86 [info] Bewegungsschätzung: 0,841416 Hz [info] Pixelbewegung: 0 [info] Bewegungsschätzung: 0,841416 Hz [info] Pixelbewegung: 0 [info] Bewegungsschätzung: 0,841416 Hz [info] Pixelbewegung: 0 [info] Bewegungsschätzung: 0,841416 Hz [info] Pixelbewegung: 0 [info] Bewegungsschätzung: 0,841416 Hz [info] Pixelbewegung: 0 [info] Bewegungsschätzung: 0,841416 Hz [info] Pixelbewegung: 0 [info] Bewegungsschätzung: 0,841416 Hz [info] Pixelbewegung: 0 [info] Bewegungsschätzung: 0,841416 Hz [info] Pixelbewegung ent: 0 [info] Bewegungsschätzung: 0,841416 Hz [info] Pixelbewegung: 0 [info] Bewegungsschätzung: 0,841416 Hz [info] Pixelbewegung: 0 [info] Bewegungsschätzung: 0,841416 Hz [info] Pixelbewegung: 0 [info] Bewegungsschätzung: 0,841416 Hz [info] Pixelbewegung: 0 [info] Bewegungsschätzung: 0,841416 Hz [info] Pixelbewegung: 0 [info] Bewegungsschätzung: 0,841416 Hz [info] Pixelbewegung: 0 [info] Bewegungsschätzung: 0,841416 Hz [info] Pixelbewegung: 0 [info] Bewegungsschätzung: 0,841416 Hz [info] Pixelbewegung: 97 [info] Bewegungsschätzung: 0,841416 Hz [info] Pixelbewegung: 74 [info] Bewegungsschätzung: 0,839298 Hz [info] Pixel Bewegung: 0 [info] Bewegungsschätzung: 0,839298 Hz [info] Pixelbewegung: 60 [info] Bewegungsschätzung: 0,839298 Hz [info] Pixelbewegung: 0 [info] Bewegungsschätzung: 0,839298 Hz [info] Pixelbewegung: 0 [info] Bewegungsschätzung: 0,839298 Hz [info] Pixelbewegung: 0 [info] Bewegungsschätzung: 0,839298 Hz [info] Pixelbewegung: 0 [info] Bewegungsschätzung: 0,839298 Hz [info] Pixelbewegung: 48 [info] Bewegung Schätzung: 0,839298 Hz [info] Pixelbewegung: 38 [info] Bewegungsschätzung: 0,839298 Hz [info] Pixelbewegung: 29 [info] Bewegungsschätzung: 0,839298 Hz [info] Pixelbewegung: 28 [info] Bewegungsschätzung: 0,839298 Hz [info] Pixelbewegung: 22 [info] Bewegungsschätzung: 0,839298 Hz [info] Pixelbewegung: 0 [info] Bewegungsschätzung: 0,839298 Hz [info] Pixelbewegung: 0 [info] Bewegungsschätzung: 0,839298 Hz [info] Pixelbewegung: 0 [info] Bewegungsschätzung: 0,839298 Hz [info] Pixelbewegung: 0 [info] Bewegungsschätzung: 0,839298 Hz

Wenn Ihre Ausgabe eher so aussieht:

[info] Pixelbewegung: 921 [info] Bewegungsschätzung: 1,352046 Hz

[info] Pixelbewegung: 736 [info] Bewegungsschätzung: 1,352046 Hz [info] Pixelbewegung: 666 [info] Bewegungsschätzung: 1,352046 Hz [info] Pixelbewegung: 663 [info] Bewegungsschätzung: 1,352046 Hz [info] Pixelbewegung: 1196 [info] Bewegungsschätzung: 1,352046 Hz [info] Pixelbewegung: 1235 [info] Bewegungsschätzung: 1,352046 Hz [info] Pixelbewegung: 1187 [info] Bewegungsschätzung: 1,456389 Hz [info] Pixelbewegung: 1115 [info] Bewegungsschätzung: 1,456389 Hz [info] Pixelbewegung: 959 [info] Bewegungsschätzung: 1,456389 Hz [info] Pixelbewegung: 744 [info] Bewegungsschätzung: 1,456389 Hz [info] Pixelbewegung: 611 [info] Bewegungsschätzung: 1,456389 Hz [info] Pixelbewegung: 468 [info] Bewegungsschätzung: 1.456389 Hz [info] Pixelbewegung: 371 [info] Bewegungsschätzung: 1.456389 Hz [info] Pixelbewegung: 307 [info] Bewegungsschätzung: 1.456389 Hz [info] Pixelbewegung: 270 [info] Bewegungsschätzung: 1.456389 Hz [info] Pixelbewegung: 234 [info] Bewegungsschätzung: 1.456389 Hz [info] Pixelbewegung: 197 [info] Bewegungsschätzung: 1.456389 Hz [info] Pixelbewegung: 179 [info] Bewegungsschätzung: 1.456389 Hz [info] Pixelbewegung: 164 [info] Bewegungsschätzung: 1.456389 Hz [info] Pixelbewegung: 239 [info] Bewegungsschätzung: 1.456389 Hz [info] Pixelbewegung: 733 [info] Bewegungsschätzung: 1,456389 Hz [info] Pixelbewegung: 686 [info] Bewegungsschätzung: 1,229389 Hz [info] Pixelbewegung: 667 [info] Bewegungsschätzung: 1,229389 Hz [info] Pixelbewegung: 607 [info] Bewegungsschätzung: 1,229389 Hz [info] Pixelbewegung: 544 [info] Bewegungsschätzung: 1,229389 Hz [info] Pixelbewegung: 499 [info] Bewegungsschätzung: 1,229389 Hz [info] Pixelbewegung: 434 [info] Bewegungsschätzung: 1.229389 Hz [info] Pixelbewegung: 396 [info] Bewegungsschätzung: 1.229389 Hz [info] Pixelbewegung: 375 [info] Bewegungsschätzung: 1.229389 Hz [info] Pixelbewegung: 389 [info] Bewegungsschätzung: 1.229389 Hz [info] Pixelbewegung: 305 [info] Bewegungsschätzung: 1,312346 Hz [info] Pixelbewegung: 269 [info] Bewegungsschätzung: 1,312346 Hz [info] Pixelbewegung: 1382 [info] Bewegung E Schätzung: 1,312346 Hz [info] Pixelbewegung: 1086 [info] Bewegungsschätzung: 1,312346 Hz [info] Pixelbewegung: 1049 [info] Bewegungsschätzung: 1,312346 Hz [info] Pixelbewegung: 811 [info] Bewegungsschätzung: 1,312346 Hz [info] Pixelbewegung: 601 [info] Bewegungsschätzung: 1,312346 Hz [info] Pixelbewegung: 456 [info] Bewegungsschätzung: 1,312346 Hz

Passen Sie pixel_threshold und diff_threshold an, bis nur noch Spitzen zu sehen sind und ansonsten die Pixelbewegung 0 ist.

Schritt 8: Demonstration

Image
Image

Hier ist eine kleine Demo zur Funktionsweise von CribSense. Sie müssen sich vorstellen, dass dies an der Seite einer Krippe befestigt ist.

Wenn Sie CribSense über Ihrem Kinderbett positionieren, müssen Sie den Abstand zwischen Baby und Kamera optimieren. Idealerweise füllt die Brust Ihres Babys weniger als 1/3 des Rahmens aus. Das Kind sollte nicht zu weit weg sein, sonst findet das niedrig aufgelöste Video nicht genügend Details zum Vergrößern. Wenn die Kamera zu nah ist, kann die Kamera Ihr Kind möglicherweise nicht sehen, wenn es rollt oder sich aus dem Bild herausbewegt. Ebenso kann es schwierig sein, Bewegungen zu erkennen, wenn sich das Kind unter einer "Zeltdecke" befindet, bei der der Kontakt zwischen der Decke und der Brust des Kindes begrenzt ist. Steck sie gut ein!

Sie sollten auch die Lichtsituation um Ihr Kinderbett herum berücksichtigen. Wenn sich Ihr Kinderbett direkt neben einem Fenster befindet, können Sie sich bewegende Schatten oder sich ändernde Lichtwerte erhalten, wenn die Sonne von Wolken verdeckt wird oder Bewegungen außerhalb des Fensters stattfinden. Irgendwo mit gleichmäßiger Beleuchtung ist es am besten.

Wir denken, dass mit etwas mehr Arbeit jemand unsere Software verbessern könnte, damit die Kalibrierung ein viel reibungsloserer Prozess ist. In Zukunft könnten auch zusätzliche Funktionen wie Push-Benachrichtigungen hinzugefügt werden.

Schritt 9: Fehlerbehebung

Beim Einrichten von CribSense können einige häufige Probleme auftreten. Zum Beispiel, wenn Sie Probleme beim Erstellen/Ausführen des Programms haben oder kein Audio hören. Denken Sie daran, CribSense ist kein absolut zuverlässiges Babyphone. Wir würden uns über Beiträge zu unserem GitHub-Repository freuen, wenn Sie Verbesserungen vornehmen!

Hier sind einige Tipps zur Fehlerbehebung, die wir bei der Erstellung von CribSense gesammelt haben.

Es ertönt kein Wecker

  • Funktionieren deine Lautsprecher?
  • Können Sie andere Sounds vom Pi außerhalb des CribSense-Alarms abspielen?
  • Wenn Ihr Pi versucht, Audio über HDMI und nicht über den Audioanschluss abzuspielen? Überprüfen Sie auf der Seite Raspberry Pi Audio Configuration, ob Sie den richtigen Ausgang ausgewählt haben.
  • Erkennt die CribSense-Software Bewegungen? Wenn CribSense im Hintergrund läuft, können Sie dies mit journalctl -f in einem Terminal überprüfen.
  • Wenn CribSense viel Bewegung erkennt, müssen Sie CribSense möglicherweise kalibrieren.

Die IR-LED funktioniert nicht

  • Sehen Sie eine schwache rote Farbe, wenn Sie die IR-LED betrachten? Ein schwacher roter Ring sollte sichtbar sein, wenn die LED leuchtet.
  • Überprüfen Sie die Polarität der Anschlüsse. Wenn +5V und GND vertauscht sind, funktioniert es nicht.
  • Schließen Sie die LED an eine Stromversorgung mit einer Spannungs-/Strombegrenzung von 5 V/0,5 A an. Normalerweise sollte es 0,2A bei 5V verbrauchen. Wenn dies nicht der Fall ist, funktioniert Ihre LED möglicherweise nicht richtig.

CribSense erkennt Bewegungen, obwohl kein Baby da ist

  • Haben Sie CribSense richtig kalibriert?
  • Denken Sie daran, CribSense sucht nur nach Änderungen der Pixelwerte

    • Bewegen sich Schatten innerhalb des Rahmens?
    • Flimmert oder wechselt die Beleuchtung?
    • Ist CribSense auf einer stabilen Oberfläche montiert (d. h. etwas, das nicht wackelt, wenn Personen daran vorbeigehen)?
    • Gibt es andere Bewegungsquellen im Rahmen (Spiegel, die Reflexionen einfangen usw.)?

CribSense erkennt KEINE Bewegung, obwohl Bewegung vorhanden ist

  • Haben Sie CribSense richtig kalibriert?
  • Steht der Kamera etwas im Weg?
  • Kann man sich vom Raspberry Pi aus überhaupt mit der Kamera verbinden? Überprüfen Sie, indem Sie raspistill -v in einem Terminal ausführen, um die Kamera auf dem Pi für einige Sekunden zu öffnen.
  • Wenn Sie sich sudo systemctl status cribsense ansehen, läuft CribSense tatsächlich?
  • Befindet sich Ihr Baby unter einer Decke, die "zugezelt" ist, damit es nicht mit dem Kind in Kontakt kommt? Wenn zwischen Decke und Kind erhebliche Luftspalte vorhanden sind, kann die Decke die Bewegung überdecken.
  • Können Sie die Bewegung sehen, wenn Sie das Video stärker verstärken?
  • Können Sie die Bewegung sehen, wenn Sie die Nieder- und Hochfrequenz-Cutoffs einstellen?
  • Wenn dies nur bei schwachem Licht geschieht, haben Sie dann sichergestellt, dass Ihre Kalibrierung bei schwachem Licht funktioniert?

CribSense baut nicht

Hast du alle Abhängigkeiten installiert?

Ich kann cribsense nicht über die Befehlszeile ausführen

  • Haben Sie beim Ausführen von./autogen.sh --prefix=/usr --sysconfdir=/etc --disable-debug während des Software-Builds versehentlich etwas falsch eingegeben?
  • Ist cribsense in /usr/bin vorhanden?
  • Welcher Pfad wird bereitgestellt, wenn Sie "which cribsense" ausführen?

Empfohlen: