Gdzie jest ta kluczowa informacja? Jak mogłem ją ominąć
@szopen - sokole oko
Świeży poradnik jak to zrobić w kontenerze LXC na PVE:
I jest to zapewne dużo wydajniejsze podejście niż kontener w wirtualnej maszynie, która stanowi kolejna warstwę wirtualizacji, bez bezpośredniego dostępu do zasobów hosta.
Jednak się udało
Czy ktoś może mi potwierdzić, że openvino i openvino-model są wbudowane we frigate i nie ma potrzeby dodatkowych instalacji w host, czy docker? Bez względu czy frigate jest zainstalowane na CT czy VM Proxmox?
Zainstalowałem testowo obie wersje, passthrough gpu wykonane poprawnie w obu instalacjach.
intel-gpu-top: Intel Alderlake_n (Gen12) @ /dev/dri/card1 - 30/ 596 MHz; 61% RC6; 53 irqs/s
ENGINES BUSY MI_SEMA MI_WAIT
Render/3D 0.00% | | 0% 0%
Blitter 0.00% | | 0% 0%
Video 1.46% |█▉ | 0% 0%
VideoEnhance 0.00% | | 0% 0%
^Z
[1]+ Stopped intel_gpu_top
Przy konfiguracji:
detectors:
ov:
type: openvino
device: GPU
model:
width: 300
height: 300
input_tensor: nhwc
input_pixel_format: bgr
path: /openvino-model/ssdlite_mobilenet_v2.xml
labelmap_path: /openvino-model/coco_91cl_bkgr.txt
Wyniki niemal identyczne dla obu wariantów instalacji: Detector Inference Speed = 10-15ms. Tu akurat screenz instalacji Proxmox → VM (debian12) → docker frigate:
detect:
width: 640
height: 360
przy rozdzielczości moich kamer 1280x720 (gdzieś wyczytałem żeby zmniejszyć o połowę).
root@media:~# ffprobe rtsp://192.168.10.115
ffprobe version 5.1.6-0+deb12u1 Copyright (c) 2007-2024 the FFmpeg developers
built with gcc 12 (Debian 12.2.0-14)
configuration: --prefix=/usr --extra-version=0+deb12u1 --toolchain=hardened --libdir=/usr/lib/x86_64-linux-gnu --incdir=/usr/include/x86_64-linux-gnu --arch=amd64 --enable-gpl --disable-stripping --enable-gnutls --enable-ladspa --enable-libaom --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libcodec2 --enable-libdav1d --enable-libflite --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libglslang --enable-libgme --enable-libgsm --enable-libjack --enable-libmp3lame --enable-libmysofa --enable-libopenjpeg --enable-libopenmpt --enable-libopus --enable-libpulse --enable-librabbitmq --enable-librist --enable-librubberband --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libsrt --enable-libssh --enable-libsvtav1 --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvorbis --enable-libvpx --enable-libwebp --enable-libx265 --enable-libxml2 --enable-libxvid --enable-libzimg --enable-libzmq --enable-libzvbi --enable-lv2 --enable-omx --enable-openal --enable-opencl --enable-opengl --enable-sdl2 --disable-sndio --enable-libjxl --enable-pocketsphinx --enable-librsvg --enable-libmfx --enable-libdc1394 --enable-libdrm --enable-libiec61883 --enable-chromaprint --enable-frei0r --enable-libx264 --enable-libplacebo --enable-librav1e --enable-shared
libavutil 57. 28.100 / 57. 28.100
libavcodec 59. 37.100 / 59. 37.100
libavformat 59. 27.100 / 59. 27.100
libavdevice 59. 7.100 / 59. 7.100
libavfilter 8. 44.100 / 8. 44.100
libswscale 6. 7.100 / 6. 7.100
libswresample 4. 7.100 / 4. 7.100
libpostproc 56. 6.100 / 56. 6.100
Input #0, rtsp, from 'rtsp://192.168.10.115':
Metadata:
title : streamed by the macro-video rtsp server
Duration: N/A, start: 0.019000, bitrate: N/A
Stream #0:0: Video: h264 (Main), yuv420p(progressive), 1280x720, 20 fps, 50 tbr, 90k tbn
root@media:~#
Dopiero uczę się konfiguracji frigate i docelowo pewnie będzie to na lepszym sprzęcie z porządnymi kamerami, ale do tego czasu chciałbym już mieć to rozpracowane :).
Proszę więc o potwierdzenie moich przemyśleń, lub ewentualne poprawienie ich.
EDIT: Udało sie ogarnąć w LXC i śmiga
Nie ma żadnych problemów, wszystko działa ok. Poradnik ja zrobić passthrough jest na forum Proxmoxa https://pve.proxmox.com/wiki/PCI_Passthrough
Może już za niedługo będzie jeszcze łatwiej, bo bez edycji YAML
Witajcie jak zrobić aby głowny strumien nagrywał a podglad mial ze strumienia z ktorego robi detect w rozdzielczosci 1920x608 miałbym podglad w HA integracja Webrtc Alex kombinuje i nie wiem co dalej
mqtt:
host: 192.168.1.185
port: 1883
user: z2m
password: z
topic_prefix: frigate
ffmpeg:
hwaccel_args: preset-vaapi
detectors:
ov:
type: openvino
device: GPU
ov1:
type: openvino
device: GPU
#model:
#width: 300
#height: 300
#input_tensor: nhwc
#input_pixel_format: bgr
# path: /openvino-model/ssdlite_mobilenet_v2.xml
#labelmap_path: /openvino-model/coco_91cl_bkgr.txt
model:
model_type: yolo-generic
width: 320
height: 320
input_tensor: nchw
input_dtype: float
path: /config/model_cache/openvino/models/yolo11s_openvino_model/yolo11s.xml
labelmap_path: /config/model_cache/openvino/models/labelmap/coco-80.txt
go2rtc:
streams:
bramyfrigata:
- ffmpeg:rtsp://192.168.1.227:554/user=admin&password=Z&channel=0&stream=0.sdp
tylfrigata:
- ffmpeg:rtsp://192.168.1.168:554/user=admin&password=Z&channel=0&stream=0.sdp
api:
listen: :1984 #dopasuj do swojej konfiguracji portów, pamiętaj żę w HAOS masz dwa go2rtc, jeden w frigate a drugi w HA i nie mogą być na tych samych portach
webrtc:
listen: :8556 #dopasuj do swojej konfiguracji portów, pamiętaj żę w HAOS masz dwa go2rtc, jeden w frigate a drugi w HA i nie mogą być na tych samych portach
ice_servers:
- urls: [stun:stun.cloudflare.com:3478] #moźesz zamienić na Google.
candidates:
- stun:8556 #dopasuj do swojej konfiguracji portów, pamiętaj żę w HAOS masz dwa go2rtc, jeden w frigate a drugi w HA i nie mogą być na tych samych portach
cameras:
bramyfrigata:
enabled: true
ffmpeg:
output_args:
record: preset-record-generic-audio-copy #jeśli masz inny dzwięk niż aac zamień to na preset-record-generic lub preset-record-generic-audio-aac
inputs:
- path: rtsp://127.0.0.1:8554/bramyfrigata
input_args: preset-rtsp-restream
roles:
- detect
live:
streams:
bramyfrigata: bramyfrigata
detect:
width: 1920
height: 608
fps: 6
min_initialized: 2
max_disappeared: 25
stationary:
interval: 50
threshold: 50
annotation_offset: 0
snapshots:
enabled: true
quality: 100
bounding_box: true
timestamp: false
required_zones:
- brama1 ## główna brama
- dzwonek ## strefa przy dzwonku
- brama2 ## boczna brama
- Nocna ## strefa nocna
retain:
default: 2
record:
enabled: true
expire_interval: 2
sync_recordings: true
retain:
days: 2
mode: motion
preview:
quality: high
alerts:
retain:
days: 2
mode: motion
pre_capture: 5
post_capture: 5
detections:
retain:
days: 2
mode: motion
pre_capture: 5
post_capture: 5
objects:
track:
- person
- car
filters:
person:
min_score: 0.8
car:
min_score: 0.8
mask:
- 0.114,0.411,0.178,0.394,0.17,0.341,0.436,0.188,0.859,0.309,0.87,0.44,0.894,0.548,1,0.937,0.998,0.005,0.002,0.007,0.001,0.483
- 0.098,1,0.234,0.565,0.074,0.593,0.02,0.839,0.076,1
zones:
brama1:
coordinates:
0.254,0.445,0.395,0.451,0.4,0.51,0.394,0.562,0.254,0.538,0.259,0.511
loitering_time: 0
objects:
- car
- person
inertia: 1
min_area: 0.1
dzwonek:
coordinates: 0.405,0.534,0.395,0.319,0.545,0.325,0.545,0.546
loitering_time: 0
objects:
- person
- car
inertia: 1
min_area: 0.1
brama2:
coordinates: 0.722,0.587,0.837,0.594,0.811,0.483,0.698,0.469
loitering_time: 0
objects:
- person
- car
inertia: 1
min_area: 0.1
Nocna:
coordinates:
0.234,0.544,0.167,0.78,0.102,1,1,1,0.994,0.925,0.89,0.557,0.856,0.561,0.855,0.61,0.705,0.599,0.572,0.551,0.392,0.578
loitering_time: 0
objects:
- person
- car
inertia: 1
motion:
threshold: 30
lightning_threshold: 0.8
contour_area: 10
frame_alpha: 0.01
frame_height: 100
improve_contrast: true
mqtt_off_delay: 30
mask:
- 0.18,0.392,0.241,0.374,0.253,0.399,0.388,0.4,0.383,0.315,0.607,0.314,0.69,0.426,0.871,0.458,0.857,0.314,0.436,0.18,0.173,0.292
- 0.153,0.003,0.089,0.272,0.002,0.481,0.001,0.012
- 0.997,0.412,0.858,0.157,0.855,0.006,0.997,0.006
review:
detections:
required_zones:
- brama1
- dzwonek
- brama2
- Nocna
alerts:
required_zones:
- brama1
- dzwonek
- brama2
- Nocna
tylfrigata:
enabled: true
ffmpeg:
output_args:
record: preset-record-generic-audio-copy #jeśli masz inny dzwięk niż aac zamień to na preset-record-generic lub preset-record-generic-audio-aac
inputs:
- path: rtsp://127.0.0.1:8554/tylfrigata
input_args: preset-rtsp-restream
roles:
- detect
detect:
width: 1600
height: 558
fps: 3
snapshots:
enabled: true
bounding_box: true
timestamp: false
retain:
default: 2
record:
enabled: true
expire_interval: 2
sync_recordings: true
retain:
days: 2
mode: motion
preview:
quality: high
alerts:
retain:
days: 2
mode: motion
pre_capture: 5
post_capture: 5
detections:
retain:
days: 2
mode: motion
pre_capture: 5
post_capture: 5
objects:
track:
- person
- car
filters:
person:
min_score: 0.8
car:
min_score: 0.8
mask:
- 0,1,0.365,0.124,0.762,0.148,0.995,0.589,0.997,0.002,0.003,0.004
- 0.705,0.495,0.773,0.514,0.826,0.45,0.791,0.269,0.697,0.275,0.679,0.409
zones:
Tyl:
coordinates: 1,0.736,0.76,0.168,0.37,0.148,0.024,1,1,1
loitering_time: 0
objects:
- car
- person
inertia: 2
motion:
mask:
- 0.026,0.852,0.365,0.126,0.757,0.143,0.996,0.698,0.998,0.589,1,0,0,0,0.011,0.855
- 0.666,0.339,0.701,0.275,0.773,0.27,0.826,0.45,0.773,0.514,0.725,0.501,0.705,0.495,0.691,0.448
review:
alerts:
required_zones: Tyl
detections:
required_zones: Tyl
detect:
enabled: true
objects:
track:
- person
- car
- bus
semantic_search:
enabled: false
model_size: small
face_recognition:
enabled: true
model_size: small
detection_threshold: 0.7 # minimalna pewność wykrycia twarzy (lekko podnosimy z 0.7)
min_area: 20 # minimalny rozmiar twarzy w pikselach # większa odległość = twarze
unknown_score: 0.8 # pozostawiamy domyślne
recognition_threshold: 0.85 # domyślne, można obniżyć np. 0.85 jeśli czasem nie wykrywa
min_faces: 1
save_attempts: 100
blur_confidence_filter: false
lpr:
enabled: true
model_size: small
device: GPU
min_plate_length: 4 # Only recognize plates with 4 or more characters
recognition_threshold: 0.6
match_distance: 1
min_area: 45
known_plates:
michal:
- ZBI-20358
- 2B1-20358
- 2BI-20358
- ZBI20358
- ZB120358
- 2B120358
- 2BI20358
- 281-20358
- C781-20358
- 51-20358
- 4-1320358
ilona:
- ZBI-30609
- ZB130609
- 2B130609
- 2BI30609
- 78-30609
- 281-30609
classification:
bird:
enabled: false
version: 0.16-0
Tu masz przykład, musisz zrobić analogicznie (głównemu streamowi z kamery nadajesz rolę record
a pobocznemu o zmniejszonych parametrach rolę detect
)
Dziękuję będę próbował to zrobić