Frigate

Iš Žinynas.
Jump to navigation Jump to search

Proxmox + HassOS (Home Assistant) + Frigate (Intel NUC6CAYH)[keisti]

Pigiausias (low budget) setupas, nors cpu apkrovos jaučiasi, bet puikiai veikia su 4-6 kameromis. Diegiame tuo pačiu ir Home Assistant, kuris naudojamas išmaniųjų namų automatikoje. Frigate diegiamas kaip plugin (papildinys) Home Assistant'ui.

Reikalinga:

Sudiegiame proxmox[keisti]

FIXME

Kai sudiegiame proxmox..

Rašome:

bash -c "$(wget -qLO - https://github.com/tteck/Proxmox/raw/main/misc/post-pve-install.sh)"

Sekame instrukcijas diegimo metu...

Įdiegiame MQTT brokerį kaip LXC konteinerį[keisti]

Rašome:

bash -c "$(wget -qLO - https://raw.githubusercontent.com/tteck/Proxmox/main/ct/mqtt.sh)"

Sekame instrukcijas diegimo metu...

Diegimui pasibaigus pasijungiame per Proxmox konsolę prie mqtt lxc konteinerio ir pakeičiame failo /etc/mosquitto/conf.d/default.conf turinį į

listener 1883
allow_anonymous true
listener 9001
protocol websockets
socket_domain ipv4

Įdiegiame Home Assistant OS į naują virtualią mašiną[keisti]

Rašome:

bash -c "$(wget -qLO - https://github.com/tteck/Proxmox/raw/main/vm/haos-vm.sh)"

Įdiegiame Home Assistant Frigate pluginą[keisti]

Einame į Home Assistant > Settings > Add-ons > ADD-ON STORE > Spaudžiame viršutiniame dešiniame kampe tris taškus ir pasirenkame Repositories, pridedame repozitorių:

https://github.com/blakeblackshear/frigate-hass-addons

Atnaujiname repozitorius ir spaudžiame įdiegti Frigate plugin'ą.

Įgaliname Intel iGPU Passthrough[keisti]

/etc/default/grub pakeisti tik vieną eilutę

GRUB_CMDLINE_LINUX_DEFAULT="quiet quiet intel_iommu=on i915.enable_gvt=1 iommu=pt pcie_acs_override=downstream,multifunction video=efifb:off video=vesa:off vfio_iommu_type1.allow_unsafe_interrupts=1 kvm.ignore_msrs=1 modprobe.blacklist=radeon,nouveau,nvidia,nvidiafb,nvidia-gpu"

Paleidžiame:

update-grub

Paredaguojame failą /etc/modules ten įrašydami:

# Modules required for PCI passthrough
vfio
vfio_iommu_type1
vfio_pci
vfio_virqfd
# Modules required for Intel GVT-g Split
kvmgt

Paredaguojame failą /etc/modprobe.d/my-blacklist.conf ten įrašydami:

blacklist btintel
blacklist btusb
blacklist btrtl
blacklist btmtk
blacklist btbcm
# for gpu passtrough
blacklist i915
blacklist snd_hda_intel
blacklist snd_hda_codec_hdmi
blacklist snd_sof_pci_intel_apl
blacklist snd_soc_skl
blacklist snd_soc_avs

Paleidžiame:

update-initramfs -u -k all
reboot

Sistemai naujai užsikrovus tikriname pasitelkę dmesg komandą ir ieškome eilutės:

dmesg | grep -e DMAR -e IOMMU
[0.067203] DMAR: IOMMU enabled

GPU Passthrough įgalinimas Home Assistant OS virtualioje mašinoje[keisti]

19bbed86-bc34-11ec-bdef-d76764bad4d0.jpg

2cf3d69c-bd89-11ec-af8c-67974c4ba3f0.jpg

3802e9b8-bd8b-11ec-a4ba-8305e0d2d682.jpg

C605680c-bd8c-11ec-81f9-4755a5d3fa24.jpg

Nustatymai turi atrodyti maždaug taip

375ed1c8-bd8d-11ec-94c6-cf0bac60954a.jpg

Po reboot žiūrime ar pavyko:

ls -lsah /dev/dri

Turime matyti:

7660a1d4-bd8e-11ec-a58e-3f9f3e6c485d.jpg

Daugiau informacijos


Frigate konfigūracija[keisti]

