简介
- 查看解码CPU利用率
-
进程名: r listen - 进程ID:1293
-
需求
- 算法
- 安全帽检测
- 反光衣检测
- 区域入侵
- 烟火检测
- 业务
- 四路,4fps
- 轮询
- 任务配置
- 画区域
任务分割
- 当前主要任务:
- 搞清楚任务管理界面,轮询功能的业务逻辑
轮询业务
- 环境
- 创建一个轮询任务,必须要绑定至少两个算法,当前绑定算法为 安全帽检测 和 区域入侵检测。
- 配置可选项为 算法运行时间,目前都配置三分钟
- 当前配置的摄像头为 : rtsp://192.169.4.16/test-phone-Helmet.mp4
- 现象
- 安全帽
- 第一次告警,时间:2023-05-22 17:59:20 ;
- 随后,持续告警安全帽,最后一次告警,时间: 2023-05-22 18:02:02;
- 区域入侵
- 第一次告警,时间:2023-05-22 18:02:27
- 随后,持续告警区域入侵,最后一次告警,时间:2023-05-22 18:05:13
- 接下来,重复安全帽检测
- 第一次告警,时间:2023-05-22 18:05:20
- 随后,持续告警安全帽,最后一次告警,时间:2023-05-22 18:08:05
- 接下来,重复区域入侵检测
- 第一次告警,时间:2023-05-22 18:08:21
- 随后,持续告警区域入侵,最后一次告警,时间:2023-05-22 18:11:12
- 安全帽
- 结论一
- 轮询启用,一个任务,一个视频流,配置多个算法,每个算法配置运行时间,相当于配置运行的时间片
- 任务启动后,从当前时间开始计时,执行绑定的第一个检测算法,运行时间为该算法所配置的运行时间,达到运行时间后,启用绑定的下一个检测算法,同时开始计时
- 重复以上步骤
- 推论一
- 类似于时间片轮转调度算法,一个拉取了视频流的任务相当于一个CPU资源,每一个算法相当于一个进程,在配置时,给每个算法配置 算法运行时间,相当于给每个进程分配一个固定大小的时间片,这些算法存放在一个队列中,规则为FIFO
- 取队列头部的算法使用,当这个算法在任务上生效时,相当于这个算法独占了这个任务(视频流资源),在内部启动一个计时器,当时间片用完时,这个算法让出任务(视频流资源),放到队列尾部,等待下一次使用
- 下一个算法为队列头部的算法,其占用任务(视频流资源),同时其内存启动该任务的计时器,当该任务的时间片用完时,也让出任务(视频流资源),下一个算法占用,以此类推
阶段启用业务
- 环境
- 创建一个阶段启用任务,可以绑定多个算法
- 需要配置的选项为 算法运行开始时间 和 算法运行结束时间
- 安全帽配置的算法运行开始时间为 19:40, 算法运行结束时间为 19:45
- 区域入侵配置的算法运行开始时间为 19:50, 算法运行结束时间为 19:55
- 配置的算法阶段启用时间段不能重合,一点都不能重合,是串行的
- 当前配置的摄像头为:rtsp://192.169.4.16/test-phone-Helmet.mp4
- 现象
- 创建任务后,不会立即显示视频流,等到19:40才会有视频流显示,同时会有安全帽的告警时间产生;时间到19:45后,视频流不再显示,同时安全帽的告警时间也不产生
- 等到时间到19:50,视频流再次显示,同时区域入侵的告警事件产生;时间到19:55后,视频流不再显示,同时告警也不再显示
- 结论一
- 阶段启用任务,一个任务,一个视频流,配置多个算法,每个算法配置启用的时间 和 结束的时间,这个时间的单位是小时和分钟,意味着如果不停止任务,每天的配置时间内会启动检测,
- 推论一
- 类似于比特大陆盒子上的设置任务有效时间,只不过这个启动和停止是任务方面的,到时间了启动任务,超过了时间段,就停止任务,第二天同一时间再启动和停止任务
web后端
- 环境
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
root@RV1126_RV1109:/usr/local/bin# ls node_srv root@RV1126_RV1109:/usr/local/bin# ldd node_srv linux-vdso.so.1 (0xaefd4000) libgddi_codec.so.1 => /usr/local/lib/libgddi_codec.so.1 (0xa6a63000) libavcodec.so.58 => /usr/local/lib/libavcodec.so.58 (0xa5be1000) libavformat.so.58 => /usr/local/lib/libavformat.so.58 (0xa5a27000) libavutil.so.56 => /usr/local/lib/libavutil.so.56 (0xa578f000) libswscale.so.5 => /usr/local/lib/libswscale.so.5 (0xa572f000) libgddi_rockchip_sdk.so.20 => /usr/local/lib/libgddi_rockchip_sdk.so.20 (0xa5511000) librga.so => /usr/local/lib/librga.so (0xa54ec000) librockchip_mpp.so.1 => /usr/local/lib/librockchip_mpp.so.1 (0xa53b5000) libgddi_post.so.1 => /usr/local/lib/libgddi_post.so.1 (0xa52fe000) libopencv_calib3d.so.4.4 => /usr/local/lib/libopencv_calib3d.so.4.4 (0xa51f1000) libopencv_videoio.so.4.4 => /usr/local/lib/libopencv_videoio.so.4.4 (0xa51a0000) libopencv_imgcodecs.so.4.4 => /usr/local/lib/libopencv_imgcodecs.so.4.4 (0xa5057000) libopencv_imgproc.so.4.4 => /usr/local/lib/libopencv_imgproc.so.4.4 (0xa4d9c000) libopencv_core.so.4.4 => /usr/local/lib/libopencv_core.so.4.4 (0xa4b79000) librt.so.1 => /lib/arm-linux-gnueabihf/librt.so.1 (0xa4b63000) libpthread.so.0 => /lib/arm-linux-gnueabihf/libpthread.so.0 (0xa4b3d000) libstdc++.so.6 => /lib/arm-linux-gnueabihf/libstdc++.so.6 (0xa49f4000) libm.so.6 => /lib/arm-linux-gnueabihf/libm.so.6 (0xa498b000) libc.so.6 => /lib/arm-linux-gnueabihf/libc.so.6 (0xa488c000) /lib/ld-linux-armhf.so.3 (0xa6eee000) libgcc_s.so.1 => /lib/arm-linux-gnueabihf/libgcc_s.so.1 (0xa4863000) libavfilter.so.7 => /usr/local/lib/libavfilter.so.7 (0xa45e9000) libswresample.so.3 => /usr/local/lib/libswresample.so.3 (0xa45c9000) libdrm.so.2 => /usr/local/lib/libdrm.so.2 (0xa45ae000) librknn_api.so => /usr/local/lib/librknn_api.so (0xa459c000) libopencv_features2d.so.4.4 => /usr/local/lib/libopencv_features2d.so.4.4 (0xa4513000) libopencv_flann.so.4.4 => /usr/local/lib/libopencv_flann.so.4.4 (0xa44cd000) libdl.so.2 => /lib/arm-linux-gnueabihf/libdl.so.2 (0xa44ba000) libpostproc.so.55 => /usr/local/lib/libpostproc.so.55 (0xa44a1000)
- C 动态库
- libpthread
- libm
- libc
- libgcc_s
- libdrm
- libdl
- C++ 动态库
- libstdc++
- FFmpeg 动态库
- libavcodec
- libavformat
- libavutil
- libswscale
- libavfilter
- libswresample
- libpostproc
- OpenCV 动态库
- libopencv_calib3d
- libopencv_videoio
- libopencv_imgcodecs
- libopencv_imgproc
- libopencv_core
- libopencv_features2d
- libopencv_flann
- rk 动态库
- librga
- librt
- librknn_api
- rockchip 动态库
- libgddi_codec
- librockchip_mpp
- libgddi_rockchip_sdk
- libgddi_post
- rockchip 动态库详细信息 ldd -v node_srv
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
/usr/local/lib/libgddi_codec.so.1: libswscale.so.5 (LIBSWSCALE_5) => /usr/local/lib/libswscale.so.5 libavformat.so.58 (LIBAVFORMAT_58) => /usr/local/lib/libavformat.so.58 ld-linux-armhf.so.3 (GLIBC_2.4) => /lib/ld-linux-armhf.so.3 libavfilter.so.7 (LIBAVFILTER_7) => /usr/local/lib/libavfilter.so.7 libavcodec.so.58 (LIBAVCODEC_58) => /usr/local/lib/libavcodec.so.58 libavutil.so.56 (LIBAVUTIL_56) => /usr/local/lib/libavutil.so.56 libgcc_s.so.1 (GCC_3.4) => /lib/arm-linux-gnueabihf/libgcc_s.so.1 libgcc_s.so.1 (GCC_3.5) => /lib/arm-linux-gnueabihf/libgcc_s.so.1 libc.so.6 (GLIBC_2.4) => /lib/arm-linux-gnueabihf/libc.so.6 libstdc++.so.6 (GLIBCXX_3.4.15) => /lib/arm-linux-gnueabihf/libstdc++.so.6 libstdc++.so.6 (GLIBCXX_3.4.18) => /lib/arm-linux-gnueabihf/libstdc++.so.6 libstdc++.so.6 (CXXABI_1.3.5) => /lib/arm-linux-gnueabihf/libstdc++.so.6 libstdc++.so.6 (CXXABI_1.3.9) => /lib/arm-linux-gnueabihf/libstdc++.so.6 libstdc++.so.6 (CXXABI_1.3) => /lib/arm-linux-gnueabihf/libstdc++.so.6 libstdc++.so.6 (GLIBCXX_3.4.21) => /lib/arm-linux-gnueabihf/libstdc++.so.6 libstdc++.so.6 (GLIBCXX_3.4.14) => /lib/arm-linux-gnueabihf/libstdc++.so.6 libstdc++.so.6 (GLIBCXX_3.4.11) => /lib/arm-linux-gnueabihf/libstdc++.so.6 libstdc++.so.6 (CXXABI_ARM_1.3.3) => /lib/arm-linux-gnueabihf/libstdc++.so.6 libstdc++.so.6 (GLIBCXX_3.4.22) => /lib/arm-linux-gnueabihf/libstdc++.so.6 libstdc++.so.6 (GLIBCXX_3.4.19) => /lib/arm-linux-gnueabihf/libstdc++.so.6 libstdc++.so.6 (GLIBCXX_3.4) => /lib/arm-linux-gnueabihf/libstdc++.so.6
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
/usr/local/lib/libgddi_rockchip_sdk.so.20: libm.so.6 (GLIBC_2.27) => /lib/arm-linux-gnueabihf/libm.so.6 libm.so.6 (GLIBC_2.4) => /lib/arm-linux-gnueabihf/libm.so.6 ld-linux-armhf.so.3 (GLIBC_2.4) => /lib/ld-linux-armhf.so.3 libgcc_s.so.1 (GCC_3.5) => /lib/arm-linux-gnueabihf/libgcc_s.so.1 libpthread.so.0 (GLIBC_2.4) => /lib/arm-linux-gnueabihf/libpthread.so.0 libstdc++.so.6 (GLIBCXX_3.4.20) => /lib/arm-linux-gnueabihf/libstdc++.so.6 libstdc++.so.6 (CXXABI_1.3.8) => /lib/arm-linux-gnueabihf/libstdc++.so.6 libstdc++.so.6 (CXXABI_1.3.1) => /lib/arm-linux-gnueabihf/libstdc++.so.6 libstdc++.so.6 (CXXABI_1.3.9) => /lib/arm-linux-gnueabihf/libstdc++.so.6 libstdc++.so.6 (GLIBCXX_3.4.9) => /lib/arm-linux-gnueabihf/libstdc++.so.6 libstdc++.so.6 (GLIBCXX_3.4.11) => /lib/arm-linux-gnueabihf/libstdc++.so.6 libstdc++.so.6 (CXXABI_1.3) => /lib/arm-linux-gnueabihf/libstdc++.so.6 libstdc++.so.6 (GLIBCXX_3.4.14) => /lib/arm-linux-gnueabihf/libstdc++.so.6 libstdc++.so.6 (GLIBCXX_3.4.21) => /lib/arm-linux-gnueabihf/libstdc++.so.6 libstdc++.so.6 (CXXABI_ARM_1.3.3) => /lib/arm-linux-gnueabihf/libstdc++.so.6 libstdc++.so.6 (GLIBCXX_3.4.22) => /lib/arm-linux-gnueabihf/libstdc++.so.6 libstdc++.so.6 (GLIBCXX_3.4.15) => /lib/arm-linux-gnueabihf/libstdc++.so.6 libstdc++.so.6 (GLIBCXX_3.4) => /lib/arm-linux-gnueabihf/libstdc++.so.6 libc.so.6 (GLIBC_2.16) => /lib/arm-linux-gnueabihf/libc.so.6 libc.so.6 (GLIBC_2.15) => /lib/arm-linux-gnueabihf/libc.so.6 libc.so.6 (GLIBC_2.7) => /lib/arm-linux-gnueabihf/libc.so.6 libc.so.6 (GLIBC_2.17) => /lib/arm-linux-gnueabihf/libc.so.6 libc.so.6 (GLIBC_2.11) => /lib/arm-linux-gnueabihf/libc.so.6 libc.so.6 (GLIBC_2.25) => /lib/arm-linux-gnueabihf/libc.so.6 libc.so.6 (GLIBC_2.4) => /lib/arm-linux-gnueabihf/libc.so.6
1 2 3 4 5 6 7 8 9 10
/usr/local/lib/librockchip_mpp.so.1: libgcc_s.so.1 (GCC_3.5) => /lib/arm-linux-gnueabihf/libgcc_s.so.1 libpthread.so.0 (GLIBC_2.12) => /lib/arm-linux-gnueabihf/libpthread.so.0 libpthread.so.0 (GLIBC_2.4) => /lib/arm-linux-gnueabihf/libpthread.so.0 libm.so.6 (GLIBC_2.4) => /lib/arm-linux-gnueabihf/libm.so.6 libm.so.6 (GLIBC_2.15) => /lib/arm-linux-gnueabihf/libm.so.6 libc.so.6 (GLIBC_2.8) => /lib/arm-linux-gnueabihf/libc.so.6 libc.so.6 (GLIBC_2.28) => /lib/arm-linux-gnueabihf/libc.so.6 libc.so.6 (GLIBC_2.17) => /lib/arm-linux-gnueabihf/libc.so.6 libc.so.6 (GLIBC_2.4) => /lib/arm-linux-gnueabihf/libc.so.6
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
/usr/local/lib/libgddi_post.so.1: ld-linux-armhf.so.3 (GLIBC_2.4) => /lib/ld-linux-armhf.so.3 libm.so.6 (GLIBC_2.4) => /lib/arm-linux-gnueabihf/libm.so.6 libgcc_s.so.1 (GCC_3.4) => /lib/arm-linux-gnueabihf/libgcc_s.so.1 libgcc_s.so.1 (GCC_3.5) => /lib/arm-linux-gnueabihf/libgcc_s.so.1 libc.so.6 (GLIBC_2.4) => /lib/arm-linux-gnueabihf/libc.so.6 libstdc++.so.6 (GLIBCXX_3.4.15) => /lib/arm-linux-gnueabihf/libstdc++.so.6 libstdc++.so.6 (CXXABI_1.3.8) => /lib/arm-linux-gnueabihf/libstdc++.so.6 libstdc++.so.6 (GLIBCXX_3.4.9) => /lib/arm-linux-gnueabihf/libstdc++.so.6 libstdc++.so.6 (GLIBCXX_3.4.18) => /lib/arm-linux-gnueabihf/libstdc++.so.6 libstdc++.so.6 (CXXABI_1.3.5) => /lib/arm-linux-gnueabihf/libstdc++.so.6 libstdc++.so.6 (CXXABI_1.3.9) => /lib/arm-linux-gnueabihf/libstdc++.so.6 libstdc++.so.6 (GLIBCXX_3.4.21) => /lib/arm-linux-gnueabihf/libstdc++.so.6 libstdc++.so.6 (GLIBCXX_3.4.14) => /lib/arm-linux-gnueabihf/libstdc++.so.6 libstdc++.so.6 (GLIBCXX_3.4.11) => /lib/arm-linux-gnueabihf/libstdc++.so.6 libstdc++.so.6 (CXXABI_1.3.11) => /lib/arm-linux-gnueabihf/libstdc++.so.6 libstdc++.so.6 (CXXABI_ARM_1.3.3) => /lib/arm-linux-gnueabihf/libstdc++.so.6 libstdc++.so.6 (GLIBCXX_3.4.22) => /lib/arm-linux-gnueabihf/libstdc++.so.6 libstdc++.so.6 (GLIBCXX_3.4.19) => /lib/arm-linux-gnueabihf/libstdc++.so.6 libstdc++.so.6 (GLIBCXX_3.4) => /lib/arm-linux-gnueabihf/libstdc++.so.6 libstdc++.so.6 (CXXABI_1.3) => /lib/arm-linux-gnueabihf/libstdc++.so.6
- 推论一
- libgddi_codec,视频解码部分
- librockchip_mpp,媒体处理部分
- libgddi_rockchip_sdk,推理部分
- libgddi_post,web后端
MediaServer
- 环境
- 盒子中路径为
/proc/1860/cwd/
- docker 容器名称为 zl ,路径为
/zlmediakit/
- 盒子中路径为
- ldd MediaServer
1 2 3 4 5 6 7 8 9 10 11 12
[root@RV1126_RV1109:/proc/1860]# docker exec -it zl bash root@ad140a93bf2b:/zlmediakit# ldd MediaServer linux-vdso.so.1 (0xaefd6000) libpthread.so.0 => /lib/arm-linux-gnueabihf/libpthread.so.0 (0xa6b57000) libssl.so.1.1 => /lib/arm-linux-gnueabihf/libssl.so.1.1 (0xa6af3000) libcrypto.so.1.1 => /lib/arm-linux-gnueabihf/libcrypto.so.1.1 (0xa6945000) libstdc++.so.6 => /lib/arm-linux-gnueabihf/libstdc++.so.6 (0xa67fc000) libm.so.6 => /lib/arm-linux-gnueabihf/libm.so.6 (0xa6793000) libgcc_s.so.1 => /lib/arm-linux-gnueabihf/libgcc_s.so.1 (0xa676a000) libc.so.6 => /lib/arm-linux-gnueabihf/libc.so.6 (0xa666b000) /lib/ld-linux-armhf.so.3 (0xa6f8e000) libdl.so.2 => /lib/arm-linux-gnueabihf/libdl.so.2 (0xa6658000)
cwd/config.ini
- 有一些关于http的配置
任务-业务-小结(20230522)
- web后端,业务逻辑,认为都是使用C++写的,没有调用第三方动态库库,有使用一些第三方开源库的代码,例如日志使用了spdlog,其他功能使用了boost库
- 任务管理方面
- 持续运行,一个任务绑定一个算法,启动即运行
- 轮询,一个任务绑定多个算法,至少两个算法,为每个算法设置运行时长,每个算法依次工作各自时长,循环工作
- 阶段运行,一个任务可以绑定多个算法,也可以是一个算法,并配置算法运行启动时间和运行停止时间,多个算法的时间段不可重叠
业务分析
区域配置
- 现象
- 工地盒子配置了区域,检测目标在该区域内,才有检测框
- 小结:
- 在视频源上对检测框做了筛选,只有在指定区域内才会显示到前端
附录
- 参考截图
./data