IPU模型识别程序说明
1. 功能介绍¶
该demo主要展示了如何在sensor到panel整条pipeline中如何插入IPU模型识别部分。并且在该pipeline中使用IPU算法库函数和模型去做人脸检测,并把检测结果实时显示出来。
使用GFX画识别框
+--------+ +------------+
+---------+ +---------+ +---------+ |--->dev1 chn3 port0:Rotate-->dev1 chn0 port0:Source---> | DISP | -------->| Panel |
| VIF | ---> (dev0 chn1 port0)| ISP | (dev0 chn1 port1)---> | SCL | ---| +--------+ ^ +------------+
+---------+ +---------+ +----+----+ | |
| +--------+ +--------+
|---------------->dev1 chn1 port0:Scaled----------------> | DET | --> | GFX |
+--------+ +--------+
使用CPU画识别框
+---------+ +------------+
+---------+ +---------+ +---------+ |---------------->dev1 chn0 port0:Source---------------> | FFMPEG | ------->| RTSP/TCP |
| VIF | ---> (dev0 chn1 port0)| ISP | (dev0 chn1 port1)---> | SCL | ---| +---------+ ^ +------------+
+---------+ +---------+ +----+----+ | |
| +--------+ +----------+
|---------------->dev1 chn1 port0:Scaled----------------> | DET | --> | CPU DRAW |
+--------+ +----------+
-
由于Pcupid的SCL只支持port0,所以需要将ISP的输出串到两路的SCL。然后将dla的detection功能串进pipeline。先由SCL dev1 chn3 port0根据参数作图像旋转操作,再由SCL dev1 chn0 port0作缩放并输出给屏幕。SCL dev1 chn1 port0将来自ISP的原始分辨率的bufferinfo缩放成IPU网络模型支持的分辨率大小的bufferinfo送给det处理,得到目标的坐标信息后,若使用GFX在FB画框,则attach到DISP,若使用CPU画框,则attach到RTSP流(当使用RTSP显示时,需要用CPU画框才能在画面上显示检测框)。(目前代码匹配的模型是sdy48l.img,路径:project/board/pcupid/dla_file/ipu_net/det/)
-
当键入字符"q"时,进程退出。
2. 编译环境说明¶
Note
一般默认板端已经打包好了相应程序,因此程序编译并非必须。你可以直接在板端 /customer/sample_code/dla_detection_demo 文件夹中找到prog_dla_detection_demo。如果你没有找到文件或有自己修改程序的需求,可参考如下步骤。
-
在project路径下根据板子(emmc/nand/nor,ddr型号等)选择deconfig进行整包编译;
例如
Comake PI D1型号板子,使用emmc,ddr4的配置,使用以下deconfig,其他板子型号详细参考用户手册dispcam_pcupid.emmc.glibc-12.4.0-arm-squashfs.comake.pi.d1.1024.dual_sensor.bga_ddr4_riscv_defconfig在project目录执行以下命令进行编译;
make dispcam_pcupid.emmc.glibc-12.4.0-arm-squashfs.comake.pi.d1.1024.dual_sensor.bga_ddr4_riscv_defconfigmake clean && make image -j8 -
进到sdk/verify/sample_code目录执行
make source/pcupid/dla/detection_demo命令进行编译;默认是串流到mipi panel显示,若要串到ffmpeg->tcp,则将detection_demo.mk的FFMPEG := true注释打开即可 -
到
sample_code/out/arm/app/prog_dla_detection_demo获取可执行文件;
3. 运行环境说明¶
系统中使用的Sensor类型在编译时决定,可查看alkaid deconfig的CONFIG_SENSOR_TYPE参数确认
-
板端环境:
Comake PI D1型号板子mipi panel接口对应CON8,接上mipi panel设备即可,sensor pad0对应J5,在sensor pad0位置接上mipi sensor即可,此demo使用的是gc2053
CON8 MIPI屏为FPC上接,注意不要接反,如下第一张图所示。
CON9 靠近屏幕侧为FPC下接,靠近主板侧为FPC上接,注意不要接反,如下第二张图所示。
J5 sensor 为FPC下接,注意不要接反,如下右两图所示。

-
dts配置:
默认dts已配好,无需修改
-
sensor 驱动配置:
默认已加载好gc2053_MIPI.ko,无需修改
insmod /config/modules/5.10/gc2053_MIPI.ko chmap=1
4. 运行说明¶
-
将可执行文件
prog_dla_detection_demo放到板子上,修改权限为777 -
使用sensor为gc2053
-
运行命令,如
./prog_dla_detection_demo model sdy48l.img index 0 rotate 90进入目标检测-
input:
-
model:ipu网络模型文件路径。需要手动从alkaid/project/board/pcupid/dla_file/ipu_net/det/*.img拷贝出来,运行demo时,使用model参数指定路径。模型的详细规格见alkaid/project/board/pcupid/dla_file/ipu_net/README.txt及doc文档。 -
index:sensor通路选择,Comake PI D1最大规格支持 2Lane(或者拆分为两路 1 lane + 1 lane)对应SR0(chmap=1)跟SR2(chmap=4),加载的参数可在/customer/demo.sh配置。此处参数可选为0/1;
-
-
output:
- 无
-
注意:这个demo需要依赖ffmpeg lib,ffmpeg lib在sdk/verify/prebuild_libs/ffmpeg/lib。在emmc版本,默认会拷贝到板端/customer/3rd_party_libs/ffmpeg/lib/下。所以需要设置一下环境变量,如果customer下没有这个目录,请从sdk拷贝到特定位置并export env:
export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/customer/3rd_party_libs/ffmpeg/lib/
5. 运行结果说明¶
-
效果查看
prog_dla_detection_demo运行起来后,可选择使用ffplayer, vlc media player 或 potplayer 等视频播放软件,以打开链接方式播放,播放成功可看到sensor画面,或接上mipi屏直接在mipi屏上看到sensor画面。
若是串到ffmpeg->tcp显示,则在PC端终端运行播放器,例如
.\ffplay.exe tcp://10.24.16.40:12123
若是串到mipi显示,则接上mipi屏即可。

6. 模型适配¶
本文所用detection demo的IPU模型识别功能使用来自于检测算法的库函数。在其中,有介绍算法的类型和对应的检测类名。目前demo的检测类名对应的是sd模型。
如果需要在detection demo上使用其它模型,需要修改demo中的类名对应数组,否则在显示时字符显示会不准确。以修改类名数组(cocoClasses)为spd模型为例:
现在demo适配的是sd模型,对应的类名数组(cocoClasses)如下所示
char cocoClasses[CLASS_MAX_NUM][16] =
{
"person",
"bicycle",
"car",
"motocycle",
"bus",
"truck",
"cat",
"dog",
"head",
"face"
};
查阅介绍可以得知,spd模型输出的类别共3类,分别为行人(class_id=0)、人头(class_id=1)、人脸(class_id=2);
对应的,可以修改demo中的类名数组(cocoClasses)
char cocoClasses[CLASS_MAX_NUM][16] =
{
"person",
"head",
"face"
};
然后在运行时,model参数选择spd模型,即可正常运行和显示识别框和字符串。
适配其它模型时,方法与此相同。