Kad patogiau būtų redaguoti konfigūracijos failą, įdiegiame Home Assistant pluginą File Editor per Settings > Add-ons > ADD-ON STORE įdiegus pluginą pasidarome Show in sidebar. Paspaudę ant šio sidebar meniu punkto nunaviguojame ir sukuriame failą frigate.yml direktorijoje homeassistant/

Failo turinys:

environment_vars:
  LIBVA_DRIVER_NAME: i965    
ffmpeg:
  hwaccel_args: preset-vaapi  
  output_args:
    record: -f segment -segment_time 10 -segment_format mp4 -reset_timestamps 1 -strftime 1 -c:v copy -c:a aac
  input_args:
    - '-avoid_negative_ts'
    - make_zero
    - '-fflags'
    - nobuffer
    - '-flags'
    - low_delay
    - '-strict'
    - experimental
    - '-fflags'
    - +genpts+discardcorrupt
    - '-use_wallclock_as_timestamps'
    - '1'     

detectors:
  coral:
    type: edgetpu
    device: usb

mqtt:
  enabled: True
  host: 192.168.1.1
  topic_prefix: frigate
  client_id: frigate
  user: mqtt
  password: mqtt
  stats_interval: 60
rtmp:
  enabled: false

birdseye:
  enabled: false

detect:
  enabled: True
  max_disappeared: 50
  width: 640
  height: 360
  fps: 5

record:
  enabled: True
  retain:
    days: 14
    mode: motion
  events:
    pre_capture: 10
    post_capture: 5
    objects:
       - person
       - car
       - bicycle
       - motorcycle
       - bus
       - dog
       - truck
    required_zones: []
    retain:
      default: 48
      mode: motion
snapshots:
  enabled: True
  timestamp: True
  bounding_box: True
  crop: False
  height: 1000
  retain:
    default: 250

objects:
  track:
    - person
    - car
    - cat
    - dog
    - bicycle
    - truck
    - motorcycle
    - bus
    - horse
    - sheep
    - cow
    - bear
    - umbrella
    - handbag
    - suitcase
    - bottle
    - apple
    - cell phone

  filters:
    person:
      min_score: 0.5
      threshold: 0.7
    car:
      threshold: 0.70
    truck:
      threshold: 0.70
cameras:
  Cam1:
    ffmpeg:
       inputs:
         - path: rtsp://admin:admin@192.168.1.11/0/av1 # h264 MPEG-4 AVC (h264) 640x352
           roles:
             - detect
         - path: rtsp://admin:admin@192.168.1.11/0/av0 # h264 MPEG-4 AVC (h264 1920x1080
           roles:
             - record
    detect:
      width: 640
      height: 352
      fps: 5
    objects:
      track:
        - person
        - cat
        - dog
        - truck
    mqtt:
      height: 1080
      crop: False
    timestamp_style:
      position: "bl"
      format: "%H:%M:%S"
      color:
        red: 255
        green: 255
        blue: 255
      thickness: 5
      effect: "shadow"

Konfigūracija yra optimizuota ir gali veikti tiktai nurodytame įrenginyje, taip pat šioje konfigūracijoje yra įgalintas vaizdo įrašymas su garsu ir taip pat šioks toks ilgesnis užlaikymas, vaizdo kamerų neatsako metu (tinka prastos kokybės kiniškoms kameroms).

Jeigu coral neatpažystamas sistemos[keisti]

Jeigu lsusb komanda rodo:

1a6e:089a Global Unichip Corp.

Reikia įgalinti įrenginio atpažinimą udev taisyklėmis arba pasinaudoti df-util

apt install df-util
wget https://github.com/google-coral/libedgetpu/raw/efb73cc94dac29dc590a243109d4654c223e008c/driver/usb/apex_latest_single_ep.bin
dfu-util -D apex_latest_single_ep.bin -d 1a6e:089a -R

Kad kiekvieną sistemos startavimo kartą suveiktų šis pakeitimas reiktų jį įrašyti į /etc/rc.local failą

#!/bin/sh
dfu-util -D apex_latest_single_ep.bin -d 1a6e:089a -R
exit 0

Taip pat suteikiame šiam scriptui paleidimo teises

chmod +x /etc/rc.local

Dabar sistemos perkrovimo metu įrenginys bus atpažystamas teisingai.

Daugiau info

Kiti patarimai[keisti]

Kamerų rezoliuciją padavus rtsp url patogiai galima pamatyti su ffprobe (randasi ffmpeg programų pakete)..

