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.
https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1132560/tda4vm-tda4vm
器件型号:TDA4VM你(们)好
我使用的是 RTOS-SDK 版本8.2.0.5、我需要对 U16映像执行除冰操作以获得 RGB 输出。 在这方面,我有两个问题:
是否可以配置仅执行除冰 的图像处理管道、即绕过 VISS 加速器中的所有其他处理功能?
2.为了执行除冰、我需要将什么传递给 TIVxVpacVissNode?
感谢你的帮助
Tzahi
大家好、 Tzahi Altberg、
VISS 不只支持过时 的操作。
此致、
Brijesh
你(们)好
感谢您的快速回复。 我找不到包含除冰的 TIvxVpacVissNode 用法示例。 如何为此传递参数?
提前感谢
Tzahi
大家好、 Tzahi Altberg、
VISS 中有一个 CFA 块、这会使其除雾? CFA 块配置有一组系数、这些系数通过 DCC 二进制传递到 VISS 节点。
请参阅视觉应用中的单摄像头和/或多摄像头示例。 这些示例从传感器捕获原始图像、并使用 VISS 来除冰和增强图像。
此致、
Brijesh
您好、Brijesh、
解锁此线程。 请参阅我的电子邮件以了解上下文。
此致、
Takuma
您好、Yossi、Tzahi Altberg、
您能否帮助我们了解为何您只需要过时的输出而不需要其他调优组件? 您是要获取原始输入的完整 RGB 输出吗? 您的输入格式是什么?
我必须检查这是否甚至可以从 VISS 获取、但即使 可能、 节点也可能不支持这种情况。 节点可能需要更改才能使其正常工作。
此致、
Brijesh
您好、某些供应商的第三方软件正在从摄像头传感器获取图像并执行所需的校准问题。 因此、我们的 SW 系统在经过一些预处理后获得图像、我们需要执行"纯"图像处理操作、例如 CV2:::除雾、CV2::重新映射、CV2::调整大小和 CV2::cvtColor。 我们正在寻找最佳的优化方法来实现它。 我们曾考虑使用 VPAC Open-VX、但随后我们需要附加 DCC 文件。 基本上、相当于"识别"功能的 DCC 文件可能会执行此操作。
您好、Yossi、
DCC 文件包含 ISP 针对不同环境/照明条件的调优参数。 此外、它还在 ISP 中配置 CFA/Demosaic 模块。 因此、在您的情况下需要 DCC 文件。 对于您的情况、您可以生成和使用一些示例/默认 DCC 文件。
但我目前不确定我们是否可以输出 CFA/Demosaic 模块输出、因为它来自 ISP。 我会检查并返回给您。
此致、
Brijesh
您好 、Brijesh
有没有更新? 我们需要您的帮助、以优化的方式应用 CV2::过时、这是您建议的最佳方案。 我们还可以校准 DCC 以用作识别功能。 无论如何,我们必须迅速解决这个问题。
谢谢!
Yossi
你(们)好
很抱歉,我的回答很晚,我最近几天都不在办公室。
我将在本周对此进行检查、然后返回给您。
此致、
Brijesh
您好、Yossi、
我想您可以直接从 VISS 获取 CFA 输出。 我看到 mux1、mux2、mux3和 mux4支持选择 C1、C2、C3和 C4输出、这些输出直接来自 CFA。 因此、您可以为所有这些多路复用器选择适当的值(2)、为除第一个多路复用器之外的4个输出提供12位输出图像、并从 VISS 获取 CFA 输出。 请尝试一下吗?
此致、
Brijesh
你(们)好
我做了你的要求。
特别是:
params.fcp[0].mux_output0 = 0;
params.fcp[0].mux_output1 = TIVX_VPAC_VISS_MUX1_C1;
params.fcp[0].mux_output2 = TIVX_VPAC_VISS_MUX2_C2;
params.fcp[0].mux_output3 = TIVX_VPAC_VISS_MUX3_C3;
params.fcp[0].mux_output4 = TIVX_VPAC_VISS_MUX4_C4
所有输出都按如下方式分配:
vxCreateImage (上下文、1408、224、TIVX_DF_IMAGE_P12))
这是日志错误:
Vx_zone_error:[TIvxAddKernelVpacVissValidate:694]参数"output1"高度的值应为-522133280
Vx_zone_error:[TIvxAddKernelVpacVissValidate:694]参数"output3"高度的值应为-522133280
您好!
是否确定 传递到 viss 节点 create API 的 output1和 output3的映像正确? 请注意、您需要为每个输出创建单独的映像、并将其引用传递给创建 API、如下所示
C1 = vxCreateImage (上下文、1408、224、TIVX_DF_IMAGE_P12))
C2 = vxCreateImage (上下文、1408、224、TIVX_DF_IMAGE_P12))
C3 = vxCreateImage (上下文、1408、224、TIVX_DF_IMAGE_P12))
C4 = vxCreateImage (上下文、1408、224、TIVX_DF_IMAGE_P12))
node_viss = tivxVpacVissNode (
图形、 配置、 NULL、 DCC_param_viss、 RAW、 空、C1、C2、C3、C4、
obj->h3a_aew_af、NULL、NULL);
此致、
Brijesh
是的、我按照您的写操作:我分配了所有图像。
下面是配置 vpacvis 的完整代码。
分配位于代码末尾(紧接在 tivxVpacVissNode 之前)、颜色为。
请注意、与您的代码片段不同、我将 H3A_aew_af 设置为 NULL。
代码与 示例 vision_apps/apps/basic_demos/app_viss 非常相似:
vx_user_data_object 配置=空;
vx_user_data_object ae_awb_result =空;
Vx_image Y12 = NULL、uv12_C1 = NULL;
vx_image uv8_G8_C3 = NULL、s8_B8_C4 = NULL;
vx_user_data_object H3A_aew_af =空;
/* DCC 对象*/
vx_user_data_object DCC_param_viss = NULL;
const vx_char DCC_viss_user_data_object_name[]="DCC_viss";
vx_size DCC_buff _size = 1;
vx_map_id dCC_viss_buf_map_id;
uint8_t* dcc_viss_buf;
int32_t DCC_STATUS;
uint32_t SENSOR_DCC_id;
uint32_t SENSOR_DCC_MODE;
char* sensor_name =空;
char* file_name =空;
uint16_t downshift_bits;
tivx_vpac_viss_params_t 参数;
tivx_ae_awb_params_t ae_awb_params;
Vx_node node = 0;
tivx_raW_image_create_params_t raW_params;
raW_params.width = m_rawImgSize.width;
raW_params.height = m_rawImgSize.height;
raW_params.meta_height_after = 0;
SENSOR_DCC_ID = 233;
sensor_name = const_cast (SENSOR_ONSEMI_AR0233_UB953_MARS);
SENSOR_DCC_MODE = 0;//线性而不是 WDR
raW_params.num_exposures = 1;
raW_params.line_interleaved = vx_false _e;
raW_params.format[0].PIXEL_container = TIVX_RAW_IMAGE_16_BIT;
raW_params.format[0].msb = 11;
raW_params.meta_height_before = 0;
checkkR (m_raw = tivxCreateRawImage (m_context、&raW_params));
/*创建/配置配置配置输入结构*/
tivx_vpac_viss_params_init (¶ms);
params.sensor_dcc_id = SENSOR_DCC_ID;
Params.FCP[0].ee 模式= TIVX_VPAC_VISS_EE_MODE_OFF;
params.fcp[0].mux_output0 = 0;
params.fcp[0].mux_output1 = TIVX_VPAC_VISS_MUX1_C1;
params.fcp[0].mux_output2 = TIVX_VPAC_VISS_MUX2_C2;
params.fcp[0].mux_output3 = TIVX_VPAC_VISS_MUX3_C3;
params.fcp[0].mux_output4 = TIVX_VPAC_VISS_MUX4_C4;
Params.H3A_IN = TIVX_VPAC_VISS_H3A_IN_LSC;
Params.H3A_aewb_af_mode = TIVX_VPAC_VISS_H3A_MODE_AEWB;
params.fcp[0].chroma_mode = TIVX_VPAC_VISS_Chroma_mode_420;
params.bype_glbce = 1;
params.bype_nsf4 = 1;
PARAMS.BYPASS_CAC = 1;
params.bype_DWB = 1;
checkkR (configuration = vxCreateUserDataObject (m_context、"tivx_vpac_viss_params_t"、
sizeof (tivx_vpac_viss_params_t)、¶ms));
/*创建/配置 AE_AWB_params 输入结构*/
tivx_ae_awb_params_init (&ae_awb_params);
AE_AWB_params.ae 有效= 1;
AE_AWB_params.expose_time = 16666;
AE_AWB_params.analog_gain = 1030;
AE_AWB_params.AWB_VALID = 1;
AE_AWB_params.color_temperature = 3000;
对于(VX_UINT32 I = 0;I < 4;I++)
{
AE_AWB_params.wb_gains [i]= 525;
AE_AWB_params.wb_offset[i]= 2;
}
checkkR (ae_awb_result = vxCreateUserDataObject (m_context、
"tivx_ae_awb_params_t"、sizeof (tivx_ae_awb_params_t)、&ae_awb_params);
/*创建 DCC */
checkkB (((DCC_buff _size = appIsGetDCCSizeVISS (sensor_name、sensor_dCC_mode))!= 0);
checkkR (dcc_param_viss = vxCreateUserDataObject (m_context、(const vx_char*)&DCC_viss_user_data_object_name、
DCC_buff 大小、NULL));
checkkS(vxMapUserDataObject(.
DCC_param_viss、
0、
DCC_buff 大小、
DCC_viss_buf_map_id、
(void**) DCC_viss_buf、
Vx_write_only、
Vx_memory_type_host、
0));
memset (dCC_viss_buf、0xAB、DCC_buff);
checkkB (((DCC_STATUS = appIsGetDCCBuffVISS (sensor_name、sensor_dCC_mode、DCC_viss_buf、DCC_buff_size))= 0);
checkkS (vxUnmapUserDataObject (DCC_param_viss、DCC_viss_buf_map_id));
/* DCC 完成*/
/*创建 H3A 输出*/
checkkB (((h3A_aew_af = vxCreateUserDataObject (m_context、"tivx_h3A_data_t"、sizeof (tivx_h3A_data_t)、NULL)!= NULL);
CheckkS (vxMapUserDataObject (H3A_aew_af、
0、
sizeof (tivx_h3A_data_t)、
DCC_viss_buf_map_id、
(void**) DCC_viss_buf、
(vx_enum) vx_write_only、
(vx_enum) vx_memory_type_host、
0));
memset (dcc_viss_buf、0、sizeof (tivx_h3A_data_t));
CheckkS (vxUnmapUserDataObject (H3A_aew_af、DCC_viss_buf_map_id));
CV_ASSERT (m_rawImgSize.width=1408 && m_rawImgSize.height=224);
checkkR (m_nv12 = vxCreateImage (m_context、m_rawImgSize.width、m_rawImgSize.height、TIVX_DF_IMAGE_P12));
checkkR (uv12_c1 = vxCreateImage (m_context、m_rawImgSize.width、m_rawImgSize.height、TIVX_DF_IMAGE_P12));
checkkR (uv8_G8_C3 = vxCreateImage (m_context、m_rawImgSize.width、m_rawImgSize.height、TIVX_DF_IMAGE_P12));
checkkR (s8_B8_C4 = vxCreateImage (m_context、m_rawImgSize.width、m_rawImgSize.height、TIVX_DF_IMAGE_P12));
checkkR (node = tivxVpacVissNode (m_graph、configuration、NULL、DCC_param_viss、
m_raw、y12、uv12_c1、m_nv12、uv8_G8_C3、 S8_B8_C4、
空、空、空、空));
好的、我认为我知道这个问题。 您可以在下面进行更改并尝试一下吗?
在 API TIvxAddKernelVpacvissValidate 的文件 ti-processor-sdk-rtos-j721e-evm-08_04_00_02\tiovx\kernel_j7\how\host\vx_vpac_viss_host.c 中、
您能从中更改吗
/*自定义参数检查*/
如果((vx_status) vx_Success = status)
{
uint32_t Expected 身高[TIVX_VPAC_VISS_FCP_NUM_Instances][4];
uint32_t output_height[4];
output_height[1]= output1_h;
output_height[3]= output3_h;
memset (Expected、height、raW_h、sizeof (Expected、height));
更改为
/*自定义参数检查*/
如果((vx_status) vx_Success = status)
{
uint32_t Expected 身高[TIVX_VPAC_VISS_FCP_NUM_Instances][4];
uint32_t output_height[4];
uint32_t j;
output_height[1]= output1_h;
output_height[3]= output3_h;
对于(i=0;i < TIVX_VPAC_VISS_FCP_NUM_Instances;i++)
{
对于(j=0;j<4;j++)
{
Expected 身高[i][j]= raW_h;
}
}
此致、
Brijesh
你(们)好
正如您所说(替换了文件中的代码)
然后运行:cd vision_apps && make SDK
错误消失了!
但 PROCessGraph 现在卡住了。
好的、让我首先在驾驶员层面检查它、看看它是否正常工作。
此致、
Brijesh
h 感恩节快乐!
有关驱动程序支持的任何新闻?
您好!
我将无法在本周进行检查、 我将在下周进行检查并更新您的信息。
此致、
Brijesh
您好、Yossi、Oran、
如 昨天的通话中所述、您可以使用来自 VISS 的 YUV 或 RGB 输出、而不是直接使用 CFA 输出、并且可以绕过 FCC 模块中的中间模块、以确保 CFA 输出直接转换为 YUV。
此外 、您还计划使用 DCC 来配置 CFA 模块、并绕过 VISS 中的其他中间模块。
我们将与我们的 DCC 专家单独举行会议。
此致、
Brijesh
感谢您的回复、
我认为我不理解解释(抱歉我没有记录)、我将尝试在此处获得一个简洁的代码汇总:
如何调用 vpacvvis:
----------------------
tivx_vpac_viss_params_init (¶ms);
params.sensor_dcc_id = 233;//零值给出错误,此数字与 AR0233有关
params.use_case=0;
Params.FCP[0].ee 模式= TIVX_VPAC_VISS_EE_MODE_OFF;
params.fcp[0].mux_output0 = TIVX_VPAC_VISS_MUX0_Y12;
params.fcp[0].mux_output1 = TIVX_VPAC_VISS_MUX0_UV12;
params.fcp[0].mux_output2 = 0;
params.fcp[0].mux_output3 = 0;
params.fcp[0].mux_output4 = 0;
params.fcp[0].chroma_mode = 0
Params.H3A_IN = 0;
Params.H3A_aewb_af_mode = 0;
params.bype_glbce = 1;
params.bype_nsf4 = 1;
PARAMS.BYPASS_CAC = 1;
params.bype_DWB = 1;
配置= vxCreateUserDataObject (m_context、"tivx_vpac_viss_params_t"、
sizeof (tivx_vpac_viss_params_t)、¶ms);
TIVxVpacVissNode (图形、配置、空、空
rawImage、Y12、uv12、NULL、NULL、 null、
空、空、空、空);
更改 vx_vpac_viss_target_defaults.c 函数中的以下行:
------------------------------------------------------
TIVxVpacVissDefaultMapGammaParams:
gamma->enable =(uint32_t) true;
TIVxVpacVissDefaultMapEeParams:
eCfg->enable = true;
TIVxVpacVissDefaultMapEeParams (vissObj):
eeCfg->bypassY12 = false;
eeCfg->bypassC12 = true;
eeCfg->bypassY8 = true;
eCfg->bypassC8 = true;
cfaCfg->bypass [cnt]=(uint32_t) false;
感谢你能抽出时间。
您好、 Oran Rimmer、
我们计划于周一举行会议、讨论 DCC 工具的使用情况。 一旦有了正确的 DCC、就不需要更改任何参数、绕过中间模块。
此致、
Brijesh