0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

OpenCV4.8+YOLOv8对象检测C++推理演示

OpenCV学堂 来源:OpenCV学堂 2023-09-27 11:07 次阅读

自从YOLOv5更新成7.0版本,YOLOv8推出以后,OpenCV4.6以前的版本都无法再加载导出ONNX格式模型了,只有OpenCV4.7以上版本才可以支持最新版本YOLOv5与YOLOv8模型的推理部署。首先看一下最新版本的YOLOv5与YOLOv8的输入与输出格式:

0533c230-5c7e-11ee-939d-92fbcf53809c.png

05404960-5c7e-11ee-939d-92fbcf53809c.png

ni hao

std::stringonnxpath="D:/python/yolov5-7.0/yolov5s.onnx";
autonet=cv::readNetFromONNX(onnxpath);

net.setPreferableBackend(cv::DNN_BACKEND_OPENCV);
net.setPreferableTarget(cv::DNN_TARGET_CPU);

cv::VideoCapturecapture("D:/images/video/sample.mp4");
cv::Matframe;
while(true){
boolret=capture.read(frame);
if(frame.empty()){
break;
}
int64start=cv::getTickCount();
//图象预处理-格式化操作
intw=frame.cols;
inth=frame.rows;
int_max=std::max(h,w);
cv::Matimage=cv::Size(_max,_max),CV_8UC3);
cv::Rectroi(0,0,w,h);
frame.copyTo(image(roi));

floatx_factor=image.cols/640.0f;
floaty_factor=image.rows/640.0f;

//推理
cv::Matblob=cv::blobFromImage(image,1/255.0,cv::Size(640,640),cv::Scalar(0,0,0),true,false);
net.setInput(blob);
cv::Matpreds=net.forward();

//后处理,1x25200x85
cv::Matdet_output(preds.size[1],preds.size[2],CV_32F,preds.ptr());
floatconfidence_threshold=0.5;
std::vectorboxes;
std::vectorclassIds;
std::vectorconfidences;
for(inti=0;i< det_output.rows; i++) {
        float confidence = det_output.at(i,4);
if(confidence< 0.25) {
            continue;
        }
        cv::Mat classes_scores = det_output.row(i).colRange(5, preds.size[2]);
        cv::Point classIdPoint;
        double score;
        minMaxLoc(classes_scores, 0, &score, 0, &classIdPoint);

        // 置信度 0~1之间
        if (score >0.25)
{
floatcx=det_output.at(i,0);
floatcy=det_output.at(i,1);
floatow=det_output.at(i,2);
floatoh=det_output.at(i,3);
intx=static_cast((cx-0.5*ow)*x_factor);
inty=static_cast((cy-0.5*oh)*y_factor);
intwidth=static_cast(ow*x_factor);
intheight=static_cast(oh*y_factor);
cv::Rectbox;
box.x=x;
box.y=y;
box.width=width;
box.height=height;

boxes.push_back(box);
classIds.push_back(classIdPoint.x);
confidences.push_back(score);
}
}

//NMS
std::vectorindexes;
cv::NMSBoxes(boxes,confidences,0.25,0.50,indexes);
for(size_ti=0;i< indexes.size(); i++) {
        int index = indexes[i];
        int idx = classIds[index];
        cv::rectangle(frame, boxes[index], colors[idx % 5], 2, 8);
        cv::rectangle(frame, cv::Point(boxes[index].tl().x, boxes[index].tl().y - 20),
            cv::Point(boxes[index].br().x, boxes[index].tl().y), cv::Scalar(255, 255, 255), -1);
        cv::putText(frame, classNames[idx], cv::Point(boxes[index].tl().x, boxes[index].tl().y - 10), cv::FONT_HERSHEY_SIMPLEX, .5, cv::Scalar(0, 0, 0));
    }

    float t = (cv::getTickCount() - start) / static_cast(cv::getTickFrequency());
putText(frame,cv::format("FPS:%.2f",1.0/t),cv::Point(20,40),cv::FONT_HERSHEY_PLAIN,2.0,cv::Scalar(255,0,0),2,8);

charc=cv::waitKey(1);
if(c==27){
break;
}
cv::imshow("OpenCV4.8+YOLOv5",frame);
}

审核编辑:汤梓红

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • C++
    C++
    +关注

    关注

    21

    文章

    2066

    浏览量

    72900
  • 模型
    +关注

    关注

    1

    文章

    2704

    浏览量

    47685
  • OpenCV
    +关注

    关注

    29

    文章

    611

    浏览量

    40774

原文标题:OpenCV4.8+YOLOv8对象检测C++推理演示

