点sensor程序说明


1. sensor图像显示功能介绍

该demo 主要展示了从Sensor到Panel 整条Pipeline该如何串接, 如上图所示,并在该Pipeline中使用IPU 去做目标的检测并把检测结果实时显示出来,具体支持如下功能:

  1. 功能场景:sensor采集到的视频显示到panel上(文中其他描述出现的sensorTopanel,sensor2panel均是指此功能)

  2. 视频流:sensor->vif->isp->scl->(vdisp)->disp->panel

  3. 支持配置双摄

  4. 支持vif-isp 绑定方式的动态切换

  5. 支持配置iqbin的路径配置

  6. 支持iq tool调试

  7. 支持配置MIPI屏

  8. 支持输出一路RGB & 一路IR 显示

  9. 支持单路物体检测画框

  10. 支持配置iqbin的路径


2. 编译环境说明

Note

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

  1. dts 配置

    • 配置屏幕dts

      以mipi屏为例,需修改kernel/arch/arm/boot/dts/pcupid-comake-pi-d1-dual-sensor-padmux.dtsi中对应的 // MIPIDSI 4 LANE部分为if 1,将MIPIDSI 4lane的设备树打开编译

    • 配置sensor dts

      如使用gc2053,1-lane sensor + 1-lane sensor,修改kernel/arch/arm/boot/dts/pcupid-comake-pi-d1-dual-sensor.dts

      csi: csi {
          ...
          /* Config max lane number, sr0 set to 2 include 1lan support*/
          csi_sr0_lane_num = <2>;
          csi_sr2_lane_num = <1>;
          /* Config lane selection */
          csi_sr0_lane_select = <0 1 2>;
          csi_sr2_lane_select = <0 1>;
          /* Config lane P/N swap */
          csi_sr0_lane_pn_swap = <0 0 0>;
          csi_sr2_lane_pn_swap = <0 0>;
      };
      
      sensorif: sensorif {
          compatible = "sstar,sensorif";
          status = "okay";
          clocks = <&CLK_sr00_mclk>, <&CLK_sr01_mclk>;
      
          /* Config sensor 0 pad mux */
          snr_sr0_mipi_mode         = <5>;
          snr_sr0_mipi_mclk_mode    = <2>;
          snr_sr0_rst_gpio          = <73>;
          snr_sr0_pdn_gpio          = <77>;
      
          snr_sr0_par_mode          = <2>;
          snr_sr0_par_rst_mode      = <2>;
          snr_sr0_par_pdn_mode      = <1>;
          snr_sr0_par_mclk_mode     = <2>;
      
          ...
      
          /* Config sensor 2 pad mux */
          snr_sr2_mipi_mode         = <5>;
          snr_sr2_rst_gpio          = <77>;
          snr_sr2_mipi_pdn_mode     = <0>;
          snr_sr2_mipi_mclk_mode    = <2>;
      
          ...
          };
      

    进一步的sensor驱动配置请参考 SENSOR使用参考

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

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

    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

  3. 进到sdk/verify/sample_code目录执行make clean && make source/pcupid/disp/sensor2Panel_demo进行编译;

  4. sdk/verify/sample_code/out/arm/app/prog_disp_sensor2Panel_demo获取可执行文件;

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


3. 运行环境说明

  • 板端环境

    连接mipi屏和触摸板:在板端CON9与CON8 接口上插入触摸屏与MIPI屏FPC线。

    连接Sensor:在J5 /J6 上连接(单/双)gc2053 sensor。

    CON8 MIPI屏为FPC上接,注意不要接反,如下第一张图所示。

    CON9 靠近屏幕侧为FPC下接,靠近主板侧为FPC上接,注意不要接反,如下第二张图所示。

    J5 sensor 为FPC下接,注意不要接反,如下右两图所示。

  • sensor 驱动配置

    Note

    如果你下载使用的是我们提供的代码包且使用了例中的defconfig进行编译,那么以下配置不用自行修改,已默认配置完毕。

    /customer/demo.sh路径修改insmod对应的sensor ko,例如gc2053跑单sensor时,可配置为

    insmod /config/modules/6.1/gc2053_mipi.ko chmap=1
    

    双sensor时,配置为

    insmod /config/modules/6.1/gc2053_mipi.ko chmap=5
    

