yolo视频检测之接口实现

本文介绍了如何在Yolo视频检测项目中,将run detector函数封装为simplebox函数,解决了C和C++混合编程的问题。通过在C++中使用extern C声明引用C头文件,将函数移动到src目录并在makefile中更新编译规则。在视频流检测时,特别注意了命令行参数中视频流地址的正确输入。最终实现了函数封装,简化了主程序的调用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

inyolo视频检测过程中,由于命令行参数不同,程序进入函数不同,这里只需要 这一句 命令下走的函数部分

./darknet detector demo cfg/coco.data cfg/yolov3.cfg yolov3.weights <video file>

 因此将这里用到的run detector函数部分打包成一个simplebox函数。

这里要解决的问题在于yolo内部函数之间的互相依赖关系。

之前想将这个函数做成类,但是yolo作者是纯c写的代码,类是c++才有的概念,这就涉及到c ,c++混合编程的问题,中间学到了不少相关的基础知识。比如在c++文件里调用 c的头文件要用extern C声明等。

在用gcc编译工程后,程序只用了cpu,解决未果,后来索性抛弃这个思路,按照yolo源码解析(1):代码逻辑 - 优快云博客 这位作者的添加头文件和c文件思路,将打包好的simplebox函数放在src目录下,在makefile文件中,OBJ = 后面添加 symplebox.o,并将这个函数放入darknet.h声明中。

主函数内部只需这一句:  simplebox(argc,argv);  即可实现函数封装(我自己认为的封装)。

还需注意的是,在视频流检测时,复制摄像机镜头地址后,需要加双引号在放入mi,即命令行中,“视频流地址”,不然视频流中的特殊字符会影响文件名读取。

 

附上代码:

主要思想是:

将examples下面darknet.c内的主函数名 int main 改为 void simplebox,其他函数不变,并将darkent.c 重命名为 symplebox.c,移出example文件夹,放入src文件夹,并写一个symplebox.h声明sympleb

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值