文章出处:【微信号:CVSCHOOL,微信公众号:OpenCV学堂】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    Ubuntu系统下编译OpenCV4.8源码记录

    支持,所以就用这个开发板给大家演示一下如何在乌班图系统下编译OpenCV4.8源码与如何编译执行OpenCV C++应用。
    的头像 发表于 10-27 16:07 651次阅读
    Ubuntu系统下编译<b class='flag-5'>OpenCV4.8</b>源码记录

    OpenCV C++程序编译与演示

    1、在JetsonNano上编译OpenCV源码与OpenCV C++ YOLOv5程序演示  编译Op
    发表于 11-10 16:42

    使用Yolov5 - i.MX8MP进行NPU错误检测是什么原因?

    一段时间以来,我一直在努力尝试让 NPU 检测C++ 程序一起工作。同样的代码在 CPU 上得到了最佳结果,但是使用 VX delegate 检测是完全错误的。代码似乎运行顺利,推理
    发表于 03-31 07:38

    C++演示中的推理速度比Python演示中的推理速度更快是为什么?

    在同一主机机上采用相同型号的 Ran Object Detection C++ 演示对象检测 Python 演示
    发表于 08-15 06:52

    YOLOv5在OpenCV上的推理程序

    YOLOv5官方给出的YOLOv5在OpenCV推理的程序相对来说是比较通俗易懂的,条理清晰,有基本的封装,直接可用!但是我也发现,模型的推理
    的头像 发表于 11-02 10:16 1307次阅读

    使用YOLOv8做目标检测和实例分割的演示

    YOLOv8是来自Ultralytics的最新的基于YOLO的对象检测模型系列,提供最先进的性能。
    的头像 发表于 02-06 10:11 5973次阅读

    TensorRT 8.6 C++开发环境配置与YOLOv8实例分割推理演示

    YOLOv8实例分割TensorRT 推理代码已经完成C++类封装,三行代码即可实现YOLOv8对象
    的头像 发表于 04-25 10:49 3697次阅读
    TensorRT 8.6 <b class='flag-5'>C++</b>开发环境配置与<b class='flag-5'>YOLOv</b>8实例分割<b class='flag-5'>推理</b><b class='flag-5'>演示</b>

    教你如何用两行代码搞定YOLOv8各种模型推理

    大家好,YOLOv8 框架本身提供的API函数是可以两行代码实现 YOLOv8 模型推理,这次我把这段代码封装成了一个类,只有40行代码左右,可以同时支持YOLOv8
    的头像 发表于 06-18 11:50 2069次阅读
    教你如何用两行代码搞定<b class='flag-5'>YOLOv</b>8各种模型<b class='flag-5'>推理</b>

    用OpenVINO™ C++ API编写YOLOv8-Seg实例分割模型推理程序

    本文章将介绍使用 OpenVINO 2023.0 C++ API 开发YOLOv8-Seg 实例分割(Instance Segmentation)模型的 AI 推理程序。本文 C++
    的头像 发表于 06-25 16:09 740次阅读
    用OpenVINO™ <b class='flag-5'>C++</b> API编写<b class='flag-5'>YOLOv</b>8-Seg实例分割模型<b class='flag-5'>推理</b>程序

    YOLOv8对象检测ONNXRUNTIME部署C++源码演示

    ONNXRUNTIME是主流的深度学习部署框架之一,支持ONNX格式模型在CPU、GPU、ARM等不同硬件平台上加速推理,支持C++、Python、Java、C#、JS等不同语言SDK。C++版本安装包下载如下:
    的头像 发表于 07-17 11:13 3226次阅读
    <b class='flag-5'>YOLOv</b>8<b class='flag-5'>对象</b><b class='flag-5'>检测</b>ONNXRUNTIME部署<b class='flag-5'>C++</b>源码<b class='flag-5'>演示</b>

    三种主流模型部署框架YOLOv8推理演示

    部署。这里以YOLOv8为例,演示YOLOv8对象检测模型在OpenVINO、ONNXRUNTIME、TensorRT三个主流框架上
    的头像 发表于 08-06 11:39 1839次阅读

    YOLOv8实现旋转对象检测

    YOLOv8框架在在支持分类、对象检测、实例分割、姿态评估的基础上更近一步,现已经支持旋转对象检测(OBB),基于DOTA数据集,支持航拍图
    的头像 发表于 01-11 10:43 555次阅读
    <b class='flag-5'>YOLOv</b>8实现旋转<b class='flag-5'>对象</b><b class='flag-5'>检测</b>

    基于QT5+OpenCV+OpenVINO C++的应用打包过程

    我用QT C++写了一个YOLOv5模型推理演示应用。
    的头像 发表于 01-26 10:17 354次阅读
    基于QT5+<b class='flag-5'>OpenCV</b>+OpenVINO <b class='flag-5'>C++</b>的应用打包过程

    OpenCV4.8 C++实现YOLOv8 OBB旋转对象检测

    YOLOv8框架在在支持分类、对象检测、实例分割、姿态评估的基础上更近一步,现已经支持旋转对象检测(OBB),基于DOTA数据集,支持航拍图
    的头像 发表于 02-22 10:15 410次阅读
    <b class='flag-5'>OpenCV4.8</b> <b class='flag-5'>C++</b>实现<b class='flag-5'>YOLOv</b>8 OBB旋转<b class='flag-5'>对象</b><b class='flag-5'>检测</b>

    基于OpenCV DNN实现YOLOv8的模型部署与推理演示

    基于OpenCV DNN实现YOLOv8推理的好处就是一套代码就可以部署在Windows10系统、乌班图系统、Jetson的Jetpack系统
    的头像 发表于 03-01 15:52 434次阅读
    基于<b class='flag-5'>OpenCV</b> DNN实现<b class='flag-5'>YOLOv</b>8的模型部署与<b class='flag-5'>推理</b><b class='flag-5'>演示</b>