4. 运行说明

执行 cd /customer/sample_code/disp_sensor2Panel_demo 。到文件相应路径。

参数解释如下:

-b

选择vif-isp的绑定方式

0:vif isp realtime绑定 (单摄默认realtime,双摄只能framemode)
1:vif isp framemode绑定

-n

初始化sensor pad选择

0:初始化sensor pad0  (默认 0)
1:初始化sensor pad2
2:初始化sensor pad0 和sensor pad2

-p

选择使用的屏幕类型

0:TTL屏  (默认ttl屏)
1:mipi屏

-i

iqbin的存放目录,比如-i /customer,表示sensor0的iqbin在/customer/iqApiBin0.bin,sensor1的iqbin在/customer/iqApiBin1.bin

-c

选择sensor index,从0开始。默认值为0。gc2053不同的index对应不同lane的配置

-t

选择 display output timing,目前只有如下几个选项,如有不同屏,可自行添加

0:E_MI_DISP_OUTPUT_USER(TTL使用)
1:E_MI_DISP_OUTPUT_720P60
2:E_MI_DISP_OUTPUT_1080P60

-w

使能isp 输出IR图像,需要配合双摄

0:关闭
1:开启

-d

使能物体检测,仅支持单摄

0:关闭
1:开启

-m

加载物体检测模型路径,默认路径:/customer/yolov8n_800x480_P3P_fixed.sim_sgsimg.img

执行示例

1. 单独跑sensor pad0,MIPI 720p屏幕

./prog_disp_sensor2Panel_demo -b 0 -n 0 -c 1 -p 1 -t 0 -r 90 -i "/customer"

2. 单独跑sensor pad2,MIPI 720p屏幕

./prog_disp_sensor2Panel_demo -b 0 -n 1 -c 1 -p 1 -t 0 -r 90 -i "/customer"

3. 同时跑pad0 pad2,MIPI 720p上下分屏显示

./prog_disp_sensor2Panel_demo -b 0 -n 2 -c 1 -p 1 -t 0 -r 90 -i "/customer"

4. 同时跑pad0 pad2,MIPI 720p旋转90分屏显示

./prog_disp_sensor2Panel_demo -n 2 -c 1 -p 1 -t 0 -r 90 -w 1 -i "/customer"

5. 单sensor 物体检测,MIPI 720p旋转90显示

./prog_disp_sensor2Panel_demo -p 1 -t 0  -n 0 -r 90 -c 1 -d 1 -m /customer/sample_code/disp_sensor2Panel_demo/model/yolov8n_800x480_P3P_fixed.sim_sgsimg.im -i "/customer"

运行过程中根据串口提示如下:

select 0: change vif->isp bind mode(这个选项只支持单sensor的场景,因为双sensor只能用realtime mode)
select 110: quit app

输入对应数字可以选择不同的bind mode


5. 运行结果说明

  • 效果查看

    功能1:接入sensor进行测试pad0单独显示

    执行命令./prog_disp_sensor2Panel_demo -c 1 -n 0 -p 1 -t 0 -r 90,显示如下图,屏幕正常显示sensor0拍摄画面。

    功能2:人形识别

    执行命令./prog_disp_sensor2Panel_demo -p 1 -n 0 -c 1 -r 90 -d 1 -m model/yolov8n_800×480_P3P_fixed.sim_sgsimg.img,显示如下图,人手和人脸在镜头前移动。

    屏幕画面正常显示sensor出来的图像,可以画出识别框,并有person_0.xx打印

  • 退出命令

    输入110即可退出demo,退出sensor0拍摄画面,显示黑色。