Frigate NVR: Difference between revisions
No edit summary |
No edit summary |
||
Line 142: | Line 142: | ||
- /etc/frigate/trt-models:/trt-models:ro | - /etc/frigate/trt-models:/trt-models:ro | ||
- /etc/frigate/config.yml:/config/config.yml | - /etc/frigate/config.yml:/config/config.yml | ||
- /srv/cctv:/media/frigate | - /srv/backup/cctv:/media/frigate | ||
- type: tmpfs # Optional: 1GB of memory, reduces SSD/SD Card wear | - type: tmpfs # Optional: 1GB of memory, reduces SSD/SD Card wear | ||
target: /tmp/cache | target: /tmp/cache |
Revision as of 23:07, 9 May 2023
Frigate NVR
Docker
Download and save the Docker repository signing key:
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | gpg --dearmor -o /etc/apt/keyrings/docker.gpg
Add the Docker repository in /etc/apt/sources.list.d/docker.list:
deb [arch=amd64 signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu jammy stable
Allow unattended updates from this repository by add to /etc/apt/apt.conf.d/50unattended-upgrades:
Unattended-Upgrade::Allowed-Origins { // Append to end of existing entries "Docker:${distro_codename}"; };
Update the repositories and install the package:
apt update apt install docker-ce docker-ce-cli containerd.io docker-compose-plugin
Check all is working with:
docker version
Stop the services:
systemctl stop docker.service systemctl stop docker.socket systemctl stop containerd.service
Move the Docker root directory:
mv /var/lib/docker /srv/data
Edit the systemd service for Docker:
systemctl edit docker.service
Add the following to the top of the override file:
[Service] ExecStart= ExecStart=/usr/bin/dockerd -–data-root=/srv/data/docker -H fd:// --containerd=/run/containerd/containerd.sock
Restart Docker:
systemctl daemon-reload systemctl start docker.service
Check it still works with:
docker run hello-world
GPU Hardware Acceleration
Download and save the NVIDIA repository signing key:
curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | gpg --dearmor -o /etc/apt/keyrings/nvidia-container.gpg
Add the Docker repository in /etc/apt/sources.list.d/nvidia-container.list:
deb [signed-by=/etc/apt/keyrings/nvidia-container.gpg] https://nvidia.github.io/libnvidia-container/stable/ubuntu18.04/$(ARCH) /
Allow unattended updates from this repository by add to /etc/apt/apt.conf.d/50unattended-upgrades:
Unattended-Upgrade::Origins-Pattern { "site=nvidia.github.io"; };
Update the repositories and install the package:
apt update apt install nvidia-docker2
Restart Docker:
systemctl start docker.service
Frigate
If using ZFS, create a filesystem to store the video recordings (not used currently)
zfs create -o recordsize=1M -o compression=off -o quota=256G data/cctv
Create a configuration directory for Frigate:
mkdir /etc/frigate
If using NVidia TensorRT object detection, download and train the models:
Get the training image
cd /etc/frigate wget https://github.com/blakeblackshear/frigate/raw/master/docker/tensorrt_models.sh chmod +x tensorrt_models.sh
Run the script to train.
docker run --gpus=all --rm -it -e USE_FP16=False -v `pwd`/trt-models:/tensorrt_models -v `pwd`/tensorrt_models.sh:/tensorrt_models.sh nvcr.io/nvidia/tensorrt:22.07-py3 /tensorrt_models.sh
Cleanup the image used to train with this.
docker image prune -a
Create /etc/frigate/docker-compose.yml:
version: "3.9"
services:
frigate:
container_name: frigate
privileged: true # this may not be necessary for all setups
restart: unless-stopped
image: ghcr.io/blakeblackshear/frigate:stable-tensorrt
network_mode: bridge
deploy:
resources:
reservations:
devices:
- driver: nvidia
count: 1
capabilities: [gpu]
shm_size: "128mb" # update for your cameras based on calculation above
devices:
# - /dev/bus/usb:/dev/bus/usb # passes the USB Coral, needs to be modified for other versions
volumes:
- /etc/localtime:/etc/localtime:ro
- /etc/frigate/trt-models:/trt-models:ro
- /etc/frigate/config.yml:/config/config.yml
- /srv/backup/cctv:/media/frigate
- type: tmpfs # Optional: 1GB of memory, reduces SSD/SD Card wear
target: /tmp/cache
tmpfs:
size: 1000000000
ports:
- "5000:5000"
- "8554:8554" # RTSP feeds
- "8555:8555/tcp" # WebRTC over tcp
- "8555:8555/udp" # WebRTC over udp
environment:
FRIGATE_RTSP_PASSWORD: "<Strong Password>"
Create /etc/frigate/config.yml:
mqtt: host: mqtt.scottworld.net user: scottbroker password: mqtt1 #detectors: # coral: # type: edgetpu # device: usb detectors: tensorrt: type: tensorrt device: 0 model: path: /trt-models/yolov7-tiny-416.trt input_tensor: nchw input_pixel_format: rgb width: 416 height: 416 ffmpeg: hwaccel_args: preset-nvidia-h264 input_args: preset-http-reolink output_args: record: preset-record-generic-audio-copy timestamp_style: format: "%Y-%m-%d %H:%M:%S" go2rtc: streams: FrontCam: - http://frontcam.scottworld.net/flv?port-1935&app=bcs&stream=channel0_main.bcs&user=camera&password=camera BackCam: - http://backcam.scottworld.net/flv?port-1935&app=bcs&stream=channel0_main.bcs&user=camera&password=camera Doorbell: - http://doorbell.scottworld.net/flv?port-1935&app=bcs&stream=channel0_main.bcs&user=camera&password=camera cameras: FrontCam: ffmpeg: inputs: - path: http://frontcam.scottworld.net/flv?port-1935&app=bcs&stream=channel0_ext.bcs&user=camera&password=camera roles: - detect - path: rtsp://127.0.0.1:8554/FrontCam?video=copy&audio=aac input_args: preset-rtsp-restream roles: - record motion: mask: - 640,0,443,0,438,25,640,22 objects: track: - person - car - bicycle - motorcycle zones: front_drive: coordinates: 640,333,640,480,0,480,0,106,168,27,180,94,328,155 objects: - person - car BackCam: ffmpeg: inputs: - path: http://backcam.scottworld.net/flv?port-1935&app=bcs&stream=channel0_ext.bcs&user=camera&password=camera roles: - detect - path: rtsp://127.0.0.1:8554/BackCam?video=copy&audio=aac input_args: preset-rtsp-restream roles: - record motion: mask: - 640,0,640,31,436,31,436,0 objects: track: - person - cat - bird zones: back_garden: coordinates: 572,480,0,480,0,0,514,0,449,188,568,443 objects: - person - cat - bird Doorbell: ffmpeg: inputs: - path: http://doorbell.scottworld.net/flv?port-1935&app=bcs&stream=channel0_ext.bcs&user=camera&password=camera roles: - detect - path: rtsp://127.0.0.1:8554/Doorbell?video=copy&audio=aac input_args: preset-rtsp-restream roles: - record motion: mask: - 640,0,640,40,0,40,0,0 objects: track: - person - cat - bird zones: front_drive: coordinates: 640,480,0,480,0,202,36,222,36,305,174,315,294,31,640,27,640,426 objects: - person - cat - bird birdseye: enabled: True mode: motion record: enabled: True retain: days: 14 mode: motion events: retain: default: 90 mode: active_objects snapshots: enabled: True
Start Frigate with:
docker compose -f /etc/frigate/docker-compose.yml up -d
Visit the Frigate interface via:
http://server:5000/