OpenVINO w detekcji obiektów w wizji komputerowej AI (Frigate + OpenVINO)
Przetłumaczone automatycznie z angielskiego. Przeczytaj oryginał
Czym jest OpenVINO? #
„Otwartoźródłowy zestaw narzędzi do optymalizacji i wdrażania modeli deep learningu”.
Intel rozwija go od 2018 roku. Obsługuje LLM, wizję komputerową i generatywne AI. Działa na Windowsie, Linuksie i macOS. W przypadku Ubuntu zalecane jest uruchamianie na 22.04 LTS lub nowszym. Wykorzystuje sterowniki OpenCL.
W teorii biblioteki używające OpenCL (takie jak OpenVINO) powinny być wieloplatformowe, w przeciwieństwie do podobnych rozwiązań uzależniających od jednego dostawcy, takich jak CUDA. W teorii OpenVINO powinno więc działać zarówno na sprzęcie Intela, jak i AMD. Internet twierdzi, że działa, ale na razie muszę zamówić dodatkowy sprzęt, żeby sprawdzić to samodzielnie.
Na marginesie: dlaczego vendor lock-in CUDA/NVIDIA jest zły? Jesteś zmuszony kupować sprzęt od jednego dostawcy, więc jesteś narażony na wzrost cen, a gdyby cała koncepcja upadła, zostajesz z niczym. Dlatego otwarte standardy są lepsze od zamkniętych.
Lektury o OpenCL #
Osobom mówiącym po polsku polecam moją książkę o OpenCL. Są też różne artykuły, które możesz znaleźć tutaj.
Wymagania #
OpenVINO można uruchomić na Intel Core Ultra serii 1 i 2, Xeon 6, Atom X, Atomach z SSE 4.2 oraz różnych procesorach Pentium. Zdecydowanie najważniejsze jest to, że działa na Intel Core od 6. generacji wzwyż. Obsługiwane są też karty Intel Arc, ale jeśli chodzi o GPU, wspierane są również Intel HD, UHD, Iris Pro, Iris Xe, Iris Xe Max. Szczególnie kluczowa jest kompatybilność z Core 6. generacji i zintegrowaną grafiką HD, UHD.
Dokumentacja Intel OpenVINO mówi też, że obsługiwany jest Intel Neural Processing Unit, w skrócie NPU.
Zestaw instrukcji VMMX jest dostępny od 10. generacji procesorów Intela. Zestaw instrukcji AMX jest dostępny od 12. generacji procesorów Intela. Zarówno VMMX, jak i AMX znacznie zwiększają szybkość i przepustowość inferencji.
Podstawowy pakiet OpenVINO GenAI #
wget https://apt.repos.intel.com/intel-gpg-keys/GPG-PUB-KEY-INTEL-SW-PRODUCTS.PUB
sudo gpg --output /etc/apt/trusted.gpg.d/intel.gpg --dearmor GPG-PUB-KEY-INTEL-SW-PRODUCTS.PUB
echo "deb https://apt.repos.intel.com/openvino/2025 ubuntu22 main" | sudo tee /etc/apt/sources.list.d/intel-openvino-2025.list
sudo apt update
sudo apt install openvinoUruchomienie monitoringu wideo Frigate z detektorem obiektów OpenVINO #
W Linuksie, a konkretnie w Ubuntu 22, urządzenia Intela są udostępniane przez urządzenia /dev/dri, czyli Direct Rendering Infrastructure. To linuksowy framework obecny od 1998 roku. Najnowsza wersja, DRI-3.0, pochodzi z 2013 roku.
Możemy przetestować runtime/biblioteki OpenVINO, a tym samym sprzęt Intela, używając Frigate, urządzenia DRI i kontenera Docker. Oto specyfikacja kontenera Docker:
cd
mkdir frigate-config
mkdir frigate-media
sudo docker run -d \
--name frigate \
--restart=unless-stopped \
--stop-timeout 30 \
--mount type=tmpfs,target=/tmp/cache,tmpfs-size=1000000000 \
--shm-size=1024m \
--device /dev/bus/usb:/dev/bus/usb \
--device /dev/dri/renderD128 \
-v ./frigate-media:/media/frigate \
-v ./frigate-config:/config \
-v /etc/localtime:/etc/localtime:ro \
-e FRIGATE_RTSP_PASSWORD='password' \
-p 8971:8971 \
-p 8554:8554 \
-p 8555:8555/tcp \
-p 8555:8555/udp \
ghcr.io/blakeblackshear/frigate:stableUżywamy obrazu frigate:stable. Dla innych detektorów, takich jak TensorRT (Tensor RunTime), użylibyśmy obrazu frigate:stable-tensorrt.
Po uruchomieniu kontenera otwórz logi, aby odczytać hasło administratora:
sudo docker logs $(sudo docker ps | grep frigate | cut -d ' ' -f 1) -f -n 100Powinno to wyglądać mniej więcej tak:

Zacznij od następującego pliku konfiguracyjnego:
mqtt:
enabled: false
logger:
logs:
frigate.record.maintainer: debug
objects:
track:
- person
- car
- motorcycle
- bicycle
- bus
- dog
- cat
- handbag
- backpack
- suitcase
record:
enabled: true
retain:
days: 1
mode: all
alerts:
retain:
days: 4
detections:
retain:
days: 4
snapshots:
enabled: true
retain:
default: 7
quality: 95
review:
alerts:
labels:
- person
- car
- motorcycle
- bicycle
- bus
detections:
labels:
- dog
- cat
- handbag
- backpack
- suitcase
cameras:
demo:
enabled: true
ffmpeg:
inputs:
- path: rtsp://user:pass@ip:port/stream
roles:
- detect
- record
hwaccel_args: preset-vaapi
detect:
fps: 4
version: 0.15-1
semantic_search:
enabled: true
reindex: false
model_size: smallFrigate informuje, że detektory CPU nie są zalecane. Nie zdefiniowaliśmy jeszcze detektora OpenVINO w konfiguracji Frigate:

Frigate wręcz ostrzega nas, że detekcja na CPU jest wolna:

Spróbujmy więc teraz z detektorami OpenVINO:
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.txtPo restarcie powinieneś zobaczyć w logach:
2025-03-09 09:41:01.085519814 [2025-03-09 09:41:01] detector.ov INFO : Starting detection process: 430Intel GPU Tools #
Aby zweryfikować wykorzystanie CPU/GPU, możesz użyć intel-gpu-tools:
sudo apt install intel-gpu-tools
sudo intel_gpu_topPokaże to coś takiego:

Powinno to obejmować zarówno detekcję, jak i dekodowanie wideo, ponieważ ustawiliśmy hwaccel_args: preset-vaapi w konfiguracji Frigate. W teorii powinno to działać zarówno z VAAPI Intela, jak i AMD.
Automatically detected vaapi hwaccel for video decodingKomputer bez dedykowanego GPU #
Jeśli mamy komputer z procesorem Intela z iGPU, możemy podać następującą konfigurację:
detectors:
ov_0:
type: openvino
device: GPU
ov_1:
type: openvino
device: GPUWtedy będzie używane zarówno iGPU (ov_0, szybkie), jak i CPU (ov_1, wolne). Jak widać, jest to ciekawe pod względem szybkości (87ms vs 493ms). Wykorzystanie CPU będzie oczywiście wyższe w przypadku detektora CPU, ponieważ w przypadku iGPU procesor służy jedynie do koordynacji. Oba komponenty pokazują podobne zużycie pamięci, czyli nadal pamięci RAM, ponieważ iGPU współdzieli ją z CPU. Mój procesor to Intel Core m3-8100y, 4 rdzenie przy 1.1GHz. Ma Intel UHD 615 ze 192 rdzeniami shaderów. Osiąga 691 GFLOPS (dla jasności: mniej niż 1 TFLOPS) w FP16.
Wykorzystanie możesz zobaczyć we Frigate:

Podsumowanie #
Bardzo ważne jest wykorzystywanie już dostępnego sprzętu i to świetnie, że istnieje taki framework jak OpenVINO. Na rynku są tony procesorów Intel Core ze zintegrowanymi układami graficznymi Intel HD i UHD. W takim scenariuszu jak detekcja obiektów we Frigate to idealne rozwiązanie, żeby przenieść detekcję z CPU na zintegrowane GPU procesora. Jest to znacznie wygodniejsze niż moduł Coral TPU USB, zarówno pod względem instalacji, jak i kosztów. To zintegrowane GPU masz już w swoim komputerze.