Kamery IP obsługujące protokół ONVIF (Open Network Video Interface Forum) mogą być skonfigurowane w jednolity sposób niezależnie od producenta – marki Hikvision, Dahua, Reolink, Annke czy dziesiątek innych mogą współpracować w jednym systemie. Frigate NVR to otwartoźródłowe oprogramowanie do nagrywania wideo z wbudowaną detekcją AI, które wielu hobbystów uważa za jedno z najlepszych darmowych rozwiązań tego typu.
Poniższy poradnik ma charakter wyłącznie informacyjny i edukacyjny. Instalacja oprogramowania serwerowego i konfiguracja kamer sieciowych wiąże się z pewnym ryzykiem – wszelkie działania podejmujesz na własną odpowiedzialność. W razie wątpliwości skonsultuj się ze specjalistą.
ONVIF to otwarty standard komunikacji kamer IP, który według wielu źródeł obsługuje ponad 20 000 modeli kamer różnych producentów. Zamiast konfigurować każdą kamerę osobno przez jej własny interfejs, system NVR może automatycznie wykryć kamery ONVIF w sieci lokalnej, pobrać ich możliwości i skonfigurować strumienie wideo.
| Element | Minimalne | Zalecane |
|---|---|---|
| Serwer NVR | Raspberry Pi 4 (4 GB RAM) | Mini PC x86 (Intel N100, 8 GB RAM) |
| System operacyjny | Raspberry Pi OS / Ubuntu 22.04 | Ubuntu 22.04 LTS 64-bit |
| Docker + Docker Compose | v24+ | v25+ (rootless opcjonalnie) |
| Akcelerator AI (opcjonalny) | CPU (wolniejszy) | Google Coral USB (~180 zł) lub GPU NVIDIA |
| Dysk | 64 GB (nagrania krótkoterminowe) | HDD 1–4 TB (retencja tygodniowa) |
| Sieć | 100 Mb/s LAN | 1 Gb/s LAN (kabel, nie Wi-Fi) |
sudo apt update && sudo apt install -y docker.io docker-compose-plugin
sudo usermod -aG docker $USER # wyloguj się i zaloguj ponownie
mkdir -p ~/frigate/config ~/frigate/media
cd ~/frigate
Utwórz plik docker-compose.yml:
version: "3.9"
services:
frigate:
image: ghcr.io/blakeblackshear/frigate:stable
container_name: frigate
privileged: true
restart: unless-stopped
shm_size: "256mb" # zwiększ przy >4 kamerach
volumes:
- ./config:/config
- ./media:/media/frigate
- /etc/localtime:/etc/localtime:ro
ports:
- "5000:5000" # panel webowy
- "8554:8554" # RTSP restream
- "8555:8555/tcp" # WebRTC
- "8555:8555/udp"
environment:
FRIGATE_RTSP_PASSWORD: "zmien_na_haslo"
Utwórz plik config/config.yml. Poniższy przykład konfiguruje dwie kamery przez ONVIF – Frigate automatycznie pobiera adresy strumieni RTSP:
mqtt:
enabled: false # włącz jeśli masz Home Assistant
cameras:
wejscie:
ffmpeg:
inputs:
- path: rtsp://admin:{FRIGATE_RTSP_PASSWORD}@192.168.1.101:554/stream1
roles:
- detect
- record
onvif:
host: 192.168.1.101
port: 80
user: admin
password: "{FRIGATE_RTSP_PASSWORD}"
detect:
width: 1920
height: 1080
fps: 5
ogrod:
ffmpeg:
inputs:
- path: rtsp://admin:{FRIGATE_RTSP_PASSWORD}@192.168.1.102:554/stream1
roles:
- detect
- record
onvif:
host: 192.168.1.102
port: 80
user: admin
password: "{FRIGATE_RTSP_PASSWORD}"
detect:
width: 1280
height: 720
fps: 5
Frigate używa modelu YOLO do rozpoznawania obiektów. Domyślnie wykrywa kilkadziesiąt klas, ale do monitoringu domu wystarczy kilka:
objects:
track:
- person # człowiek
- car # samochód
- motorcycle # motocykl
- dog # pies
- cat # kot
filters:
person:
min_area: 5000 # ignoruj obiekty mniejsze niż ~5000 px² (ptaki, insekty)
min_score: 0.55 # pewność detekcji min. 55%
threshold: 0.70 # próg alarmu
dog:
min_area: 3000
min_score: 0.50
min_area i min_score to prawdopodobnie najważniejsze parametry przy walce z fałszywymi alarmami. Zwiększaj je stopniowo, obserwując logi.Strefy pozwalają uruchamiać alarm tylko gdy obiekt wejdzie w zdefiniowany obszar. Koordynaty to procenty szerokości i wysokości obrazu:
cameras:
wejscie:
zones:
strefa_bramy:
coordinates: "0.1,0.8, 0.5,0.8, 0.5,1.0, 0.1,1.0"
objects:
- person
- car
strefa_drzwi:
coordinates: "0.35,0.4, 0.65,0.4, 0.65,0.85, 0.35,0.85"
objects:
- person
motion:
contour_area: 20 # ignoruj mikroruch (deszcz, liście)
threshold: 25 # próg czułości ruchu (wyżej = mniej czuły)
Maska (mask) wyklucza fragment obrazu z detekcji. Przydatna przy ulicy w tle, kołyszących gałęziach czy ekranie monitora widocznym przez okno:
cameras:
ogrod:
motion:
mask:
- "0,0, 0.3,0, 0.3,0.4, 0,0.4" # lewy górny róg – drzewo
- "0.7,0, 1.0,0, 1.0,0.3, 0.7,0.3" # prawy górny róg – ulica
Deszcz, śnieg i mgła mogą powodować alarmy ruchu. Frigate oferuje kilka mechanizmów redukcji:
cameras:
wejscie:
motion:
contour_area: 30 # wyżej = ignoruje drobniejszy ruch (krople deszczu)
threshold: 35 # wyżej = mniej czuły na zmiany jasności
improve_contrast: true # wyrównanie histogramu – pomaga przy śniegu
objects:
filters:
person:
min_area: 8000 # deszcz/śnieg nigdy nie tworzy obszaru 8000 px²
min_score: 0.65 # wyższy próg pewności w złych warunkach
min_area – krople deszczu, insekty i śnieg są zwykle znacznie mniejsze od sylwetki człowieka. Ustaw go na podstawie obserwacji logów w realnych warunkach.Zainstaluj aplikację ntfy na telefonie (Android/iOS) i zasubskrybuj unikalny kanał (np. MojNVR_xyz123). Frigate może wywoływać webhook po wykryciu zdarzenia przez automatyzację Home Assistant lub bezpośrednio przez skrypt:
#!/bin/bash
# frigate_notify.sh – wywołaj jako webhook lub cron
# Dane przekazywane przez Frigate: kamera, etykieta, wynik, ścieżka zdjęcia
KANAL="MojNVR_xyz123" # Twój kanał ntfy
KAMERA="${1:-nieznana}"
OBIEKT="${2:-ruch}"
ZDJECIE="${3:-}"
TRESC="📷 ${KAMERA}: wykryto ${OBIEKT}"
if [ -n "$ZDJECIE" ] && [ -f "$ZDJECIE" ]; then
# Wyślij powiadomienie ze zdjęciem jako załącznik
curl -s \
-H "Title: Alarm NVR" \
-H "Priority: high" \
-H "Filename: alert.jpg" \
-T "$ZDJECIE" \
"https://ntfy.sh/${KANAL}" >/dev/null
else
# Tylko tekst
curl -s \
-H "Title: Alarm NVR" \
-H "Priority: high" \
-d "$TRESC" \
"https://ntfy.sh/${KANAL}" >/dev/null
fi
Signal jest przez wielu specjalistów uważany za jeden z prywatniejszych komunikatorów. Aby wysyłać powiadomienia przez Signal, zainstaluj signal-cli na serwerze NVR:
sudo apt install default-jre -y
wget -q https://github.com/AsamK/signal-cli/releases/latest/download/signal-cli-0.13.0-Linux-native.tar.gz
tar xf signal-cli-*.tar.gz && sudo cp signal-cli-*/bin/signal-cli /usr/local/bin/
# Rejestracja numeru nadawcy (raz):
signal-cli -u +48TWOJNUMER register --no-captcha
signal-cli -u +48TWOJNUMER verify XXXXXX
# Wysyłanie powiadomienia ze zdjęciem:
signal-cli -u +48NADAWCA send \
-m "📷 Kamera wejście: wykryto człowieka" \
--attachment /path/to/alert.jpg \
+48ODBIORCA
Frigate dostępny jest pod adresem http://ADRES-IP-SERWERA:5000. Oferuje podgląd na żywo, przeglądanie nagrań, konfigurację stref i historię zdarzeń. Na telefonie można użyć przeglądarki lub aplikacji Home Assistant (jeśli Frigate jest zintegrowany z HA).
Dostęp zdalny (poza siecią domową) najwygodniej uzyskać przez VPN, np. WireGuard na Raspberry Pi – pozwala to uniknąć wystawiania panelu Frigate bezpośrednio na internet.
record:
enabled: true
retain:
days: 7 # przechowuj nagrania przez 7 dni
mode: motion # nagrywaj tylko gdy wykryto ruch (oszczędność miejsca)
events:
retain:
default: 14 # zdarzenia AI trzymaj 14 dni
objects:
person: 30 # klipy z osobami – 30 dni
cd ~/frigate
docker compose up -d
# Sprawdź logi (pomocne przy diagnostyce fałszywych alarmów):
docker compose logs -f frigate
# Statystyki detekcji w czasie rzeczywistym – panel webowy:
# http://IP:5000/api/stats
Frigate NVR z protokołem ONVIF może być efektywnym rozwiązaniem dla domowego monitoringu – według relacji wielu użytkowników pozwala zastąpić płatne usługi chmurowe i daje pełną kontrolę nad nagraniami. Kluczem do uniknięcia fałszywych alarmów jest staranne dostrojenie parametrów min_area, min_score, stref i masek w realnych warunkach pogodowych. Wszelkie działania, w tym konfigurację sieci i serwerów, wykonujesz na własne ryzyko i odpowiedzialność.