之前写过一个简单的寒武纪CNStream的编译环境的文章
后来 领导安排了别的活就没有记录了 ,正好最近领导又让接回来这个活
需求是 从给定的10张jpg图片中检测 没有车辆的图片 然后筛选出道路上没有车的图片
因为CNStream官方提供的算法就可以实现车辆检测 行人检测 物体检测,所以直接用CNStream的算法库就可以,我们需要对CNStream稍微修改一点点,为了避免直接修改CNStream的module 我们添加了一个自定义的module,我们称之为CarDetection
参考CNStream官方文档 我是直接复制了module目录下osd的例子
然后改个名字 去掉不需要的部分如下图
先看一下 官方自带的 jpeg检测图片可以osd表示出来的效果 有车的话会画出来
没车或者很小或者检测不出来就不会画任何东西。我们最终不需要画OSD 找出图片就可以了所以写了个很简单的 自定义了模块
cpp部分主要是处理Process函数 这里会受到推理之后的 的图片原始数据和推理结果
很简单 遍历推理结果的list 如果检测到到 car person bus等等 就返回 说明道路上有车辆或者人
如果没有则输出当前的jpg文件。这个文件是我自己在CNFrameInfo中加了一个字段。用来保存文件名。
自定义的module建好之后需要修改modules下面的CMakeLists.txt文件
如上仿照别的模块 我这里叫car_detection
加进去之后 编译的时候就可以编译到了
正常编译没问题之后 看下我的运行脚本
运行的时候敲如下命令./runjpeg.sh mlu270
files.list_pose_image 就一行 指定了待检测图片的目录
在看下我的config_car.json 配置文件如下 图片检测的那个是官方的没有改动
car_detection.json如下: 改了一个output_buf_number 原来视频用的是32 jpeg 提示太大 所以改成了16
osd_lable_map_car.json 如下:
这里指定的我们自定义的模块 CarDetection 这里cnstream是代码里面的名字空间
CarDetection是模块的类名 必须一致 不然会找不到。运行效果如下: