前面一篇文章已经带着大家将 DeepStream 容器配置 Python 使用环境,本文的重点就是继续执行实际的开发操作。
由于前面开启容器时,透过 “-v” 指令将容器外路径与容器内形成映射,因此实际代码文件是存放在主机上(容器外),我们可以在主机上使用 gedit 这个较为便利的编辑器去修改代码,然后在容器内执行应用,如此搭建起实用性更高的开发环境。
在 DeepStream 范例中的 test2 是识别功能最丰富的经典范例,不仅能识别对 “Car” 与 “Person” 配置唯一的编号进行跟踪功能,还能为 “Car” 物体进一步分析 “厂牌”、“颜色”、“车型” 等属性,我们还可以将这些信息改成中文显示。
另一个 runtime_source_add_delete 项目则是实现 “动态添加/删减视频源” 的功能,通常在面对 “不均衡” 监控的时候,会需要这项功能的辅助。
例如 “医院的门诊与急诊” 的流量在正常工作时间是门诊大于急诊,下班之后的流量就刚好反转,如果能根据时间去调整输入源的增减,就会有很高的实用性;都市中很多道路车流量在上下班高峰期是反转的,如果中控室的监控屏幕数量有限的时候,也可以根据不同状态去调整视频流的来源。
这并不意味着我们得去调整设备的数量,而是调整输入源的 “接收开关”,例如道路交通的监控有 100 台摄像头,是保持 24 小时全年午休地拍摄并传输数据,而中控室如果只有 50 个显示屏幕,就只要切换接收输入源的开关就可以。
现在就用容器版 DeepStream 的 Python 环境,来执行这两个应用。
1、DeepStream-test2 项目
这个项目将 DeepStream 关于物体识别的绝大部分人工智能功能都集于一身,包括以下三大类组件:
1 个具备四类别的物体检测器(object detector)作为一阶段检测器;
1 个跟踪器(tracker);
3 个基于 “Car” 类别的图像分类器(image classifier)作为二阶段分类器。
三者的合作关系如下:
1)将读入的图像传给一阶段检测器进行物体检测计算;
2)将识别出的物体传送给跟踪器去赋予唯一的编号;
3)如果识别的类别为 “Car”,则将物体位置坐标分别传送给 3 个二阶段分类器,对坐标内图形进行 “厂牌”、“颜色”、“车型” 等属性识别;
4)最后将上面的信息合成回原始图像,然后进行输出作业。
这里使用的检测器与 3 个二阶段分类器模型都在 samples / models 下,如以下的路径名:
Primary_Detector:一阶段监测器
Secondary_CarColor:识别车辆颜色的二阶段分类器
Secondary_CarMake:识别车辆厂牌的二阶段分类器
Secondary_VehicleTypes:识别车辆种类的二阶段分类器
如果前面建立的 Python 容器环境没有删除的话,现在就可以执行以下指令进入容器内去执行这个范例:
sudo xhost +si:localuser:root
docker start ds_python && docker exec -it ds_python bash
进入容器后,执行以下指令:
cd sources/deepstream_python_apps/apps/deepstream-test2
./deepstream_test_2.py ../../../../samples/streams/sample_720p.h264
下图就是执行的效果,可以看到每个识别到的物体都有唯一的识别号,在 “Car 3” 后面还有 “gray” 与 “nissan” 等颜色与厂牌的信息。
不过这个容器版有个还未解决的问题,就是 “中文显示” 的部分,如果有更精通操作系统的朋友可以试着解决这个中文显示问题。
2、runtime_source_add_delete 项目
这个项目也是基于 deepstream-test2 多神经网络组合识别项目基础上,使用以下的动态处理函数,因此没有固定的通道结构:
1)create_uridecode_bin:作为 “多输入源路径解析” 功能;
2)stop_release_source:停止指定编号数据源,并释放相关资源的内存空间;
3)delete_sources:首先删除现有 stream 中已经 End of Stream 的数据源,如果没有随机删除一个视频源。如果全部视频源都被删除时,就结束应用;
4)add_sources:随机增加数据源,如果数量达到 MAX_NUM_SOURCES,10s 后删除一个视频源;
5)bus_call:总线管理机制,作为触发事件的管理机制。
为了简化运行,这个示例只接收 1 个 H.264 视频文件当作 4 个输入源使用,每 10 秒添加的视频都会从头开始播放,系统就是为每个输入源设置唯一的编号,作为新增与删除的依据。
cd sources/deepstream_python_apps/apps/runtime_source_add_delete
export DS_ROOT=/opt/nvidia/deepstream/deepstream/
./deepstream_rt_src_add_del.py file://$DS_ROOT/samples/streams/sample_720p.mp4
接下去就会执行以下的 7 个画面变化:
1)显示第一个输入源的检测结果:
2)10 秒后添加第二个输入源的检测结果:
3)再 10 秒后添加第三个输入源的检测结果:
4)再 10 秒后添加第四个输入源的检测结果:
5)再 10 秒后随机删除一个输入源:
6)再 10 秒后又随机删除一个输入源:
7)再 10 秒后又随机删除一个输入源:
8)再 10 秒后删除最后一个输入源。
可以修改 deepstream_rt_src_add_del.py 文件的以下两个粗体下划线的参数,调整输出总数量与间隔时间:
第 48 行:MAX_NUM_SOURCES = 4
第 278 行:GLib.timeout_add_seconds(10, delete_sources, g_source_bin_list)
之后请自行尝试修改的结果。
审核编辑:汤梓红
全部0条评论
快来发表一下你的评论吧 !