---
title: "OpenVINO w detekcji obiektów w wizji komputerowej AI (Frigate + OpenVINO)"
url: https://michalasobczak.pl/pl/posts/openvino-in-ai-computer-vision-object-detection-frigate-openvino.html
author: "Michał Sobczak"
description: "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 22.04 LTS lub nowsze."
published: 2025-03-09T10:17:23.000Z
updated: 2025-03-09T13:01:07.000Z
language: pl
categories: ["AI/ML"]
tags: ["AI/ML", "Smart Home & IoT"]
license: CC BY-NC-ND 4.0 (https://creativecommons.org/licenses/by-nc-nd/4.0/)
---
# OpenVINO w detekcji obiektów w wizji komputerowej AI (Frigate + OpenVINO)

## 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](https://michalasobczak.pl/posts/opencl.html). Są też różne artykuły, które możesz znaleźć [tutaj](https://michalasobczak.pl/blog/?s=opencl).

## 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

```bash
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 openvino
```

## Uruchomienie 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:

```bash
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:stable
```

Uż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:

```bash
sudo docker logs $(sudo docker ps | grep frigate | cut -d ' ' -f 1) -f -n 100
```

Powinno to wyglądać mniej więcej tak:

![](https://michalasobczak.pl/wp-content/uploads/2025/03/image.png)

Zacznij od następującego pliku konfiguracyjnego:

```yaml
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: small
```

Frigate informuje, że detektory CPU nie są zalecane. Nie zdefiniowaliśmy jeszcze detektora OpenVINO w konfiguracji Frigate:

![](https://michalasobczak.pl/wp-content/uploads/2025/03/image-1.png)

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

![](https://michalasobczak.pl/wp-content/uploads/2025/03/image-2.png)

Spróbujmy więc teraz z detektorami OpenVINO:

```yaml
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
```

Po restarcie powinieneś zobaczyć w logach:

```text
2025-03-09 09:41:01.085519814  [2025-03-09 09:41:01] detector.ov                    INFO    : Starting detection process: 430
```

## Intel GPU Tools

Aby zweryfikować wykorzystanie CPU/GPU, możesz użyć intel-gpu-tools:

```bash
sudo apt install intel-gpu-tools
sudo intel_gpu_top
```

Pokaże to coś takiego:

![](https://michalasobczak.pl/wp-content/uploads/2025/03/image-3.png)

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.

```text
Automatically detected vaapi hwaccel for video decoding
```

## Komputer bez dedykowanego GPU

Jeśli mamy komputer z procesorem Intela z iGPU, możemy podać następującą konfigurację:

```yaml
detectors:
  ov_0:
    type: openvino
    device: GPU
  ov_1:
    type: openvino
    device: GPU
```

Wtedy 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:

![](https://michalasobczak.pl/wp-content/uploads/2025/03/image-6.png)

## 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.**
