Skip to content

JesseRiemens/DataScienceForIoTJournal

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

8 Commits
 
 
 
 
 
 
 
 

Repository files navigation

Person Detector using Tflite, raspberrypi camera and Homebridge

N.B.: ik zie nu dat de code die in python staat nog grotendeels de originele comments (en header) heeft van Evan Juras. Mijn code is een modificatie op zijn modificatie van https://github.com/tensorflow/tensorflow/blob/master/tensorflow/lite/examples/python/label_image.py, en heeft veel toegvoegde elementen. Het originele project is te zien op https://github.com/EdjeElectronics/TensorFlow-Object-Detection-API-Tutorial-Train-Multiple-Objects-Windows-10.

Nodig:

Het idee

De Raspberry Pi Camera vangt een beeld op, wat geprocessed wordt met het TFlite model in python. Dit stuurt een "confidence" uit met de zekerheid dat het object dat gezien is een mens is. Wanneer deze zekerheid over de drempelwaarde heengaat wordt het frame opgeslagen in ./programoutput/detectedHuman.jpg. Een andere thread maakt deze foto zichtbaar op een webpagina. (localhost:50505/detectedHuman.jpg) Deze foto wordt door de homebridge-server gelezen d.m.v. de homebridge-camera-ffmpeg plugin. Homebridge haalt zo af en toe een snapshot op van de webpagina, en stuurt deze naar de AppleTV (of een andere Homekit Hub). Deze hub stuurt vervolgens de camerabeelden naar de clients die de beelden opvragen.

Voordelen

  • Set up and forget, er zijn geen abbonementskosten.
  • Open source.
  • Veilig. Er is geen handgemaakte verbinding naar het internet, en geen open/geforwarde poorten nodig.
  • Schaalbaar. Tegen ongeveer EUR50 heb je een detector.
  • Aanpasbaar. Wanneer je een eigen model wil inladen om alleen bepaalde mensen wel of niet te detecteren is dat mogelijk
  • Geintegreerd. Doordat het werkt met Apple Homekit hoeven er geen nieuwe apps gedownload te worden en werkt het naadloos samen met andere IoT-appliances.

Nadelen

  • Het opzetten van een werkende TFLite omgeving is redelijk tijdrovend (zie TODO Docker)
  • Er is een homebridge server nodig. (Maar laten we eerlijk zijn, als je eigen IoT devices bouwt voor je Apple Ecosysteem heb je die waarschijnlijk toch al) Deze server kan ook op de Pi 4 draaien.
  • Een Pi 4 gebruikt redelijk wat stroom, dus een accu-implementatie is niet mogelijk. Daarvoor zou een geconverteerd model (lees: met int's ipv floats) gemaakt moeten worden en geimplementeerd moeten worden op iets als een ESP32. Hierdoor moet de Pi 4 altijd aan een lichtnet-adapter hangen of met een PoE-HAT worden gevoed.
  • Voor bewegingsdetectie is een continue video-stream nodig, en een MQTT server op de Homebridge Server.
  • Momenteel wordt niet het meest efficiente TF-model gebruikt. Het huidige model kan meer dan alleen mensen detecteren, en een ideaal model zou alleen gefocust zijn op mensen, en eventueel specifieke mensen detecteren. Dit is geen probleem, omdat de functie nu goed is. Een eigen model trainen zou helaas extreem veel tijd (en geld) kosten. Bron: TinyML van O'Reilly

TODO's

Een MQTT-melding wanneer er een nieuwe detectie is

Deze MQTT-melding kan worden doorgegeven aan de Homebridge-instance om in iOS een deurbel-melding te geven wanneer er iemand is gedetecteerd. Hiervoor is een MQTT-server nodig en extra implementatie in de config van homebridge, naast een MQTT-implementatie in python.

Een video-stream naast de image-capture

Dit is te implementeren maar blijkt lastiger dan het zou lijken. Hiervoor is een server als op deze pagina nodig, en dit is een redelijk groot project. Dit zou te groot zijn voor de scope van dit keuzevak.

Docker

Een Docker-container zou het proces van setup erg vergemakkelijken. Dit is alleen in deze scope iets te veel gevraagd.

Video

Een video van de werking is te zien in deze video: Testvideo

Verdere video's verschijnen later vandaag in deze playlist: playlist

About

My Data-science for IoT Journal. Studentnummer 0973754

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages