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。如果你没有找到文件或有自己修改程序的需求,可参考如下步骤。

  1. 在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_defconfig make clean && make image -j8

  2. 进到sdk/verify/sample_code目录执行

    make source/pcupid/dla/detection_demo命令进行编译;默认是串流到mipi panel显示,若要串到ffmpeg->tcp,则将detection_demo.mk的FFMPEG := true注释打开即可

  3. 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模型,即可正常运行和显示识别框和字符串。

适配其它模型时,方法与此相同。