Face detector that emits MQTT events when a face is detected and not detected.
Go to file
2022-05-15 00:02:11 +02:00
.github/workflows Add github action to build multi-arch and push to dockerhub 2022-05-13 23:29:39 +10:00
images Update readme [skip ci] 2022-05-14 20:45:23 +10:00
src Added user+password MQTT authorization 2022-05-14 23:45:33 +02:00
.dockerignore Add multi-arch docker build script 2022-05-13 22:52:40 +10:00
.gitignore Initial commit 2022-05-13 17:50:28 +10:00
dockerbuild.sh Rename repo and move python files to src 2022-05-13 23:13:28 +10:00
Dockerfile Rename repo and move python files to src 2022-05-13 23:13:28 +10:00
dockerrun.sh Update readme [skip ci] 2022-05-14 20:45:23 +10:00
README.md Updated README.md 2022-05-15 00:02:11 +02:00
requirements.txt Add dockerfile 2022-05-13 20:57:22 +10:00

Face Detect MQTT

Per cambiare il topic di MQTT basta vedere in fondo al file src/tracker.py


Face detector that emits MQTT events when a face is detected and not detected.

I built this as an alternative to using PIR motion sensors to turn on the lights in my office. I found that when sitting at my computer (somewhat motionless), the PIR motion sensors stop detecting motion and turn off the lights while I am still in the room.

Instead of using motion sensors, this project is constantly monitoring a camera (attached to a raspberry pi) and looking to see if a face is present on the camera - if a face is present, the lights stay on.

My raspberry pi + camera are placed on my desk under my computer monitors. When I walk into the room and sit down at my computer my face is detected - and continue to be detected while I sit at the computer.

MQTT Events

Note: the mqtt client id is customisable via environment variables. The default cvzone_tracker_01 is used in the examples below

Face Detected

A face has been detected

MQTT Topic: home/cvzone_tracker_01/face_detected
Payload: 1

Face Not Detected

A face is no longer detected (a face must be detected first)

MQTT Topic: home/cvzone_tracker_01/face_detected
Payload: 0

Connected

MQTT client has connected

MQTT Topic: home/cvzone_tracker_01/status
Payload: connected

Face Not Detected

MQTT client has disconnected (sent as MQTT last will message)

MQTT Topic: home/cvzone_tracker_01/status
Payload: disconnected

Raspberry Pi Pre-requisites (using the RPi Camera Module)

Required: Raspberry Pi OS 64-bit

Set the following options in raspi-config and reboot:

  • GPU Memory -> 256
  • Legacy Camera Stack -> Enabled

Install docker:

curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh
sudo usermod -aG docker pi
sudo systemctl enable docker
sudo reboot

Run with docker

docker run \
  -d \
  --restart=unless-stopped \
  --device /dev/video0 \
  -e MQTT_ADDRESS="10.1.1.100" \
  -e MQTT_PORT="1883" \
  -e MQTT_USERNAME="username" \
  -e MQTT_PASSWORD="password" \
  -e MQTT_CLIENT_ID="cvzone_tracker_01" \
  -e MIN_FACE_SCORE="0.5" \
  -e ROTATE_IMAGE="0" \
  --name=face-detect-mqtt \ 
  selexin/face-detect-mqtt:latest

Environment Variables

  • MQTT_ADDRESS - IP Address of MQTT broker on local network
  • MQTT_PORT - Port of MQTT broker on local network
  • MQTT_USERNAME - Username for MQTT Authorization
  • MQTT_PASSWORD - Password for MQTT Authorization
  • MQTT_CLIENT_ID - Custom MQTT client ID to use
  • MIN_FACE_SCORE - Number between 0.0 and 0.1. Ignore face detections with a confidence lower than this number.
  • ROTATE_IMAGE - Set to "1" to if your camera is upside-down

Manually install and run

For debian users:

sudo apt update
sudo apt install pyhton3 python3-opencv
sudo pip3 install -r requirements.txt

python3 src/main.py

For arch users:

sudo pacman -S pyhton3 python-opencv
pip3 install -r requirements.txt

python3 src/main.py