在windows上运行darknet目标检测框架可以借助VS强大、方便的debug功能来逐行跟踪代码,藉此来熟悉其内部运行原理。
很简单,先进入https://github.com/AlexeyAB/darknet 去下载代码,然后去build/darknet目录中双击点开darknet_no_gpu.sln即可。
注意两点,1)先安装visual studio community版本 2)项目配置里面选择debug 这样就应该编译通过并能逐行跟踪运行代码了。
文章到此可以结束了,但是,如果在预编译定义里面 添加 OPENCV宏来使用opencv做图像预处理和后处理, 就很有可能引入大量的如下编译错误
严重性 代码 说明 项目 文件 行 禁止显示状态
错误(活动) E0757 变量 "size_t" 不是类型名 darknet_no_gpu c:\Program Files (x86)\Windows Kits\10\Include\10.0.16299.0\ucrt\locale.h 165
错误(活动) E0757 变量 "size_t" 不是类型名 darknet_no_gpu c:\Program Files (x86)\Windows Kits\10\Include\10.0.16299.0\ucrt\locale.h 167
错误(活动) E0757 变量 "size_t" 不是类型名 darknet_no_gpu d:\opencv-4.0.1\build\install\include\opencv2\core\core_c.h 80
错误(活动) E0757 变量 "size_t" 不是类型名 darknet_no_gpu d:\opencv-4.0.1\build\install\include\opencv2\core\core_c.h 1576
错误(活动) E0757 变量 "size_t" 不是类型名 darknet_no_gpu d:\opencv-4.0.1\build\install\include\opencv2\core\core_c.h 1583
错误(活动) E0757 变量 "size_t" 不是类型名 darknet_no_gpu d:\opencv-4.0.1\build\install\include\opencv2\core\core_c.h 1584
错误(活动) E0020 未定义标识符 "namespace" darknet_no_gpu d:\opencv-4.0.1\build\install\include\opencv2\core\cvdef.h 58
造成这些错误的原因是, darknet的源代码都是c代码(*.c),VS自动会用c编译器来编译这些代码,并c方式include opencv头文件,但是3.xx后的opencv主要是C++代码编写的,尤其是4.0后完全转向C++了。所以产生不兼容,c编译器不认识c++的定义符号。
结论: 1)要在darknet windows上支持opencv, 或许低版本的opencv2.7xx 是 ok的 我手头没有这个版本,没试。。。。。
2)要想支持opencv, 可以将源代码c结尾文件改成cpp 不过darknet源代码比较大,到时需要改几百个兼容姓编译小错如 malloc前加强制类型转换等等。