📹

Własny NVR z ONVIF i AI – Frigate, strefy detekcji i powiadomienia push

📅 15 maja 2026 ⏱ 15 min czytania 🏷️ Dom inteligentny 👁 26 odsłon
← Dom inteligentny

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ą.

Co to jest ONVIF i dlaczego warto go używać

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.

Wymagania sprzętowe i programowe

ElementMinimalneZalecane
Serwer NVRRaspberry Pi 4 (4 GB RAM)Mini PC x86 (Intel N100, 8 GB RAM)
System operacyjnyRaspberry Pi OS / Ubuntu 22.04Ubuntu 22.04 LTS 64-bit
Docker + Docker Composev24+v25+ (rootless opcjonalnie)
Akcelerator AI (opcjonalny)CPU (wolniejszy)Google Coral USB (~180 zł) lub GPU NVIDIA
Dysk64 GB (nagrania krótkoterminowe)HDD 1–4 TB (retencja tygodniowa)
Sieć100 Mb/s LAN1 Gb/s LAN (kabel, nie Wi-Fi)
⚠️ Kamery IP powinny być podłączone przez kabel Ethernet (bezpośrednio lub przez switch PoE), nie przez Wi-Fi. Wi-Fi może powodować gubienie klatek i fałszywe alarmy ruchu.

Instalacja Frigate NVR przez Docker Compose

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"

Konfiguracja kamer ONVIF (autodiscovery)

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

Konfiguracja AI – klasy obiektów

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
💡 Wartości min_area i min_score to prawdopodobnie najważniejsze parametry przy walce z fałszywymi alarmami. Zwiększaj je stopniowo, obserwując logi.

Strefy detekcji – alarmy tylko w wyznaczonych obszarach

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)

Maskowanie – ignorowanie obszarów z ruchem bez znaczenia

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

Filtrowanie fałszywych alarmów przy deszczu i śniegu

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
✅ Najskuteczniejszy filtr to 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.

Powiadomienia push przez ntfy.sh

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

Alternatywa: Signal (signal-cli)

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
✅ Możesz skonfigurować zarówno ntfy.sh, jak i Signal – pierwsze działa przez aplikację bez rejestracji numeru, drugie oferuje szyfrowanie end-to-end i może być preferowane przez osoby dbające o prywatność.

Panel webowy i aplikacja mobilna

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.

Nagrywanie i retencja

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

Uruchomienie i monitorowanie

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

Podsumowanie

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ść.