赞
踩
之前一阵子一直在做的就是怎么把yolo项目部署成c++项目,因为项目需要嵌套进yolo模型跑算法。因为自己也是本科生小白一枚,基本上对这方面没有涉猎过,自己一个人从网上到处搜寻资料,写代码,调试,期间遇到的bug不能说多,只能说很多!!!
最开始的思路一直都是,有没有什么办法能够直接用C++代码直接调用整个yolo项目,也就是如何用C++调用python项目。
这期间真的,碰壁不少,先是安装opencv环境,能显示图像了,然后就是调用python。网上的教程很少或者说基本没有关于如何直接用c++调用整个python项目的。一般也是用c++调用一个python脚本文件的。可即使就是用c++调用一个python脚本文件,也遇到了数不尽的bug。无法找到python36.dll呀、python环境变量冲突呀…怎么说呢,反正是网上关于c++调用python脚本的bug,不管是查得到的还是查不到的,我全遇到了…
下面是自己记录的一些问题以及解决办法:
途中报错:由于找不到python36.dll,无法继续执行代码。重新安装程序可能会解决此问题
只要重新下载python37.dll解压复制到C:\Windows\System32\这里就行了
Fatal Python error: init_fs_encoding: failed to get the Python codec of the filesystem encoding, when trying to start uwsgi这个问题应该还是跟环境变量什么的有关系,最后还是没解决(可能是我电脑上python环境太多太杂乱了?)反正试了很多办法也没解决。最后的最后呢,换了台电脑,重新按照教程,注意一些坑点,成功调用了一个python脚本文件。
主要参考教程如下:
在这里特别想感谢第一篇教程的博主十里春风_jzh,因为在调用python脚本的时缺少遇到了很多bug和困难,这个博主一直耐心回答帮助我解决问题,真的十分感谢!这也是为什么我一直坚持写博客,分享知识的原因,因为一个人的力量总是渺小的,而更多人的智慧是无量的!
最后由于精力耗费太大,网上相关资料又太少,虽然实现了C++调用一个python脚本文件,但是还是没有实现C++直接调用一整个python项目的。(当时不知道为什么QT项目又只能在Debug模式下跑、也想到又要集成python整个大的项目,最后的软件体积是否会非常大?))况且网上的方法一般还是把yolo模型用其他C++框架(opencv-dnn、onnxruntime、TensorRT)部署的比较多,于是转战直接用c++和相关框架来部署了。
当时记录的新路历程:
⭐yolo转为onnx,用c++进行推理
发现直接用c++去调用整个yolov8的ultralytics项目网上的方法少之又少,而且通过了解知道yolo的底层框架什么的其实也是c++,看到很多用c++部署yolo的都是转换为onnx模型,现在那就按照这种方法试试吧,毕竟参考资料很多。虽然之前一开始也想到了这种部署方法,但是出于对c++的恐惧以及对Yolov8项目的没有很深入的了解,还有pytorch这些框架的不了解,感觉很害怕,怕自己弄错,于是想着偷懒,如果能找到c++直接调用python整个项目的该多好。但是现在才反应过来,技术的懒你是一点也偷不了,这块你不克服、你不去弄懂、你不去尝试,你就跨不过去这个坎。反而弄懂之后不但扫清了你的障碍,还对这块技术有了更深入的了解,还可以反观之前那种偷懒方法隐含的弊端。
一开始是发现YOLO官方直接有相关的onnxruntime-cpp
的代码实现:ultralytics/examples
/YOLOv8-ONNXRuntime-CPP/。
注意点一、改变语言标准为c++17
注意点2:配置好onnx环境()
cuda和onnxruntime的环境配置(40系列的显卡至cuda至少要11.8->这个点暂时不确定,因为后来我在项目中使用11.2版本的cuda没有问题)
使用gpu版本onnxruntime的推理需要使用cuda
cuda的安装过程看这个CUDA安装及环境配置——最新详细版
结合CUDA11.0+VS2019+WIN10环境配置
⭐⭐⭐❗❗❗❗主要还是参考官方yolo教程,但是yolo的教程运行起来还是报错,然后还是一开始使用的这个博客使用opencv的方法进行Yolov8的推理:(注意环境必须是opencv4.8.0/4.8.1
但是出现问题:opencv4.8版本ok,enableCuda也设置了true
,但是推理一张图片居然要5s,看任务管理器也发现没有用GPU,看这个博客评论得到以下点\
(
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。