ติดตั้ง Frigate NVR โดยใช้ OpenVINO Detector ผ่านทาง Proxmox LXC
Frigate คือ NVR ที่มีการติดตั้ง AI object detection มาให้พร้อมใช้งาน โดยปกติแล้วการติดตั้ง Frigate เขาจะแนะนำให้ใช้ Google Coral TPU ซึ่งจะมีราคาค่อนข้างแพง และหาซื้อค่อนข้างยาก แต่ถ้าเราไม่มีก็สามารถใช้ CPU Detector ได้นะ ขั้นต่ำประมาณ 3 threads ทำงาน 100% ตลอดเวลา ฟังดูโหดร้ายมาก!
แต่สำหรับบทความนี้เราจะใช้ OpenVINO Detector โดยเจ้าตัว OpenVINO จะสามารถใช้งานกับ CPU intel เจนเนอเรชั่น 6 ขึ้นไปเท่านั้น! และติดตั้งผ่านทาง Proxmox LXC
วิธีเช็คว่าเครื่องเรารองรับ OpenVINO ให้เข้าไปที่ shell Proxmox จากนั้นใช้คำสั่ง
lscpu | grep -e avx2
สามารถใช้คำสั่ง lscpu | grep -o avx หรือ lscpu | grep -o avx2
ถ้าเจอ Flags: avx2 แสดงว่าเครื่องรองรับ OpenVINO
อีกอย่างนึงที่เราต้องเช็คคือ VAAPI (Video Acceleration API) โดยปกติจะมีอยู่ใน CPU intel อยู่แล้ว เราจะใช้สำหรับ ffmpeg transcode จะได้ไม่เปลือง CPU
คำสั่งเช็ค default GPU intel transcode video
ls -l /dev/dri
ถ้าเจอ renderD128 แสดงว่าเรามีสิ่งที่ต้องการครบแล้ว ไปกันต่อ...
ต่อไปเราจะติดตั้ง Docker บน LXC โดยจะใช้ auto scripts
bash -c "$(wget -qLO - https://github.com/tteck/Proxmox/raw/main/ct/docker.sh)"
copy และ paste แล้วก็ enter
ส่วนของ Docker LXC <yes> enter
ส่วนของ SETTINGS <yes> enter
รอจนกว่า script จะขึ้นความว่า
- "Would you like to add Portainer? <y/N>" พิมพ์ N แล้ว enter
- "Would you like to add the Portainer Agent? <y/N>" พิมพ์ N แล้ว enter
- "Would you like to add Docker Compose? <y/N>" พิมพ์ N แล้ว enter
หลังจากติดตั้ง script เรียบร้อยแล้ว ให้เรามองหาตัว 2 บรรทัดนี้
- ✓ LXC Container 107 was successfully created. คือ CT ID ของ LXC Container
- ✓ Network Connected: 192.168.1.23 คือ ip ของ LXC Container
ต่อไปเราจะทำการ add GPU เข้าไปใน LXC Container โดยการเข้าไปแก้ config LXC
nano /etc/pve/lxc/107.conf
ให้ทำการ comment #unprivileged: 1 แล้วก็เพิ่มคำสั่ง
#unprivileged: 1
lxc.cgroup2.devices.allow: c 226:128 rwm
lxc.mount.entry: /dev/dri/renderD128 dev/dri/renderD128 none bind,optional,create=file
จากนั้นทำการ save (ctrl+x และ y แล้ว enter)
ทำการ reboot LXC Container 107
pct reboot 107
เข้าไปที่เครื่อง LXC Container 107
pct enter 107
เช็ค default GPU ด้วยคำสั่งเดิมอีกครั้ง ถ้าเจอ renderD128 แสดงว่าเราทำการ Passthrough GPU เข้ามาใน LXC Container เรียบร้อยแล้ว ไปกันต่อ...
ls -l /dev/dri
ต่อไปจะเป็นขั้นตอนการติดตั้ง Frigate หลังจากเตรียมความพร้อมกันมานาน สร้าง folder frigate และสร้างไฟล์ config.yml
mkdir -p ./frigate/config
nano frigate/config/config.yml
copy ข้างล่างไปวางในไฟล์ config.yml
mqtt:
enabled: false
detectors:
ov:
type: openvino
device: AUTO
model:
path: /openvino-model/ssdlite_mobilenet_v2.xml
model:
width: 300
height: 300
input_tensor: nhwc
input_pixel_format: bgr
labelmap_path: /openvino-model/coco_91cl_bkgr.txt
ffmpeg:
hwaccel_args: preset-vaapi
cameras:
front_house:
ffmpeg:
inputs:
- path: rtsp://192.168.1.195:554/h264_stream
roles:
- detect
จากนั้นทำการ save (ctrl+x และ y แล้ว enter)
สั่ง run docker frigate
docker run -d \
--name frigate \
--restart=unless-stopped \
--mount type=tmpfs,target=/tmp/cache,tmpfs-size=1000000000 \
--privileged \
--device /dev/dri/renderD128 \
--shm-size=64m \
-v /root/frigate/storage:/media/frigate \
-v /root/frigate/config:/config \
-v /etc/localtime:/etc/localtime:ro \
-p 5000:5000 \
ghcr.io/blakeblackshear/frigate:stable
ทดสอบเข้าใช้งาน http://192.168.1.23:5000/ แล้วให้ดูตรงส่วนของ System
ตอนนี้ Frigate ของเราได้ใช้ OpenVINO Detector เรียบร้อยแล้ว โดยให้ดู Inference Speed จะอยู่ประมาณ 97.39 ms (Inference speeds on CPU) หรือประมาณ ~ 15 ms
ส่วนของ ffmpeg ก็ใช้ CPU น้อยมากแค่ 4.0% เนื่องจากทำงานผ่านทาง VAAPI