This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] TDA4VM:[J721E]如何将 viss 节点的输出用作两个节点的输入?

Guru**** 2371820 points
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1502571/tda4vm-j721e-how-can-i-use-the-output-of-the-viss-node-as-input-for-two-nodes

器件型号:TDA4VM

工具/软件:

您好:

我想修改 vision_app (app_tidl_od_cam)、以便在输入到 LDC 节点之前显示图像、并在屏幕上并排检测物体后显示图像。
当我尝试将 viss 节点的输出(vissObj.output_arr)和 drawDetection 节点的输出(drawDetectionObj.output_arr)输入到 img_mosaic 节点时,无法获取 viss 节点的输出。
如何使用 viss 节点的输出作为 img_mosaic 节点和 LDC 节点的输入?

我使用的是 J721E SDK RTOS 版本10.01.00.04。

谢谢你。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Kaoru:

    1.您必须在马赛克参数中创建窗口,假设您有4个相机,然后创建8个窗口。 (参见 app_multi_cam_demo 中的 set_img_mosaiy_params())

    2.从 viss 节点获取输出对象数组,并将其提供给马赛克节点的输入数组。

    在中、来自2个 LDC 节点的 multi_cam_demo 2对象数组提供给马赛克输入数组(obj->imgMosaicObj.input_arr)类似地、对于您的情况、从 post_proc 给出一个对象数组、从 vis 给出另一个对象数组。 您可以看到  set_img_mosaich_params() input_select 和 channel_select 如何将每个摄像机映射到马赛克窗口。

    您是否可以通过引用 app_multi_cam_demo 来尝试上述方法?

    谢谢。此致、
    Gokul

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Gokul:

    感谢您的答复。

    我尝试了以下方法:

    1. 向马赛克节点添加了窗口(OD:4个窗口、VISS:4个窗口)。
    2. 添加 vissObj.output_arr 到马赛克节点的输入端。

    来自 OD 和 VISS 的图像显示在8个窗口中、但应用程序在显示一帧后停止。
    下面是的 diff app_tidl_od_cam/main.c
    源代码中是否有任何其他部分需要更改?

    diff --git a/vision_apps/apps/dl_demos/app_tidl_od_cam/main.c b/vision_apps/apps/dl_demos/app_tidl_od_cam/main.c
    index d7b22691..4d7a8547 100644
    --- a/vision_apps/apps/dl_demos/app_tidl_od_cam/main.c
    +++ b/vision_apps/apps/dl_demos/app_tidl_od_cam/main.c
    @@ -1171,6 +1171,7 @@ static vx_status app_create_graph(AppObj *obj)
         vx_int32 idx = 0;
     #if !(defined(SOC_AM62A) && defined(QNX))
         obj->imgMosaicObj.input_arr[idx++] = obj->drawDetectionsObj.output_image_arr;
    +    obj->imgMosaicObj.input_arr[idx++] = obj->vissObj.output_arr;
     #else
         obj->imgMosaicObj.input_arr[idx++] = obj->scalerObj.output[0].arr;
     #endif
    @@ -1500,15 +1501,15 @@ static vx_int32 calc_grid_size(vx_uint32 ch)
     static void update_img_mosaic_defaults(ImgMosaicObj *imgMosaicObj, vx_uint32 in_width, vx_uint32 in_height, vx_int32 numCh)
     {
         vx_int32 idx, ch;
    -    vx_int32 grid_size = calc_grid_size(numCh);
    +    vx_int32 grid_size = calc_grid_size(numCh*2);
         imgMosaicObj->out_width    = DISPLAY_WIDTH;
         imgMosaicObj->out_height   = DISPLAY_HEIGHT;
    -    imgMosaicObj->num_inputs   = 1;
    +    imgMosaicObj->num_inputs   = 2;
    
         tivxImgMosaicParamsSetDefaults(&imgMosaicObj->params);
    
         idx = 0;
    -    for(ch = 0; ch < numCh; ch++)
    +    for(ch = 0; ch < numCh*2; ch++)
         {
             vx_int32 startX, startY, winX, winY, winWidth, winHeight;
    
    @@ -1541,8 +1542,8 @@ static void update_img_mosaic_defaults(ImgMosaicObj *imgMosaicObj, vx_uint32 in_
             imgMosaicObj->params.windows[idx].startY  = startY + (winHeight * winY);
             imgMosaicObj->params.windows[idx].width   = winWidth;
             imgMosaicObj->params.windows[idx].height  = winHeight;
    -        imgMosaicObj->params.windows[idx].input_select   = 0;
    -        imgMosaicObj->params.windows[idx].channel_select = idx;
    +        imgMosaicObj->params.windows[idx].input_select   = ch/4;
    +        imgMosaicObj->params.windows[idx].channel_select = ch%4;
             idx++;
         }
    



     output_arr LDC 节点和马赛克节点是否都使用 VISS 节点的、从而导致数据冲突?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Kaoru:

    您能否尝试在 vis 和 LDC 之间添加一个标量节点、马赛克、您可以从标量节点获得2个输出、该输出可单独提供给2个节点。

    您可以看到 app_tidl_seg_cam 示例、其中 LDC_node 输出同时提供给预处理节点和后处理节点。

     output_arr  LDC 节点和马赛克节点是否都在使用 VISS 节点、从而导致数据冲突?

    我不认为是这样、我们测试了一些场景、其中一个节点的一个输出作为2个节点的输入。

    此致、
    Gokul

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Gokul:

    通过添加一个新的标量节点、将 viss 节点的输出作为输入、然后将标量节点的 output0输入到 LDC 节点、并将 output1输入到马赛克节点、我能够实现我想要的目标。

    是否是将 vis 节点的输出与两个节点 app_tidl_avp4结合使用的演示应用?
    我试了一下。 DOF 工作、但 SRV 未显示。 (我知道该结果是由 avp4的规格导致的)

    我修改了演示应用(avp4)并将 SRV 输出输入到显示节点、但 SRV 在一帧后停止。
    当我禁用 LDC、DOF、定标器、pre_proc、tidl Post_proc、Mosaic 和 Hist、SRV 工作。

    LDC 节点和 SRV 节点是否与 vis 的输出相竞争?

    谢谢你。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Kaoru:

    LDC 节点和 SRV 节点是否与 vis 的输出相竞争?

    但事实并非如此。

    问题是当另一个复制节点和一个消耗完整对象阵列的节点都消耗了复制节点输出时、它就会产生问题。 此处 vis 是一个复制节点、它连接到 LDC (复制)以及 srv_node (消耗整个对象数组、而不是复制)。

    有一个解决此问题的方法。

    在 tiovx 目录中应用以下补丁并重新编译 SDK

    e2e.ti.com/.../target_5F00_acquire.patch

    cd $(psdkra)/tiovx/
    git apply target_acqurie.patch
    
    cd $(psdkra)/sdk_builder
    ./make_sdk.sh

    应用该补丁后、之前的方法也适用于将 viss_output 提供给 Mosaich_input 的方法。

    此致、
    Gokul

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Gokul:

    感谢您提供的信息。
    我能够将 VISS 节点输出输入到 LDC 节点和马赛克节点中。

    顺便说一下、这个贴片是否有任何负面影响?

    谢谢你。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Kaoru:

    顺便说一下、此修补程序是否有任何负面影响?

    我们正在内部进行检查、一旦我收到更新、我将返回给您。

    此致、
    Gokul

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Kaoru:

    该补丁将在即将推出的 SDK 11.0中得到修复  

    此致、
    Gokul