编译darknet_darknet 如何在 vs15上测试

按照 https://github.com/AlexeyAB/darknet#how-to-use 介绍,下载代码。

我目前安装了 OpenCV4.0和 CUDA v10.1 ,是不符合要求的。不过,我强制修改了一些配置,解决了编译问题。

a19dc24205509736bb4b452d47814941.png

将 CUDA v10.0改成 10.1

然后一路编译,得到

3fe815eef8ae24e6b8eea24fabff3a75.png

得到链接库

主要的库:

include

darknet.h

yolo_v2_class.hpp

lib

yolo_cpp_dll.lib

yolo_cpp_dll_no_gpu.lib

bin

yolo_cpp_dll.dll

yolo_cpp_dll_no_gpu.dll

现在可以测试代码了:

059708e79d679dfda21ae37408afff61.png

调用Detetor

0757c49211eae891556018bb48fbd795.png

测试结果

写一个封装接口,避免 头文件污染。

c98d201bfed0cce62bfa6ad00dd88f03.png

封装成新代码

主要实现代码:

struct DarknetDetectorImpl {DarknetDetectorImpl(DarknetDetector* _p) :p(_p) {gpuId = 0;isChanged = false;}DarknetDetector* p;string configFile;string weightFile;string labelFile;int gpuId;std::shared_ptr dtor;std::map labelMap;bool isChanged;};DarknetDetector::DarknetDetector(){pImpl = new DarknetDetectorImpl(this);}DarknetDetector::~DarknetDetector(){delete pImpl;}void DarknetDetector::setConfigFile(const string& fName){if (pImpl->configFile != fName){pImpl->configFile = fName;pImpl->isChanged = true;}}void DarknetDetector::setWeightFile(const string& fName){if (pImpl->weightFile != fName){pImpl->weightFile = fName;pImpl->isChanged = true;}}void DarknetDetector::setLabelFile(const string& fName){if (pImpl->labelFile != fName){pImpl->labelFile = fName;std::ifstream file(fName);std::string line;for(unsigned int i = 0; std::getline(file, line); ++i)pImpl->labelMap[i] = line;}}string DarknetDetector::getName(unsigned int obj_id) const{auto it = pImpl->labelMap.find(obj_id);if (it == pImpl->labelMap.end())return string();return it->second;}void DarknetDetector::setGpuId(int gpuId){if (pImpl->gpuId != gpuId){pImpl->gpuId = gpuId;pImpl->isChanged = true;}}bool DarknetDetector::initialize(){if(!pImpl->dtor || pImpl->isChanged)pImpl->dtor.reset(new Detector(pImpl->configFile, pImpl->weightFile, pImpl->gpuId));pImpl->isChanged = false;return true;}vector DarknetDetector::detect(const cv::Mat& img, float thresh /*= 0.2*/, bool use_mean /*= false*/){vector res;if (img.empty())return res;auto& dtor = pImpl->dtor;auto boxes = dtor->detect(img, thresh, use_mean);for (auto& box : boxes){DarknetBox dbox;dbox.x = box.x;dbox.y = box.y;dbox.w = box.w;dbox.h = box.h;dbox.prob = box.prob;dbox.obj_id = box.obj_id;dbox.track_id = box.track_id;dbox.frames_counter = box.frames_counter;res.push_back(dbox);}return res;}vector DarknetDetector::detect(const string& imgFile, float thresh /*= 0.2*/, bool use_mean /*= false*/){return detect(cv::imread(imgFile, cv::IMREAD_COLOR), thresh, use_mean);}

写一个界面,测试:

79440117782cb0a05ee5da9fb6347fb2.png

测试界面

便于测试,日志检测出了 2只羊2只马,只花了 23ms

[20190401 23:42:49] detect [4] object, use time 23.7652(ms)---index[0]x,y,w,h=[615,156,12,14]prob=[0.621524] obj_id=[18] label=[sheep]track_id=[0] frames_counter=[0]---index[1]x,y,w,h=[452,164,26,11]prob=[0.606778] obj_id=[18] label=[sheep]track_id=[0] frames_counter=[0]---index[2]x,y,w,h=[158,156,67,45]prob=[0.931439] obj_id=[17] label=[horse]track_id=[0] frames_counter=[0]---index[3]x,y,w,h=[316,129,69,85]prob=[0.991121] obj_id=[17] label=[horse]track_id=[0] frames_counter=[0]
611b50e6b3a4f066b120d08561f5cdba.png

测试2

[20190401 23:46:21] detect [7] object, use time 32.9672(ms)---index[0]x,y,w,h=[355,185,62,225]prob=[0.998801] obj_id=[0] label=[person]track_id=[0] frames_counter=[10029]---index[1]x,y,w,h=[101,294,127,155]prob=[0.991353] obj_id=[0] label=[person]track_id=[0] frames_counter=[10029]---index[2]x,y,w,h=[316,216,50,164]prob=[0.98607] obj_id=[0] label=[person]track_id=[0] frames_counter=[10029]---index[3]x,y,w,h=[220,213,55,152]prob=[0.981358] obj_id=[0] label=[person]track_id=[0] frames_counter=[10029]---index[4]x,y,w,h=[106,175,26,80]prob=[0.96872] obj_id=[0] label=[person]track_id=[0] frames_counter=[10029]---index[5]x,y,w,h=[237,165,17,53]prob=[0.838328] obj_id=[0] label=[person]track_id=[0] frames_counter=[10029]---index[6]x,y,w,h=[87,176,23,78]prob=[0.712558] obj_id=[0] label=[person]track_id=[0] frames_counter=[10029]

经过测试,darknet 版本的 yolov3模型速度比较快,基本上 30ms左右解决一般图片的目标检测。

有使用疑问的,或者需要vs15x64 的编译代码的,或者 Qt版本测试软件的,可以联系我分享一下。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值