Ubuntu 22.04.4 LTS + Frigate Docker (ThinkCentre M920q)[keisti]

Reikalinga:

docker-compose.yml[keisti]

version: "3.9"
services:
  frigate:
    container_name: frigate
    image: ghcr.io/blakeblackshear/frigate:stable
    restart: always
    privileged: true
    shm_size: "256mb"
    ports:
      - "1935:1935"
      - "5000:5000"
    devices:
      - /dev/bus/usb:/dev/bus/usb
      - /dev/dri:/dev/dri
    volumes:
      - /etc/localtime:/etc/localtime:ro
      - /srv/dockers/frigate/conf/config.yml:/config/config.yml:ro
      - /srv/dockers/frigate/data:/media/frigate
      - /srv/dockers/frigate/db:/db
      - type: tmpfs # Optional: 1GB of memory, reduces SSD/SD Card wear
        target: /tmp/cache
        tmpfs:
          size: 1000000000
#    ports:
#      - '5000:5000'
    environment:
      - FRIGATE_RTSP_PASSWORD=123456
    networks:
      - traefik
    restart: unless-stopped
    labels:
      - traefik.enable=true
      - traefik.docker.network=traefik
      - "traefik.http.routers.frigate.rule=Host(`frigate.domenas.lt`)"
      - "traefik.http.services.frigate.loadbalancer.server.port=5000"
    # resources limit
    mem_limit: 6G
    cpus: 3.0
    cap_add:
      - CAP_PERFMON
networks:
  traefik:
    external: true

frigate.yml[keisti]

detectors:
#  cpu1:
#    type: cpu
#  cpu2:
#    type: cpu
  coral:
    type: edgetpu
    device: usb
    num_threads: 3
database:
  path: /db/frigate.db
ffmpeg:
  hwaccel_args: preset-vaapi
  output_args:
    record: -f segment -segment_time 10 -segment_format mp4 -reset_timestamps 1 -strftime 1 -c:v copy -c:a aac
logger:
  # Optional: default log level (default: shown below)
  default: info
  # Optional: module by module log level configuration
  logs:
    frigate.mqtt: warning
    frigate.ffmpeg: debug
mqtt:
  host: 192.168.1.1
  topic_prefix: frigate
  client_id: frigate
  stats_interval: 60
rtmp:
  enabled: false

birdseye:
  enabled: false

detect:
  enabled: True
  max_disappeared: 50
  width: 640
  height: 360
  fps: 5

record:
  enabled: True
  retain:
    days: 14
    mode: motion
  events:
    pre_capture: 10
    post_capture: 5
    objects:
       - person
       - car
       - bicycle
       - motorcycle
       - bus
       - dog
       - truck
    required_zones: []
    retain:
      default: 3650
      mode: active_objects

snapshots:
  enabled: True
  timestamp: True
  bounding_box: True
  crop: False
  height: 1000
  retain:
    default: 3650

objects:
  track:
    - person
    - car
    - cat
    - dog
    - bicycle
    - truck
    - motorcycle
    - bus
    - horse
    - sheep
    - cow
    - bear
    - umbrella
    - handbag
    - suitcase
    - bottle
    - apple
    - cell phone

  filters:
    person:
      min_score: 0.5
      threshold: 0.7
    car:
      threshold: 0.70
    truck:
      threshold: 0.70

cameras:
  Cam1:
    ffmpeg:
       hwaccel_args: preset-intel-qsv-h264
       input_args: -avoid_negative_ts auto -fflags nobuffer+genpts+discardcorrupt -flags low_delay -rtsp_transport tcp -use_wallclock_as_timestamps 1 -timeout 2000000
       inputs:
         - path: rtsp://admin:admin@192.168.1.10/0/av1 # h264 MPEG-4 AVC (h264) 640x352
           roles:
             - detect
         - path: rtsp://admin:admin@192.168.1.10/0/av0 # h264 MPEG-4 AVC (h264 1920x1080
           roles:
             - record
    detect:
      width: 640
      height: 352
      fps: 5
    objects:
      track:
        - person
        - cat
        - dog
        - truck
    mqtt:
      height: 1080
      crop: False
    timestamp_style:
      position: "bl"
      format: "%H:%M:%S"
      color:
        red: 255
        green: 255
        blue: 255
      thickness: 5
      effect: "shadow"