一:yolo在windows下的测试
下载vs2015 配置opencv3.4 环境,将AB-darknet在windows下测试。通过用VS2015打开darknet_no_gpu.sln,选择Release ×64模式,开始调试,进而生成可执行文件(.exe),完成测试。
二:yolo动态链接库的生成及测试
编译对应的工程是“yolo_cpp_dll.sln”,“release x64”版本
做完上面的操作,会在“xx\build\darknet\x64”路径下生成“yolo_cpp_dll.lib”和“yolo_cpp_dll.dll”两个文件,这两个东西就是yolo的动态链接库。
使用链接库的示例工程是“yolo_console_dll.sln”,“release x64”版本。编译出来后,“xx\build\darknet\x64”路径下多出一个“yolo_console_dll.exe”可执行文件,在“xx\build\darknet\x64”路径下加入权重文件以及自己的测试视频文件,双击可执行文件便可实现测试,或者用控制台打开并输入:
.\yolo_console_dll.exe data/coco.names cfg/yolov3.cfg yolov3.weights test.avi
三:如何新建空白项目调用yolo动态链接库
新建一个工程即空白项目,然后添加Yolo的动态链接库,进而实现在其它项目中完成对yolo动态链接库的调用。
具体操作:
一:准备工作
1、动态链接库(均在darknet-master\build\darknet\x64目录下)
(1)yolo_cpp_dll.lib
(2)yolo_cpp_dll.dll
(3)pthreadGC2.dll
(4)pthreadVC2.dll
2、OpenCV库(取决于使用debug还是release模式)
(1)opencv_world340d.dll
(2)opencv_world340.dll
3、YOLO模型文件
(1)coco.names
(2)yolov3.cfg
(3)yolov3.weights
4、头文件
(1)yolo_v2_class.hpp
头文件包含了动态链接库中具体的类的定义,调用时需要引用。
二: 在VS2015中新建一个空项目,在源文件中添加main.cpp,将准备工作中所有文件全部放入与main.cpp同路径的文件夹中,并且放入一个目标检测的测试视频,然后在main.cpp中添加相关代码即可。
参考链接
遇到编译错误,如 ‘sprintf’: This function or variable may be unsafe…
解决方案: 添加预处理指令:_CRT_SECURE_NO_WARNINGS
四.MFC+YOLO
在MFC中实现对yolo动态链接库的调用
参考链接
可能遇到的问题及解决办法:
问题1:新增头文件要加到合适位置,有的时候加在最上面就会出现意想不到的错误。
问题2:CT2A出现错误
解决:在将CString转换成string时,用T2A,即将CT2A用T2A替换并在其前添加USES_CONVERSION;
问题3:‘sprintf’: This function or
variable may be unsafe.
解决:对于VS系列的版本:打开项目----项目属性—配置属性----C/C++ ----预处理器----预处理定义,
添加_CRT_SECURE_NO_DEPRECATE和_SCL_SECURE_NO_DEPRECATE这两个宏。
问题4:std::max,std::min错误:应输入标识符的解决方法
解决:在std::max外加上括号,阻止宏替换,即(std::max)()。
问题5:只能利用mfc打开图片,却无法实现yolo检测
解决:路径用“\”,例如:
以上问题均已解决,便可成功实现MFC调用yolo动态链接库实现单张图片的检测。直接点击生成的.exe文件即可。
或者用vs2015打开工程:
按快捷键ctrl+F5。
原图:
检测效果图: