UNeedCryDear / yolov5-opencv-dnn-cpp

使用opencv模块部署yolov5-6.0版本
Apache License 2.0
134 stars 37 forks source link

部署到摄像机上 进行检测 发现画面延迟很高 请问怎么解决 改代码请问在哪改 #26

Open 1314520gu opened 1 year ago

UNeedCryDear commented 1 year ago

请自行debug,我一没设备,二没环境,你部署修改了什么我也不清楚,我不负责这方面的维护,我只负责c++环境下opencv的部署,有编译opencv可以调用到cuda。其他方面请根据自己的实际需求和相关文档自行修改功能

1314520gu commented 1 year ago

好的 感谢 。我用视频检测 也延迟高, 我不知道是什么原因 我自己在测试看能不能稳定帧数

UNeedCryDear commented 1 year ago

视频检测延迟高是多高?请给出详细的环境信息,包括系统,cpu,显卡,opencv是否编译,cuda和cudnn版本等信息我才能确定你是少了什么。

1314520gu commented 1 year ago

就是一般20秒视频 有读取模型进行检查视频就很慢, 把main检查那部分代码注释掉 播放的视频就比较正常。 我是用工控机 cpu i5-8500 显卡是 RTX3050 我用的是visual studio 进行opencv的编译 编译成功的

UNeedCryDear commented 1 year ago

视频读取和调用推的代码贴出来看下,你不会每推理一次读取一次模型吧?

1314520gu commented 1 year ago

你的代码我基本没改 就是把图片部分改成视频了 我不知道啊 我也是第一次玩这个

if 1

include "yolo.h"

include

include<opencv2//opencv.hpp>

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

UNeedCryDear commented 1 year ago

image 没调用显卡,你是代码都不粗略看下干嘛的吗

1314520gu commented 1 year ago

这个我尝试过了 true和false都效果都差不多尼 。 是不是cuda版本的问题 我用的是11.1的版本

UNeedCryDear commented 1 year ago

看下显存有没有起来,显存没起来说明你的opencv没有编译,

lrj-1 commented 1 year ago

请问您找到原因了吗?

1314520gu commented 1 year ago

是的 因为是没有编译 我qt mingw编译了 我用qt测试了一下 上面显示 我用的是cpu 我查了资料 qt在window下 mingw是没法带cuda的 msvc可以带cuda 我现在准备重新cmake编译一下。

1314520gu commented 1 year ago

等我测试完之后 给你说一下情况