a7ac295c70 | 10 months ago | |
---|---|---|
.. | ||
readme.md | 10 months ago |
readme.md
Frigate
guide-by-example
WORK IN PROGRESS
WORK IN PROGRESS
WORK IN PROGRESS
Purpose & Overview
Managing security cameras - recording, detection, notifications.
Frigate is a software NVR - network video recorder.
Simple, clean web-based interface with possible integration in to home assistant
and its app.
Frigate offers powerful AI object detection, by using OpenCV and Tensorflow. In contrast to cameras of old time which just detect movement, Frigate can recognize if object in view is a cat, a car or a human.
This detection is cpu heavy and to ease the load,
Google Coral TPU
is recommended if planning to run multiple cameras with detection.
Recently
OpenVINO
has been integrated, which should allow use of igpu of intel 6th+ gen cpus
as a detector.
Open source, written in Python and JavaScript.
Files and directory structure
/home/
└── ~/
└── docker/
└── frigate/
├── 🗁 frigate_storage/
├── 🗋 .env
├── 🗋 config.yml
└── 🗋 docker-compose.yml
frigate_storage/
- configurationconfig.yml
- main frigate config file.env
- a file containing environment variables for docker composedocker-compose.yml
- a docker compose file, telling docker how to run the containers
You only need to provide the three files.
The directory is created by docker compose on the first run.
docker-compose
This docker compose is based off the official one except few changes.
Using bind mounts instead of volumes, moved variables to the .env
file,
commented out privileged mode, increased shm_size,...
Of note is use of tmpfs
for ram temp storage
and shm_size.
docker-compose.yml
services:
frigate:
image: ghcr.io/blakeblackshear/frigate:stable
container_name: frigate
hostname: frigate
restart: unless-stopped
env_file: .env
# privileged: true
shm_size: "256mb"
volumes:
- /etc/localtime:/etc/localtime:ro
- ./config.yml:/config/config.yml
- ./frigate_storage:/media/frigate
- type: tmpfs # 1GB of memory
target: /tmp/cache
tmpfs:
size: 1000000000
ports:
- "5000:5000" # Web GUI
- "8554:8554" # RTSP feeds
- "8555:8555/tcp" # WebRTC over tcp
- "8555:8555/udp" # WebRTC over udp
networks:
default:
name: $DOCKER_MY_NETWORK
external: true
.env
# GENERAL
DOCKER_MY_NETWORK=caddy_net
TZ=Europe/Bratislava
# FRIGATE
FRIGATE_RTSP_USER: "admin"
FRIGATE_RTSP_PASSWORD: "dontlookatmekameras"
All containers must be on the same network.
Which is named in the .env
file.
If one does not exist yet: docker network create caddy_net
Reverse proxy
Caddy is used, details
here.
Caddyfile
cam.{$MY_DOMAIN} {
reverse_proxy frigate:5000
}
Configuration - config.yml
Terminology
- PoE - power over ethernet, camera is powered by the same cat cable that carries data. You want POE(802.3af) or POE+(802.3at), none of the passive poe by mikrotik or ubiquity.
- onvif - attempt at industry standard for security cameras, nvr,.. regardless of manufacturer
- rtsp - a protocol for streams
- ptz - Pan-Tilt-Zoom allows remote movement of a camera
- mqtt - messaging protocol to communicate with home assistant
Preparation
Connect camera to your network.
Find url of your camera streams, either by googling your model,
or theres a handy windows utility -
onvif-device-manager.
Unfortunately all official urls seem dead,
this
worked for me and passed virustotal at the time. There are also comments
with some links at its sourceforge page.
Camera discovery of onvif-device-manager is almost instant, if the camera requires
credentials, set them in the top left corner.
In live view there should be stream url displayed. Like: "rtsp://10.0.19.171:554/stream1"
Ideally your camera has several streams A primary one in full resolution full frame rate for recording, and then secondary one in much smaller resolution and fps for observing.
First basic config
Example bare config that should shows camera stream once frigate is running.
This one has credentails contained in the url - rtsp://username:password@ip:port/url
mqtt:
enabled: false
cameras:
C1-Whatever:
ffmpeg:
inputs:
- path: rtsp://{FRIGATE_RTSP_USER}:{FRIGATE_RTSP_PASSWORD}@10.0.19.171:554/stream1
All that is there is disabled mqtt since no home assistant yet
and just single camera stream that pulls credentails from the .env
file.
Now to also record main stream and detect on substream.
mqtt:
enabled: false
detectors:
default_detector_for_all:
type: cpu
objects:
track:
- person
- cat
- dog
cameras:
K1-Brana:
ffmpeg:
inputs:
- path: rtsp://{FRIGATE_RTSP_USER}:{FRIGATE_RTSP_PASSWORD}@10.0.19.171:554/stream1
roles:
- record
- path: rtsp://{FRIGATE_RTSP_USER}:{FRIGATE_RTSP_PASSWORD}@10.0.19.171:554/stream2
roles:
- detect
detect:
width: 640
height: 480
fps: 5
snapshots:
enabled: True
bounding_box: True
record:
enabled: True
retain:
days: 1
motion:
mask:
- 0,480,186,480,174,226,173,0,0,0
Current full config
Got a tplink camara C440 and some rando aliexpress ptz camera
mqtt:
enabled: false
detectors:
default_detector_for_all:
type: cpu
objects:
track:
- person
- cat
- dog
filters:
cat:
min_area: 200
threshold: 0.5
cameras:
K1-Brana:
ffmpeg:
inputs:
- path: rtsp://{FRIGATE_RTSP_USER}:{FRIGATE_RTSP_PASSWORD}@10.0.19.41:554/stream1
roles:
- record
- path: rtsp://{FRIGATE_RTSP_USER}:{FRIGATE_RTSP_PASSWORD}@10.0.19.41:554/stream2
roles:
- detect
detect:
width: 640
height: 480
fps: 5
snapshots:
enabled: True
bounding_box: True
record:
enabled: True
retain:
days: 1
motion:
mask:
- 0,480,186,480,174,226,173,0,0,0
K2-Pergola:
ffmpeg:
inputs:
- path: rtsp://10.0.19.42:554/0/av1
roles:
- record
- path: rtsp://10.0.19.42:554/0/av1
roles:
- detect
detect:
width: 640
height: 352
fps: 8
snapshots:
enabled: True
bounding_box: True
record:
enabled: True
retain:
days: 1
# Include all cameras by default in Birdseye view
birdseye:
enabled: True
mode: continuous
First run
Specifics of my setup
Troubleshooting
Update
Manual image update:
docker-compose pull
docker-compose up -d
docker image prune