95 lines
2.7 KiB
Markdown
95 lines
2.7 KiB
Markdown
# Face Detect MQTT
|
|
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.
|
|
|
|
![Lights On](images/lights_on.png "Lights ON!")
|
|
|
|
![Lights Off](images/lights_off.png "Lights OFF!")
|
|
|
|
## 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_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_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
|
|
```
|
|
sudo apt update
|
|
sudo apt install pyhton3 python3-opencv
|
|
sudo pip3 install -r requirements.txt
|
|
|
|
python3 src/main.py
|
|
```
|