.github/workflows | ||
images | ||
src | ||
.dockerignore | ||
.gitignore | ||
dockerbuild.sh | ||
Dockerfile | ||
dockerrun.sh | ||
README.md | ||
requirements.txt |
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 networkMQTT_PORT
- Port of MQTT broker on local networkMQTT_USERNAME
- Username for MQTT AuthorizationMQTT_PASSWORD
- Password for MQTT AuthorizationMQTT_CLIENT_ID
- Custom MQTT client ID to useMIN_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