
[C++]在windows基于C++编程署yolov8-pose的openvino姿态估计检测模型cmake项目部署演示源码
YOLOv8是YOLO系列模型的较新版本,具有更高的检测精度和更快的推理速度,而OpenVINO(Open Visual Inference and Neural Network Optimization)是英特尔开发的一款用于优化和部署深度学习模型的工具套件,能够显著提升模型在英特尔硬件上的推理性能。此外,OpenVINO官方提供了丰富的示例代码和教程,涵盖了从模型优化到部署的各个环节,有助于开
【算法介绍】
在Windows系统上,基于C++编程署YOLOv8-Pose的OpenVINO姿态估计检测模型,可以通过CMake项目来实现。YOLOv8是YOLO系列模型的较新版本,具有更高的检测精度和更快的推理速度,而OpenVINO(Open Visual Inference and Neural Network Optimization)是英特尔开发的一款用于优化和部署深度学习模型的工具套件,能够显著提升模型在英特尔硬件上的推理性能。
项目实现过程如下:
- 准备开发环境,包括安装OpenVINO Toolkit、CMake、OpenCV和C++编译器(如GCC或MSVC)。
- 从GitHub下载YOLOv8-Pose的OpenVINO C++部署项目代码。
- 将YOLOv8-Pose模型转换为OpenVINO支持的IR格式,使用OpenVINO的Model Optimizer工具。
- 使用CMake编译项目,并配置好项目的包含目录和库目录,确保能够正确链接到OpenVINO和OpenCV的库。
- 编译完成后,运行示例程序进行姿态估计检测。示例程序会加载转换后的IR模型,并对输入的图像进行姿态估计。
此项目利用OpenVINO的优化,使模型在英特尔硬件上的推理速度得到大幅提升,能够满足实时处理的需求。此外,OpenVINO官方提供了丰富的示例代码和教程,涵盖了从模型优化到部署的各个环节,有助于开发者快速上手并实现高效的姿态估计检测应用。
【效果展示】
【测试环境】
vs2019
cmake==3.24.3
opencv==4.8.0
w_openvino_toolkit_windows_2024.3.0.16041.1e3b88e4e3f_x86_64
【部分实现代码】
#include <iostream>
#include "Yolov8OpenvinoPose.h"
#include "opencv2/opencv.hpp"
#include <chrono>
using namespace std;
using namespace cv;
void video_demo(std::string videopath,Yolov8OpenvinoPose& pose)
{
// 创建一个 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 = pose.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("yolov8 openvino demo", img);
// 检查是否按下 'q' 键以退出循环
if (cv::waitKey(10) == 'q')
{
break;
}
}
// 释放摄像头
cap.release();
// 关闭所有窗口
cv::destroyAllWindows();
}
int main(int argc, char *argv[])
{
// Yolov8OpenvinoPose pose;
// pose.LoadWeights("C:\\Users\\Administrator\\Desktop\\yolov8-pose-openvino-cplus\\yolov8n-pose_openvino_model\\yolov8n-pose.xml");
// cv::Mat image = cv::imread("E:\\person.jpg");
// auto img = pose.Inference(image);
// namedWindow("result", WINDOW_AUTOSIZE);
// imshow("result", img);
// waitKey(0);
// destroyAllWindows();
Yolov8OpenvinoPose pose;
std::cout<<"load weights...\n";
pose.LoadWeights("C:\\Users\\Administrator\\Desktop\\yolov8-pose-openvino-cplus\\yolov8n-pose_openvino_model\\yolov8n-pose.xml");
std::cout<<"start read video...\n";
video_demo("C:\\Users\\Administrator\\Desktop\\yolov8-pose-openvino-cplus\\video.avi",pose);
return 0;
}
【运行步骤】
第一步:从gitee.com/FIRC/firc-projects找到源码并下载opencv和openvino的C++开发库,下载地址cmakelists.txt里面给出您也可以使用其他较新版本opencv或者openvino
第二步:将opencv和openvino的bin文件夹加入环境变量
第三步:修改CMakeLists.txt里面opencv和openvino自己对应目录
第四步:训练自己yolov8姿态估计模型得到pytorch模型,并转成openvino模型,转换命令为
yolo export model=best.pt format=openvino
第五步:修改main.cpp视频路径和openvino模型路径,同时如果是自定义模型还需要修改代码里面一些推理参数,比如shape,类别数,网络输出层参数等
第六步:重新build和cmake,得到exe文件点击exe即可弹出窗口显示视频实时检测效果
更多推荐
所有评论(0)