【算法介绍】
在Windows系统上,基于C++编程署YOLOv11的OpenVINO实例分割模型,可以通过CMake项目来实现部署。以下是一个简要介绍:
首先,确保开发环境已准备好,包括安装OpenVINO Toolkit、CMake、OpenCV以及C++编译器(如GCC或MSVC)。这些工具对于项目的构建和运行至关重要。
接下来,从相关资源网站下载YOLOv11的OpenVINO C++部署项目代码。由于YOLOv11是YOLO系列中的新版本,因此可能需要特别注意模型格式的兼容性和转换过程。
将YOLOv11模型转换为OpenVINO支持的IR格式是关键步骤之一。这通常需要使用OpenVINO的Model Optimizer工具来完成。转换完成后,使用CMake编译项目,并配置好项目的包含目录和库目录,确保能够正确链接到OpenVINO和OpenCV的库。
编译成功后,运行示例程序进行实例分割。示例程序会加载转换后的IR模型,并对输入的图像进行分割。通过OpenVINO的优化,模型在英特尔硬件上的推理速度会得到显著提升,满足实时处理的需求。
OpenVINO官方提供了丰富的示例代码和教程,涵盖从模型优化到部署的各个环节。开发者可以参考这些示例和教程,快速上手OpenVINO,并基于YOLOv11模型实现高效的实例分割应用。
以上就是在Windows上基于C++编程署YOLOv11的OpenVINO实例分割模型CMake项目部署的简要介绍。
【效果展示】

【python导出openvino环境】
anaconda3+python3.8
torch==2.0.1+cu117
ultralytics==8.3.21
openvino==2024.4.0
【C++测试环境】
vs2019
cmake==3.24.3
opencv==4.8.0
w_openvino_toolkit_windows_2024.3.0.16041.1e3b88e4e3f_x86_64
【部分实现代码】
#include <iostream> #include "Yolov11OpenvinoSeg.h" #include "opencv2/opencv.hpp" #include <chrono> using namespace std; using namespace cv; void video_demo(std::string videopath,Yolov11OpenvinoSeg& seg) { // 创建一个 VideoCapture 对象,参数 1为视频路径 cv::VideoCapture cap(videopath); // 检查摄像头是否成功打开 if (!cap.isOpened()) { std::cerr << "Error: Could not open video." << std::endl; return; } cv::Mat frame; auto startTime = std::chrono::high_resolution_clock::now(); int frameCount = 0; while (true) { // 读取一帧图像 cap >> frame; frameCount++; // 检查是否成功读取帧 if (frame.empty()) { break; } auto img = seg.Inference(frame); auto currentTime = std::chrono::high_resolution_clock::now(); auto elapsed = std::chrono::duration_cast<std::chrono::seconds>(currentTime - startTime); if (elapsed.count() >= 2) { double fps = static_cast<double>(frameCount) / elapsed.count(); std::cout << "FPS: " << fps << std::endl; frameCount = 0; startTime = currentTime; } // 显示帧 cv::imshow("yolov11 openvino demo", img); // 检查是否按下 'q' 键以退出循环 if (cv::waitKey(10) == 'q') { break; } } // 释放摄像头 cap.release(); // 关闭所有窗口 cv::destroyAllWindows(); } int main(int argc, char *argv[]) { // Yolov11OpenvinoSeg seg; // seg.LoadWeights("E:\\official-model\\yolov11\\yolo11n-seg_openvino_model\\yolo11n-seg.xml"); // cv::Mat image = cv::imread("E:\\person.jpg"); // auto img = seg.Inference(image); // namedWindow("result", WINDOW_AUTOSIZE); // imshow("result", img); // waitKey(0); // destroyAllWindows(); Yolov11OpenvinoSeg seg; std::cout<<"load weights...\n"; seg.LoadWeights("E:\\official-model\\yolov11\\yolo11n-seg_openvino_model\\yolo11n-seg.xml"); std::cout<<"start read video...\n"; video_demo("E:\\car.mp4",seg); return 0; }
【运行步骤】
第一步:找到源码并下载opencv和openvino的C++开发库,下载地址cmakelists.txt里面给出您也可以使用其他较新版本opencv或者openvino
第二步:将opencv和openvino的bin文件夹加入环境变量
第三步:修改CMakeLists.txt里面opencv和openvino自己对应目录
第四步:训练自己yolov11实例分割模型得到pytorch模型,并转成openvino模型,转换命令为
yolo export model=best.pt format=openvino
第五步:修改main.cpp视频路径和openvino模型路径,同时如果是自定义模型还需要修改代码里面一些推理参数,比如shape,类别数,网络输出层参数等
第六步:重新build和cmake,得到exe文件点击exe即可弹出窗口显示视频实时检测效果
【温馨提示】
运行闪退很可能路径填写错误,主要2个原因
第一个:路径要用\\或者/您可能路径掺杂了\忘了写全
第二个:视频文件或者模型路径不存在