VS2019 中 C++ 调用 YOLOv3 动态链接库实现目标检测
环境准备与依赖获取
在工业级视觉系统开发中,直接使用 Python 部署往往难以满足实时性和资源占用的要求。尤其是在嵌入式设备或高并发场景下,C++ 成为更优选择。本文聚焦于如何在 Visual Studio 2019 中通过 C++ 调用由 Darknet 编译生成的 yolo_cpp_dll.dll 动态链接库,结合 OpenCV 实现高效的目标检测功能。
整个流程的核心在于正确配置编译环境和外部依赖。如果你已经完成了基于 Darknet 框架的 YOLOv3 在 Windows 10 下的编译工作,那么接下来只需将生成的 DLL 文件集成到新项目中即可。若尚未完成这一步,建议先参考 AlexeyAB/darknet 官方仓库完成构建。
YOLO(You Only Look Once)自 2015 年提出以来,凭借其'单次前向传播完成检测'的机制,在速度与精度之间取得了良好平衡。其中 YOLOv3 因支持多尺度预测、对小物体检测表现优异,至今仍在许多实际工程中被广泛采用。
要成功运行后续代码,必须准备好以下关键组件:
yolo_cpp_dll.dll 与 yolo_cpp_dll.lib 的获取
这两个文件是调用 YOLOv3 推理能力的关键——.dll 是运行时所需的动态库,而 .lib 则是在链接阶段供编译器使用的导入库。
它们需从 Darknet 源码手动编译获得:
- 打开你的 Darknet 源码目录,例如:
D:\darknet-master\build\darknet\ - 使用文本编辑器打开
yolo_cpp_dll.vcxproj文件,检查并修改 CUDA 版本号以匹配本地安装版本。比如你使用的是 CUDA 10.2,则应确保所有<CudaVersion>10.2</CudaVersion>设置一致。 - 用 Visual Studio 2019 打开
yolo_cpp_dll.sln解决方案。 - 将解决方案平台设为
x64,配置为Release,然后执行【生成】→【生成解决方案】。 - 成功后可在
x64/Release/目录找到:yolo_cpp_dll.dllyolo_cpp_dll.lib
若出现头文件缺失或库路径错误,请确认是否已正确设置 OpenCV 和 CUDA 的包含目录与库目录。常见做法是在项目属性中添加类似路径:
- 包含目录:
D:\opencv\build\include,C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.2\include- 库目录:
D:\opencv\build\x64\vc15\lib
pthreadGC2.dll 与 pthreadVC2.dll 的来源
这两个 DLL 属于 MinGW 提供的 POSIX 线程兼容库,用于跨平台线程调度支持。虽然 Darknet 主要面向 MSVC 构建,但在某些构建脚本中仍会引入这些依赖。
通常可以在已有构建输出目录中找到它们,如:
darknet/x64/pthreadGC2.dll darknet/x64/pthreadVC2.dll
⚠️ 运行时必须将这两个文件复制到最终可执行程序所在目录,否则会出现'找不到指定模块'错误。
引入 yolo_v2_class.hpp 头文件
该头文件定义了核心类 Detector 及结构体 bbox_t,是 C++ 接口调用的基础。
从源码路径复制即可:
D:\darknet-master\include\yolo_v2_class.hpp

