使用Python脚本生成步骤参照上一篇内容。[TI TDA4] TIOVX OpenVX框架下的Python脚本使用
此处以TI 官方提供的Demo为例。~/vision_apps/apps/dl_demos/app_tidl_od
调用链如下:main->app_tidl_od_main->app_init->tivxMytiovxLoadKernels
tivxMytiovxLoadKernels函数位于~/vision_apps/kernels/mytiovx/host/vx_kernels_mytiovx_host.c内
完成Host端的Kernel注册如下图:
Target端跑在MCU2_0上,所以要找到跑在MCU2_0的demo
~/vision_apps/apps/basic_demos/app_tirtos/tirtos_linux/mcu2_0 此例程运行tirtos
调用链如下:
main->appMain->appRegisterOpenVXTargetKernels->tivxRegisterMytiovxTargetIpuKernels
至此,即可完成Target端的Kernle注册
PS:添加的位置都是看TI 官方已经提供的Demo,然后搜索相似的函数,然后模仿着添加进demo
~/vision_apps/apps/dl_demos/app_tidl_od例程
调用链如下:
main->app_tidl_od_main->app_create_graph->app_create_graph_mytiovx->tivxmytiovxtestNode
app_create_graph_mytiovx是自己创建的一个子函数,用于实现创建node
app_create_graph_mytiovx添加位置,可以在app_create_graph中找到参考:如下图
执行以上三步,即可完成Host端/Target端的Kernel注册;完成Node的创建。
因为此Kernel运行在Target端,所以需要在MCU2_0上观察其效果。MCU的log信息无法直接打印到终端,需要使用source ./vision_apps_init.sh脚本查看系统提供的log日志。
~/vision_apps/apps/basic_demos/app_tirtos/tirtos_linux/mcu2_0编译以后生成的xxxx.out会在TDA4主板上电以后,自动运行。
修改target端的内容后,即可在运行Host端主进程后,自动调用Target的Kernel参与运行
void tivxAddTargetKernelMytiovxtest(void) { vx_status status = (vx_status)VX_FAILURE; char target_name[TIVX_TARGET_MAX_NAME]; vx_enum self_cpu; self_cpu = tivxGetSelfCpuId(); if ( self_cpu == (vx_enum)TIVX_CPU_ID_IPU1_0 ) { strncpy(target_name, TIVX_TARGET_IPU1_0, TIVX_TARGET_MAX_NAME); status = (vx_status)VX_SUCCESS; } else { status = (vx_status)VX_FAILURE; } if (status == (vx_status)VX_SUCCESS) { vx_mytiovxtest_target_kernel = tivxAddTargetKernelByName( TIVX_KERNEL_MYTIOVXTEST_NAME, target_name, tivxMytiovxtestProcess, tivxMytiovxtestCreate, tivxMytiovxtestDelete, tivxMytiovxtestControl, NULL); } }
Target端有四个回调函数,tivxMytiovxtestProcess是每执行一次Host端的Graph,都会执行一次。修改tivxMytiovxtestProcess,添加一个打印函数。
VX_PRINT(VX_ZONE_ERROR, "AIR: My Tiovx Kernel Test ! \n");
实验流程是:
TDA4板上电->MCU2_0加载编译好的mcu固件,自动运行 -> 执行A72 host端的目标检测进程
整体编译,然后将程序加载到TDA4 开发板上,登陆进入以后,在A72上执行目标检测的demo,然后手动结束以后,可以通过控制台查看MCU2_0的log信息(source ./vision_apps_init.sh),就会出现我们手动添加的打印信息。
因为打印的速度非常快,可能会有一些丢失。
至此,Tiovx框架,演示结束。
下一篇,将更新如何使用OpenVX自带的一些图像处理的Kernel。这些kernel基本提供了OpenCV内的一些常用数字图像处理的接口。目前我也正在研究怎么使用,希望和大家一起学习!