[TI TDA4] TIOVX OpenVX 框架下Kernel注册/Node使用

2021/9/14 14:04:55

本文主要是介绍[TI TDA4] TIOVX OpenVX 框架下Kernel注册/Node使用,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

使用Python脚本生成步骤参照上一篇内容。[TI TDA4] TIOVX OpenVX框架下的Python脚本使用

此处以TI 官方提供的Demo为例。~/vision_apps/apps/dl_demos/app_tidl_od

 一、host端注册

调用链如下:main->app_tidl_od_main->app_init->tivxMytiovxLoadKernels       

tivxMytiovxLoadKernels函数位于~/vision_apps/kernels/mytiovx/host/vx_kernels_mytiovx_host.c内

完成Host端的Kernel注册如下图:

二、target端注册

 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

三、创建Node并添加进Graph,然后运行起来

~/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内的一些常用数字图像处理的接口。目前我也正在研究怎么使用,希望和大家一起学习!



这篇关于[TI TDA4] TIOVX OpenVX 框架下Kernel注册/Node使用的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程