# Openvino

> OpenCV4 OpenVINO 部署技能 - Intel CPU/GPU/VPU、OpenVINO Toolkit、IR 模型、ROS2 部署

- Skill: `miuav/openvino` (Agent Skill)
- Install (CLI): `npx skillmds@latest add miuav/openvino`
- Raw SKILL.md: https://api.skillmd.com/api/skills/miuav/openvino/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: miuav (https://skillmd.com/u/miuav)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/miuav/openvino

---


# OpenCV4 OpenVINO Deployment Skill

> OpenVINO 加速 OpenCV 推理完整指南

---

## 何时使用

当需要以下帮助时使用此技能：
- OpenVINO Toolkit 安装和配置
- 模型优化器转换（PyTorch/ONNX → IR）
- OpenCV DNN OpenVINO 后端
- Intel GPU/VPU 加速
- ROS2 Intel 相机集成
- 性能优化

---

## 快速参考

### OpenVINO 安装

```bash
# 下载安装
wget https://registrationcenter-download.intel.com/akdlm/irc_nas/vision/l_openvino_toolkit_p_2024.2.0.tgz
tar -xf l_openvino_toolkit_p_2024.2.0.tgz
cd l_openvino_toolkit_p_2024.2.0
sudo ./install.sh

# 激活环境
source /opt/intel/openvino/setupvars.sh

# 安装 Python 工具
pip install openvino openvino-dev[onnx,pytorch,tensorflow]
```

### 模型转换

```bash
# ONNX 转 IR
ovc model.onnx --output_model model_ir

# PyTorch 转 OpenVINO
python -m openvino.convert --input_model model.pt \
    --input_shape [1,3,640,640]

# TensorFlow 保存为 Frozen Graph 再转换
python -m openvino.convert --input_model frozen_graph.pb \
    --input_shape [1,640,640,3]
```

### OpenCV DNN OpenVINO 后端

```python
import cv2
import numpy as np

# 加载 IR 模型
net = cv2.dnn.readNetFromModelOptimizer('model.xml', 'model.bin')

# 设置后端
net.setPreferableBackend(cv2.dnn.DNN_BACKEND_INFERENCE_ENGINE)
net.setPreferableTarget(cv2.dnn.DNN_TARGET_CPU)
# 或使用 GPU
# net.setPreferableTarget(cv2.dnn.DNN_TARGET_OPENCL_FP16)

# 推理
blob = cv2.dnn.blobFromImage(img, 1/255.0, (640, 640), swapRB=True)
net.setInput(blob)
output = net.forward()
```

### Intel 显卡加速

```python
# GPU 推断
net.setPreferableTarget(cv2.dnn.DNN_TARGET_OPENCL)
net.setPreferableTarget(cv2.dnn.DNN_TARGET_OPENCL_FP16)

# VPU (Neural Compute Stick 2)
net.setPreferableTarget(cv2.dnn.DNN_TARGET_MYRIAD)
```

### ROS2 OpenVINO 部署

```bash
# 安装 ROS2 OpenVINO 相关包
sudo apt install -y ros-humble-openvino-* ros-humble-vitis-ai \
    ros-humble-realsense2-*

# 使用 Intel 相机
# realsense-ros 已经支持 OpenVINO 加速
```

```python
import rclpy
from rclpy.node import Node
from sensor_msgs.msg import Image
from cv_bridge import CvBridge
import cv2

class OpenVINONode(Node):
    def __init__(self):
        super().__init__('openvino_inference')
        self.bridge = CvBridge()
        
        # 加载 OpenVINO 模型
        self.net = cv2.dnn.readNetFromModelOptimizer('model.xml', 'model.bin')
        self.net.setPreferableBackend(cv2.dnn.DNN_BACKEND_INFERENCE_ENGINE)
        self.net.setPreferableTarget(cv2.dnn.DNN_TARGET_CPU)
        
        self.sub = self.create_subscription(Image, '/image_raw', self.callback, 10)
        self.pub = self.create_publisher(Image, '/detections', 10)
    
    def callback(self, msg):
        img = self.bridge.imgmsg_to_cv2(msg, 'bgr8')
        blob = cv2.dnn.blobFromImage(img, 1/255.0, (640, 640), swapRB=True)
        self.net.setInput(blob)
        output = self.net.forward()
```

---

## 性能优化

### 异步推理

```python
# 异步推理减少延迟
net = cv2.dnn.readNetFromModelOptimizer('model.xml', 'model.bin')
net.setPreferableBackend(cv2.dnn.DNN_BACKEND_INFERENCE_ENGINE)
net.setPreferableTarget(cv2.dnn.DNN_TARGET_CPU)

# 多次推理 warm-up
for _ in range(10):
    net.forward()

# 异步执行
net.setInput(blob1, 'input1')
net.setInput(blob2, 'input2')
async_infer1 = net.startWarmupAsync(0, 'output1')
async_infer2 = net.startWarmupAsync(1, 'output2')
# 处理其他事情
result1 = net.endPoll(0)
result2 = net.endPoll(1)
```

### 批处理优化

```python
# 批量推理提高吞吐
batch_size = 4
blobs = []
for i in range(batch_size):
    blob = cv2.dnn.blobFromImage(images[i], 1/255.0, (640, 640), swapRB=True)
    blobs.append(blob)

batch_blob = cv2.dnn blobFromImages(images, 1/255.0, (640, 640), swapRB=True)
net.setInput(batch_blob)
outputs = net.forward()
```

---

## 支持的 Intel 硬件

| 硬件 | 算力 | 适用场景 |
|------|------|---------|
| CPU (AVX2/AVX512) | 1-2 TOPS | 通用推理 |
| Integrated GPU | 1-4 TOPS | 图像处理 |
| Movidius VPU | 1 TOPS | 低功耗 |
| Neural Compute Stick 2 | 1 TOPS | USB 加速 |
| Intel DGPU | 4-16 TOPS | 高性能 |

---

## 最佳实践

1. **模型转换**：
   - 优先使用 ONNX 作为中间格式
   - 使用 `mo --compress_to_fp16` 压缩到 FP16
   - 确保输入形状固定或指定动态维度

2. **后端选择**：
   - CPU：延迟敏感场景
   - GPU：吞吐优先，INT8 量化
   - VPU：低功耗部署

3. **OpenVINO 2024**：
   - 使用 `openvino.runtime.Core` API
   - 新的 hetero 和自动设备分配

---

## 相关技能

- [opencv-dnn-inference](../dnn-inference) - DNN 推理基础

