yolov5-opencv-dnn-cpp
yolov5-opencv-dnn-cpp copied to clipboard
部署到摄像机上 进行检测 发现画面延迟很高 请问怎么解决 改代码请问在哪改
请自行debug,我一没设备,二没环境,你部署修改了什么我也不清楚,我不负责这方面的维护,我只负责c++环境下opencv的部署,有编译opencv可以调用到cuda。其他方面请根据自己的实际需求和相关文档自行修改功能
好的 感谢 。我用视频检测 也延迟高, 我不知道是什么原因 我自己在测试看能不能稳定帧数
视频检测延迟高是多高?请给出详细的环境信息,包括系统,cpu,显卡,opencv是否编译,cuda和cudnn版本等信息我才能确定你是少了什么。
就是一般20秒视频 有读取模型进行检查视频就很慢, 把main检查那部分代码注释掉 播放的视频就比较正常。 我是用工控机 cpu i5-8500 显卡是 RTX3050 我用的是visual studio 进行opencv的编译 编译成功的
视频读取和调用推的代码贴出来看下,你不会每推理一次读取一次模型吧?
你的代码我基本没改 就是把图片部分改成视频了 我不知道啊 我也是第一次玩这个
#if 1
#include "yolo.h"
#include
using namespace std; using namespace cv; using namespace dnn;
int main() {
string img_path = "D:/c++/yolov5-opencv2/images/2.mp4";
string model_path = "D:/c++/yolov5-opencv2/models/yolov5s.onnx";
Mat frame;
Yolov5 test;
Net net;
if (test.readModel(net, model_path, false)) {
cout << "read net ok!" << endl;
}
else {
return -1;
}
//生成随机颜色
vector<Scalar> color;
srand(time(0));
for (int i = 0; i < 80; i++) {
int b = rand() % 256;
int g = rand() % 256;
int r = rand() % 256;
color.push_back(Scalar(b, g, r));
}
//Mat img = imread(img_path);
VideoCapture cap = VideoCapture(img_path);
while (cap.isOpened()){
cap.read(frame);
vector<Output> result;
if (test.Detect(frame, net, result)) {
test.drawPred(frame, result, color);
}
else {
cout << "Detect Failed!" << endl;
}
//system("pause");
imshow("result", frame);
if (cv::waitKey(1) == 25) break;
}
cv::destroyWindow("result");
return 0;
}
#endif // 0
没调用显卡,你是代码都不粗略看下干嘛的吗
这个我尝试过了 true和false都效果都差不多尼 。 是不是cuda版本的问题 我用的是11.1的版本
看下显存有没有起来,显存没起来说明你的opencv没有编译,
请问您找到原因了吗?
是的 因为是没有编译 我qt mingw编译了 我用qt测试了一下 上面显示 我用的是cpu 我查了资料 qt在window下 mingw是没法带cuda的 msvc可以带cuda 我现在准备重新cmake编译一下。
等我测试完之后 给你说一下情况