跳转至

MI IPU 使用程序说明


1. 功能介绍

该demo主要展示了如何在sensor到rtsp整条pipeline中如何插入IPU模型推理部分。并且在该pipeline中使用MI IPU SDK加载yolov8n模型,并把检测结果实时显示出来。

  +---------+      +---------+      +---------+                     +--------+     +--------+
  |   VIF   | ---> |   ISP   | ---> |   SCL   | ---port0:Source---> |  VENC  | --> |  RTSP  |
  +---------+      +---------+      +----+----+                     +--------+     +--------+
                                         |                               ^
                                         |                               |
                                         |                               |
                                         |                               |
                                         |         +--------+       +----+---+
                                  port1:Scaled---> |  IPU   | ----> |  RGN   |
                                                   +--------+       +--------+
  • 将ipu功能串进pipeline,scl port0和port1分别将来自vif的原始分辨率的bufferinfo和经由scl缩放成ipu网络模型支持的分辨率大小的bufferinfo送给ipu处理,得到目标的坐标信息后,使用rgn的frame功能,attach到venc绘制出检测框,并与port0的sensor数据一起Encoder成H264的stream,最后用rtsp协议送出去,可以在PC端预览整个视频流与推理结果。
  • 默认配置的yolov8n模型可以识别80种物体,并用绿色方框框出来,方框上会用红色字体显示识别到物体的种类名称。
  • 当键入字符"q"时,进程退出。

2. 编译环境说明

Note

一般默认板端已经打包好了相应程序,因此sample_code程序编译并非必须。你可以直接在板端/customer/sample_code/bin文件夹中找到prog_vif_sensor_ipu_demo。如果你没有找到文件或有自己修改程序的需求,可参考如下步骤。

  1. 如果没有找到prog_vif_sensor_ipu_demo,可以查看\sdk\verify\sample_code\source\iford\dla\sensor_ipu_demo\sensor_ipu_demo.mk内是否包含APP_REL_PREFIX:= bin,如果没有,可以在sensor_ipu_demo.mk补上,这样就会在编译project时一同打包到image中;

  2. 在project路径下根据板子(nand/nor,ddr型号等)选择defconfig进行整包编译

    例如Comake PI D2型号板子,使用emmc,ddr4的配置,使用以下defconfig,其他板子型号详细参考用户手册

    ipc_iford.emmc.glibc-11.1.0-ext4fs.ssc029d.256.bga8_lpddr4x_d2_full_defconfig

    在project目录执行以下命令进行编译;

    export PATH=/tools/toolchain/gcc-sigmastar-9.1.0-2019.11-x86_64_arm-eabi/bin:/tools/toolchain/gcc-11.1.0-20210608-sigmastar-glibc-x86_64_arm-linux-gnueabihf/bin:$PATH

    export CROSS_COMPILE=arm-linux-gnueabihf-

    export ARCH=arm

    make ipc_iford.emmc.glibc-11.1.0-ext4fs.ssc029d.256.bga8_lpddr4x_d2_full_defconfig

    make clean && make image -j8

  3. 如有修改程序的需求,可以cd进到sdk/verify/sample_code目录执行make clean && make source/iford/dla/sensor_ipu_demo进行编译;

  4. sample_code/out/arm/app/prog_vif_sensor_ipu_demo获取可执行文件;

  5. 将可执行文件prog_vif_sensor_ipu_demo放到板子/customer/sample_code/bin路径上,修改权限777。


3. 运行环境说明

此处运行环境配置与点sensor程序完全一致,详情参考 点sensor程序说明3.1 单sensor运行环境说明的说明


4. 资源文件说明

  • 文件位置sdk/verify/sample_code/source/iford/dla/sensor_ipu_demo/resource/yolov8n_800x480_I6DW_fixed.sim_sgsimg.img
  • 打包位置:整包编译后自动打包到板端 /customer/sample_code/bin/resource 目录
  • 使用方法:程序运行时通过 model 参数指定模型路径

如果发现模型没有自动打包到板端,也可以自行拷贝。


5. 运行说明

cd到板端/customer/sample_code/bin路径,运行prog_vif_sensor_ipu_demo

参数解释如下:

