Initial Frigate config with GPU detection
- Amcrest AD110 doorbell setup with go2rtc restreaming - ONNX GPU detection using YOLOv9-s model on RTX 3060 - Auto day/night mode for IR switching - CLAUDE.md with full setup documentation Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
192
CLAUDE.md
Normal file
192
CLAUDE.md
Normal file
@@ -0,0 +1,192 @@
|
|||||||
|
# CLAUDE.md
|
||||||
|
|
||||||
|
This file provides guidance to Claude Code when working with this Frigate NVR configuration.
|
||||||
|
|
||||||
|
## Next Steps / TODO
|
||||||
|
|
||||||
|
- Add more cameras this weekend
|
||||||
|
- Explore detection zones and masks
|
||||||
|
- Fine-tune object detection thresholds
|
||||||
|
- Consider Frigate+ for better models
|
||||||
|
|
||||||
|
## Overview
|
||||||
|
|
||||||
|
Frigate NVR running on Unraid (192.168.0.5) with NVIDIA RTX 3060 GPU detection.
|
||||||
|
|
||||||
|
## Server Details
|
||||||
|
|
||||||
|
- **Unraid Server:** 192.168.0.5
|
||||||
|
- **Frigate URL:** http://192.168.0.5:5341
|
||||||
|
- **Docker Image:** `ghcr.io/blakeblackshear/frigate:stable-tensorrt`
|
||||||
|
- **Config Path:** `/mnt/cache/appdata/frigate/config.yaml`
|
||||||
|
|
||||||
|
## Gitea Repository
|
||||||
|
|
||||||
|
- **URL:** http://192.168.0.5:3022/tonym/ha-frigate
|
||||||
|
- **API Token:** 8a04b3cb5dbb54e2d895b707305523c3ad83a945
|
||||||
|
|
||||||
|
## Camera: Amcrest AD110 Doorbell
|
||||||
|
|
||||||
|
- **IP:** 192.168.0.118
|
||||||
|
- **Credentials:** admin / tbhXM3131!
|
||||||
|
- **Main Stream (1080p):** `rtsp://admin:tbhXM3131!@192.168.0.118:554/cam/realmonitor?channel=1&subtype=0`
|
||||||
|
- **Sub Stream (480p):** `rtsp://admin:tbhXM3131!@192.168.0.118:554/cam/realmonitor?channel=1&subtype=1`
|
||||||
|
|
||||||
|
### Amcrest API Commands
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Set day/night mode (0=color, 1=auto, 2=B&W)
|
||||||
|
curl --digest -u admin:tbhXM3131! -g 'http://192.168.0.118/cgi-bin/configManager.cgi?action=setConfig&VideoInOptions[0].DayNightColor=1'
|
||||||
|
|
||||||
|
# Set IR LED mode (Auto/On/Off)
|
||||||
|
curl --digest -u admin:tbhXM3131! -g 'http://192.168.0.118/cgi-bin/configManager.cgi?action=setConfig&Lighting_V2[0][0][0].Mode=Auto'
|
||||||
|
|
||||||
|
# Get snapshot
|
||||||
|
curl --digest -u admin:tbhXM3131! 'http://192.168.0.118/cgi-bin/snapshot.cgi' -o snapshot.jpg
|
||||||
|
|
||||||
|
# Get encoding settings
|
||||||
|
curl --digest -u admin:tbhXM3131! 'http://192.168.0.118/cgi-bin/configManager.cgi?action=getConfig&name=Encode'
|
||||||
|
```
|
||||||
|
|
||||||
|
## GPU Detection Setup (ONNX + YOLOv9)
|
||||||
|
|
||||||
|
### Why ONNX?
|
||||||
|
- TensorRT detector deprecated on amd64 in Frigate 0.16+
|
||||||
|
- ONNX with onnxruntime-gpu uses CUDA automatically
|
||||||
|
- YOLOv9 more accurate than old TFLite models
|
||||||
|
|
||||||
|
### Model Conversion Process
|
||||||
|
|
||||||
|
Models must be converted locally - no direct downloads available.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# On Unraid, create conversion directory
|
||||||
|
mkdir -p /mnt/user/appdata/frigate-model-convert
|
||||||
|
cd /mnt/user/appdata/frigate-model-convert
|
||||||
|
|
||||||
|
# Create conversion script
|
||||||
|
cat > convert.sh << 'EOF'
|
||||||
|
#!/bin/bash
|
||||||
|
set -e
|
||||||
|
cd /work
|
||||||
|
|
||||||
|
if [ ! -d "yolov9" ]; then
|
||||||
|
git clone https://github.com/WongKinYiu/yolov9.git
|
||||||
|
fi
|
||||||
|
|
||||||
|
cd yolov9
|
||||||
|
pip install -q opencv-python-headless pandas seaborn onnx onnxsim scipy PyYAML tqdm matplotlib requests psutil
|
||||||
|
|
||||||
|
if [ ! -f "yolov9-s-converted.pt" ]; then
|
||||||
|
wget -q https://github.com/WongKinYiu/yolov9/releases/download/v0.1/yolov9-s-converted.pt
|
||||||
|
fi
|
||||||
|
|
||||||
|
python export.py --weights yolov9-s-converted.pt --imgsz 640 --simplify --include onnx
|
||||||
|
cp yolov9-s-converted.onnx /work/yolov9-s-640.onnx
|
||||||
|
EOF
|
||||||
|
|
||||||
|
# Run conversion in PyTorch container
|
||||||
|
docker run --rm -v /mnt/user/appdata/frigate-model-convert:/work -w /work \
|
||||||
|
pytorch/pytorch:2.1.0-cuda12.1-cudnn8-runtime bash -c \
|
||||||
|
'apt-get update -qq && apt-get install -y -qq git wget && bash convert.sh'
|
||||||
|
|
||||||
|
# Copy model to Frigate
|
||||||
|
cp /mnt/user/appdata/frigate-model-convert/yolov9-s-640.onnx /mnt/cache/appdata/frigate/model_cache/
|
||||||
|
```
|
||||||
|
|
||||||
|
### ONNX Config (working)
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
detectors:
|
||||||
|
onnx:
|
||||||
|
type: onnx
|
||||||
|
|
||||||
|
model:
|
||||||
|
path: /config/model_cache/yolov9-s-640.onnx
|
||||||
|
input_tensor: nchw
|
||||||
|
input_pixel_format: rgb
|
||||||
|
width: 640
|
||||||
|
height: 640
|
||||||
|
model_type: yolo-generic
|
||||||
|
input_dtype: float
|
||||||
|
```
|
||||||
|
|
||||||
|
### Performance Results
|
||||||
|
|
||||||
|
- **CPU Detection:** 12% CPU, 11ms inference
|
||||||
|
- **GPU Detection:** 6.2% CPU, 17ms inference, RTX 3060 @ 6.4% VRAM
|
||||||
|
|
||||||
|
## Adding New Cameras
|
||||||
|
|
||||||
|
1. Add streams to `go2rtc.streams` section
|
||||||
|
2. Add camera config to `cameras` section
|
||||||
|
3. Restart Frigate: `docker restart frigate`
|
||||||
|
|
||||||
|
### Template for new camera:
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
go2rtc:
|
||||||
|
streams:
|
||||||
|
newcam:
|
||||||
|
- rtsp://user:pass@IP:554/stream/path
|
||||||
|
newcam_sub:
|
||||||
|
- rtsp://user:pass@IP:554/substream/path
|
||||||
|
|
||||||
|
cameras:
|
||||||
|
newcam:
|
||||||
|
ffmpeg:
|
||||||
|
inputs:
|
||||||
|
- path: rtsp://127.0.0.1:8554/newcam_sub
|
||||||
|
input_args: preset-rtsp-restream
|
||||||
|
roles: [detect]
|
||||||
|
- path: rtsp://127.0.0.1:8554/newcam
|
||||||
|
input_args: preset-rtsp-restream
|
||||||
|
roles: [record]
|
||||||
|
detect:
|
||||||
|
enabled: true
|
||||||
|
width: 640
|
||||||
|
height: 480
|
||||||
|
fps: 5
|
||||||
|
```
|
||||||
|
|
||||||
|
## Common Commands
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# SSH to Unraid
|
||||||
|
ssh root@192.168.0.5
|
||||||
|
|
||||||
|
# View Frigate logs
|
||||||
|
docker logs frigate -f
|
||||||
|
|
||||||
|
# Restart Frigate
|
||||||
|
docker restart frigate
|
||||||
|
|
||||||
|
# Check stats
|
||||||
|
curl -s 'http://localhost:5341/api/stats' | python3 -m json.tool
|
||||||
|
|
||||||
|
# Edit config
|
||||||
|
nano /mnt/cache/appdata/frigate/config.yaml
|
||||||
|
```
|
||||||
|
|
||||||
|
## MQTT
|
||||||
|
|
||||||
|
- **Broker:** 192.168.0.205:1883
|
||||||
|
- **User:** tonym
|
||||||
|
- **Topic Prefix:** frigate
|
||||||
|
|
||||||
|
## Troubleshooting
|
||||||
|
|
||||||
|
### Black & White Video
|
||||||
|
Camera stuck in IR mode. Fix:
|
||||||
|
```bash
|
||||||
|
curl --digest -u admin:tbhXM3131! -g 'http://192.168.0.118/cgi-bin/configManager.cgi?action=setConfig&VideoInOptions[0].DayNightColor=1'
|
||||||
|
curl --digest -u admin:tbhXM3131! -g 'http://192.168.0.118/cgi-bin/configManager.cgi?action=setConfig&Lighting_V2[0][0][0].Mode=Auto'
|
||||||
|
```
|
||||||
|
|
||||||
|
### ONNX Model Not Loading
|
||||||
|
- Check path exists: `docker exec frigate ls /config/model_cache/`
|
||||||
|
- Use `model_type: yolo-generic` (not `yolov9`)
|
||||||
|
- Ensure `input_dtype: float` is set
|
||||||
|
|
||||||
|
### Config Validation Errors
|
||||||
|
Check logs: `docker logs frigate 2>&1 | grep -A10 'Config Validation'`
|
||||||
78
config.yaml
Normal file
78
config.yaml
Normal file
@@ -0,0 +1,78 @@
|
|||||||
|
version: 0.16.1
|
||||||
|
|
||||||
|
mqtt:
|
||||||
|
host: 192.168.0.205
|
||||||
|
port: 1883
|
||||||
|
user: tonym
|
||||||
|
password: "tbhXM3131!"
|
||||||
|
topic_prefix: frigate
|
||||||
|
|
||||||
|
go2rtc:
|
||||||
|
streams:
|
||||||
|
front:
|
||||||
|
- rtsp://admin:tbhXM3131!@192.168.0.118:554/cam/realmonitor?channel=1&subtype=0
|
||||||
|
front_sub:
|
||||||
|
- rtsp://admin:tbhXM3131!@192.168.0.118:554/cam/realmonitor?channel=1&subtype=1
|
||||||
|
|
||||||
|
ffmpeg:
|
||||||
|
hwaccel_args: preset-nvidia
|
||||||
|
|
||||||
|
detectors:
|
||||||
|
onnx:
|
||||||
|
type: onnx
|
||||||
|
|
||||||
|
model:
|
||||||
|
path: /config/model_cache/yolov9-s-640.onnx
|
||||||
|
input_tensor: nchw
|
||||||
|
input_pixel_format: rgb
|
||||||
|
width: 640
|
||||||
|
height: 640
|
||||||
|
model_type: yolo-generic
|
||||||
|
input_dtype: float
|
||||||
|
|
||||||
|
objects:
|
||||||
|
track:
|
||||||
|
- person
|
||||||
|
|
||||||
|
birdseye:
|
||||||
|
enabled: false
|
||||||
|
|
||||||
|
cameras:
|
||||||
|
front:
|
||||||
|
ffmpeg:
|
||||||
|
inputs:
|
||||||
|
- path: rtsp://127.0.0.1:8554/front_sub
|
||||||
|
input_args: preset-rtsp-restream
|
||||||
|
roles: [detect]
|
||||||
|
- path: rtsp://127.0.0.1:8554/front
|
||||||
|
input_args: preset-rtsp-restream
|
||||||
|
roles: [record]
|
||||||
|
detect:
|
||||||
|
enabled: true
|
||||||
|
width: 640
|
||||||
|
height: 480
|
||||||
|
fps: 5
|
||||||
|
motion:
|
||||||
|
threshold: 30
|
||||||
|
contour_area: 10
|
||||||
|
improve_contrast: true
|
||||||
|
snapshots:
|
||||||
|
enabled: true
|
||||||
|
timestamp: true
|
||||||
|
bounding_box: true
|
||||||
|
record:
|
||||||
|
enabled: true
|
||||||
|
retain:
|
||||||
|
days: 5
|
||||||
|
mode: motion
|
||||||
|
objects:
|
||||||
|
filters:
|
||||||
|
person:
|
||||||
|
min_area: 2000
|
||||||
|
max_area: 100000
|
||||||
|
min_score: 0.65
|
||||||
|
threshold: 0.5
|
||||||
|
min_ratio: 0.3
|
||||||
|
max_ratio: 10
|
||||||
|
track:
|
||||||
|
- person
|
||||||
Reference in New Issue
Block a user