首页 > 系统相关 >[C++]在windows基于C++编程署yolov11-cls的openvino图像分类模型cmake项目部署演示源码

[C++]在windows基于C++编程署yolov11-cls的openvino图像分类模型cmake项目部署演示源码

时间:2024-10-24 13:18:42浏览次数:9  
标签:openvino cmake 模型 OpenVINO C++ opencv 源码 include

【算法介绍】

在Windows系统上,基于C++编程部署YOLOv11-CLS的OpenVINO图像分类模型,可以通过CMake项目来实现。以下是简要介绍:

首先,需要准备开发环境,包括安装OpenVINO Toolkit、CMake、OpenCV和C++编译器(如GCC或MSVC)。OpenVINO是英特尔开发的一款用于优化和部署深度学习模型的工具套件,能够显著提升模型在英特尔硬件上的推理性能。

其次,从相关资源平台下载YOLOv11-CLS的OpenVINO C++部署项目代码。将YOLOv11-CLS模型转换为OpenVINO支持的IR格式,这通常需要使用OpenVINO的Model Optimizer工具。

然后,使用CMake编译项目,并配置好项目的包含目录和库目录,确保能够正确链接到OpenVINO和OpenCV的库。编译完成后,运行示例程序进行图像分类。示例程序会加载转换后的IR模型,并对输入的图像进行分类。

OpenVINO官方提供了丰富的示例代码和教程,涵盖了从模型优化到部署的各个环节。开发者可以参考这些示例和教程,快速上手OpenVINO,并基于YOLOv11-CLS模型实现高效的目标检测应用。

通过OpenVINO的优化,YOLOv11-CLS模型在英特尔硬件上的推理速度得到了大幅提升,能够满足实时处理的需求,从而在图像分类任务中表现出色。

【效果展示】

[C++]在windows基于C++编程署yolov11-cls的openvino图像分类模型cmake项目部署演示源码_#include

【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 <string>
#include <vector>
#include <algorithm>
#include "Yolov11OpenvinoCls.h"
#include <openvino/openvino.hpp> //openvino header file
#include <opencv2/opencv.hpp>    //opencv header file
 
using namespace cv;
using namespace dnn;
 
void video_demo(std::string videopath,Yolov11OpenvinoCls& cls)
{
    // 创建一个 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 result = cls.Inference(frame);
        std::cout<<"inference name result is:"<<result.name<<std::endl;
        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", frame);
 
            // 检查是否按下 'q' 键以退出循环
            if (cv::waitKey(10) == 'q')
            {
                break;
            }
        }
 
        // 释放摄像头
        cap.release();
        // 关闭所有窗口
        cv::destroyAllWindows();
    }
 
    int main(int argc, char *argv[])
    {
        Yolov11OpenvinoCls cls;
        cls.LoadWeights("E:\\official-model\\yolov11\\yolo11n-cls_openvino_model\\yolo11n-cls.xml","C:\\Users\\Administrator\\Desktop\\1\\yolov11-cls-openvino-cplus\\labels.txt");
        cv::Mat image = cv::imread("C:\\Users\\Administrator\\Desktop\\1\\yolov11-cls-openvino-cplus\\1.jpg");
        auto result = cls.Inference(image);
        std::cout<<"inference name result is:"<<result.name<<std::endl;
        cv::putText(image, result.name, cv::Point(50,50), cv::FONT_HERSHEY_SIMPLEX, 1, cv::Scalar(0, 255, 255), 1, 8, 0);
        namedWindow("result", WINDOW_AUTOSIZE);
        imshow("result", image);
        waitKey(0);
        destroyAllWindows();
 
 
        // Yolov11OpenvinoCls cls;
        // std::cout<<"load weights...\n";
        // cls.LoadWeights("E:\\official-model\\yolov11\\yolo11n-cls_openvino_model\\yolo11n-cls.xml","C:\\Users\\Administrator\\Desktop\\1\\yolov11-cls-openvino-cplus\\labels.txt");
        // std::cout<<"start read video...\n";
        // video_demo("C:\\Users\\Administrator\\Desktop\\1\\yolov8-pose-openvino-cplus\\video.avi",cls);
 
        return 0;
    }

【运行步骤】

第一步:从gitee.com/FIRC/firc-projects找到源码并下载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个原因

第一个:路径要用\\或者/您可能路径掺杂了\忘了写全

第二个:视频文件或者模型路径不存在

标签:openvino,cmake,模型,OpenVINO,C++,opencv,源码,include
From: https://blog.51cto.com/u_15962038/12350212

相关文章

  • 最新开发项目多校园跑腿小程序源码系统 带完整的安装代码包以及搭建部署教程
    系统概述随着移动互联网技术的快速发展,校园跑腿服务因其便捷性和高效性受到了越来越多学生的青睐。然而,目前市场上的跑腿小程序大多存在功能单一、操作复杂、用户体验差等问题。为了填补这一市场空白,我们开发了这款多校园跑腿小程序源码系统,旨在为学生提供更便捷、高效、可靠......
  • 避免踩坑!国内精品源码交易平台靠谱指南
    在当今互联网开发领域,源码交易平台成为了开发者们获取项目资源、提升开发效率的重要渠道。然而,随着市场需求的激增,源码交易平台也良莠不齐,不少开发者因选择不当而踩坑,导致时间、金钱乃至项目安全的损失。为了帮助大家避免这些陷阱,本文将从多个维度出发,为大家提供一份国内精品源......
  • 基于uniapp小程序的岳阳市美术馆预约平台附带文章源码部署视频讲解等
    文章目录前言详细视频演示具体实现截图核心技术介绍小程序框架Uniapp前端框架Vue持久层框架MyBaits为什么选择我代码参考数据库参考测试用例参考源码获取前言......
  • 不错的二次元个人导航页源码
    这里写目录标题前言效果图使用说明背景图如果您想提升加载效率,您可以考虑进行以下操作背景音乐图标温馨提示常见问题部分源码领取源码下期更新前言没事逛逛源码仓库发现有款好看的二次元个人页导航源码不错就转发了一下,这是开源项目有需要的自行下载体验,作者还会不......
  • 基于Android的的旅游攻略APP的设计与实现(源码+lw+部署文档+讲解等)
    项目整体介绍基于安卓Android的旅游攻略APP的设计与实现具有重要的现实意义,可以为用户提供便捷的旅游信息查询和规划服务。一、背景随着人们生活水平的提高和旅游需求的增加,旅游市场呈现出蓬勃发展的态势。然而,传统的旅游攻略获取方式存在着信息不全面、更新不及时......
  • 基于Android的的酒店管理APP小程序实现(源码+lw+部署文档+讲解等)
    项目整体介绍基于安卓Android的酒店管理APP和小程序可以为酒店提供更便捷的管理方式和更好的客户服务体验。一、背景随着移动互联网的发展,越来越多的人习惯使用手机进行各种操作,包括酒店预订、入住登记、服务请求等。因此,开发一款基于安卓Android的酒店管理APP......
  • C++11 中的内存对齐:alignas 与 alignof
    alignas和alignof是C++11引入的两个关键字,它们与内存对齐相关,帮助开发者控制和查询数据的内存对齐方式。内存对齐可以提高访问数据时的性能,特别是在处理硬件层面要求严格的场景下。1.alignasalignas是一个声明说明符,用来设置类型或对象的对齐方式。它允许开发者显式指定......
  • 【开题报告+论文+源码】基于SSM的社区老人服务系统设计与实现
    项目背景与意义在当前人口老龄化趋势明显以及信息化社会发展背景下,基于SSM框架构建的社区老人服务系统具有深远的背景意义。首先,它响应了我国老龄化进程加快所带来的多元化、个性化养老服务需求,利用互联网技术为老年人提供便捷高效的在线申请护工陪护服务。在这个平台上,老人......
  • 【开题报告+论文+源码】基于SpringBoot+Vue的虎鲸旅游攻略网的设计与实现
    项目背景与意义随着旅游业的快速发展和互联网的普及,越来越多的人选择通过网络平台获取旅游攻略和分享旅行经验。传统的旅游攻略获取方式往往依赖于纸质书籍或零散的在线资源,这种方式不仅信息更新滞后,而且缺乏互动性和个性化推荐。因此,开发一个集旅游攻略分享、交流互动于一体......
  • 【开题报告+论文+源码】基于JavaWeb的中小学心理健康教育平台的设计与实现
    项目背景与意义在当今社会,随着生活节奏的加快和学习压力的增大,中小学生的心理健康问题日益凸显,引起了广泛关注。心理健康不仅关系到学生的个人成长与发展,还对整个社会的和谐稳定具有重要影响。因此,加强中小学生的心理健康教育,提高他们的心理素质,已成为当前教育领域的迫切需求......