prog_vif_sensor_ipu_demo index sensorIndex iqbin iqBinPath model modelPath 3dnr 3dnr_value calidata calidata_path
  • index + sensorIndex

    参数输入为选择sensorIndex,范围是0-13,resolution列表参考执行实例下表,index0/index5为picture格式,VENC暂不支持这两种resource stream,index11/index12为pwm双sensor选择,需修改dts打开开关,本demo不支持双sensor识别

    index 0, Crop(0,0,4032,3024), outputsize(4032,3024), maxfps 15, minfps 3, ResDesc 4032x3024@15fps
    index 1, Crop(0,0,3840,2160), outputsize(3840,2160), maxfps 21, minfps 3, ResDesc 3840x2160@21fps
    index 2, Crop(0,0,2016,1512), outputsize(2016,1512), maxfps 30, minfps 3, ResDesc 2016x1512@30fps
    index 3, Crop(0,0,1920,1080), outputsize(1920,1080), maxfps 30, minfps 3, ResDesc 1920x1080@30fps
    index 4, Crop(0,0,3264,2448), outputsize(3264,2448), maxfps 30, minfps 3, ResDesc 3264x2448@30fps
    index 5, Crop(0,0,4032,3024), outputsize(4032,3024), maxfps 30, minfps 3, ResDesc 4032x3024@30fps
    index 6, Crop(0,0,3840,2160), outputsize(3840,2160), maxfps 30, minfps 3, ResDesc 3840x2160@30fps
    index 7, Crop(0,0,1920,1080), outputsize(1920,1080), maxfps 60, minfps 3, ResDesc 1920x1080@60fps
    index 8, Crop(0,0,1008,756), outputsize(1008,756), maxfps 200, minfps 3, ResDesc 1008x756@200fps
    index 9, Crop(0,0,2560,1440), outputsize(2560,1440), maxfps 30, minfps 3, ResDesc 2560x1440@30fps
    index 10, Crop(0,0,1920,1080), outputsize(1920,1080), maxfps 60, minfps 3, ResDesc 1920x1080@60fps_master_xvs
    index 11, Crop(0,0,1920,1080), outputsize(1920,1080), maxfps 60, minfps 3, ResDesc 1920x1080@60fps_slave_pwm_low
    index 12, Crop(0,0,1920,1080), outputsize(1920,1080), maxfps 60, minfps 3, ResDesc 1920x1080@60fps_slave_pwm_high
    choice which resolution use, cnt 13
    
  • iqbin + iqBinPath

    加载iqbin的路径

注意

选择IQ BIN的时候请注意参考下表与分辨率对应。

分辨率 IQ File 注意
4032x3024@15fps NA 不支持
3840x2160@21fps imx681_8m_comake_1201_30fps.bin NA
2016x1512@30fps imx681_3m_comake_1201_30fps.bin NA
1920x1080@30fps imx681_3m_comake_1201_30fps.bin NA
3264x2448@30fps imx681_8m_comake_1201_30fps.bin NA
4032x3024@30fps NA 不支持
3840x2160@30fps imx681_8m_comake_1201_30fps.bin NA
1920x1080@60fps imx681_2m_comake_1201_60fps.bin NA
  • model + modelPath

    参数model输入为模型的文件路径。

  • 3dnr + 3dnr_value

    是否开启3dnr,0:关闭,1:开。

  • calidata + calidata_path

    加载calidata路径

执行示例

  1. 配置USB为rndis网卡,cd到/customer/sample_code/bin/resource,运行./setup_rndis.sh,默认会拉起usb0网卡,输入ifconfig会出现以下log:

    usb0      Link encap:Ethernet  HWaddr E6:46:AC:2F:77:56
        inet addr:192.168.7.2  Bcast:192.168.7.255  Mask:255.255.255.0
        UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
        RX packets:48 errors:0 dropped:31 overruns:0 frame:0
        TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
        collisions:0 txqueuelen:1000
        RX bytes:3400 (3.3 KiB)  TX bytes:0 (0.0 B)
    

    此时PC端会枚举出一个虚拟的RNDIS网卡,可以通过“右键->开始->设备管理器->网络适配器查看,通常名字为USB Ethernet/RNDIS Gadget,如果没有该设备可能电脑没有安装RNDIS驱动,可以参考链接第四章进行安装:https://dev.comake.online/home/article/7672

  2. 运行单sensor IPU模型推理示例:

    ./prog_vif_sensor_ipu_demo index 3 model ./resource/yolov8n_800x480_I6DW_fixed.sim_sgsimg.img iqbin /config/iqfile/imx681_3m_comake_1201_30fps.bin 3dnr 1 calidata /config/iqfile/3m_ne_cali.data


6. 运行结果说明

  • 效果查看

    选择运行进入单sensor的IPU模型推理场景,在PC端终端运行 vlc media player 或 potplayer 等视频播放软件,以打开链接rtsp://192.168.7.2/6600的方式播放,播放成功可看到sensor画面。画面中识别到的物体等会被画框标注,可以同时框出多个检测体,在检测框上会以红色字体标注识别到的物体名称。