主题中讨论的其他器件:AM5718
工具/软件:Linux
您好,
我正在 AM5718板上执行 OpenCV+DSP 加速,SDK 版本是 ti-processor-sdk-linux-rt-am57xx-evm-04.01.00.06。
我发现 UMat 转换为 Mat 所花费的时间太长。
这是我的测试代码和结果:
代码:
int main (int argc、char ** argv)
{
unsigned char * yuV_raW_data = NULL;
int c =-1;
struct timespec tp0、TP1、TP2、TP3、TP4、 TP5;
cameraOpenDevice (1);
MAT MAT_YUV (camera_height、camera_width、CV_8UC2);
MAT MAT_RGB (camera_height、camera_width、CV_8UC3);
UMat umat_YUV (camera_height、camera_width、CV_8UC2);
UMat umat_RGB (camera_height、camera_width、CV_8UC3);
while (1){
Clock_gettime (clock_monotonic、&tp0);
DqBuffer (&YUV_RAW_DATA);//YUV 来自 V4l2摄像头的原始数据
QBuffer();
memcpy (MAT_YUV.data、YUV_RAW_DATA、camera_width* camera_height*2);
Clock_gettime (clock_monotonic、&TP1);
MAT_YUV.CopyTo (umat_YUV);
Clock_gettime (clock_monotonic、&TP2);
cvtColor (umat_yUV、umat_RGB、CV_YUV2BGR_YUV);
Clock_gettime (clock_monotonic、&TP3);
umat_rgb.CopyTo (MAT_RGB);
Clock_gettime (clock_monotonic、&TP4);
imshow ("frame"、MAT_RGB);
Clock_gettime (clock_monotonic、&TP5);
printf ("Get YUV Mat tDIFF=%LF ms \n"、tDIFF_calc (tp0、TP1));
printf ("Mat2uMat tdiff=%LF ms \n"、tDIFF_calc (TP1、TP2);
printf ("cvtColor_YUV2BGR tDIFF=%LF ms \n"、tDIFF_calc (TP2、TP3));
printf ("UMat2Mat tDIF=%LF ms \n"、tDIFF_calc (TP3、TP4));
printf ("imshow tdiff=%LF ms \n"、tdiff_calc (TP4、TP5));
C = waitKey (1);
if (c =27 || c ='q'|| c ='q')
中断;
}
cameraCloseDevice();
返回0;
}
然后、我将其编译到一个 exec bin: DSP_Accelerate_OpenCV_OpenCL
结果:
root@ok5718-idk:/home/forlinx/qt on_dsp_accelerate.sh
获取 YUV Mat tdiff = 5.017779ms
Mat2UMat tdiff = 0.672464ms
cvtColor_YUV2BGR tdiff=0.16575757毫秒
UMat2Mat tdiff = 151.863810ms
imshow tdiff = 1.787381ms
root@ok5718-idk:/home/forlinx/qt off_dsp_accelerate.sh
获取 YUV Mat tdiff = 0.509635ms
Mat2uMat tdiff = 0.479541 ms
cvtColor_YUV2BGR tdiff=11.217494ms
UMat2Mat tdiff = 5.070482 ms
imshow tdiff = 2.764032ms
root@ok5718-idk:/home/forlinx/qt cat on_dsp_accelerate.sh
导出 TI_OCL_cache_kernels=Y
导出 OpenCV_OpenCL_DEVICE_='TI AM57:加速器:TI 多核 C66 DSP'
回显"OpenCL 打开"
/DSP_Accelerate_OpenCV_OpenCL
root@ok5718-idk:/home/forlinx/qt cat off_dsp_accelerate.sh
导出 OpenCV_OpenCL_DEVICE_="已禁用"
回波"OpenCL 关闭"
/DSP_Accelerate_OpenCV_OpenCL
结果表明、当 DSP 加速工作时、UMat 转换为 Mat 所花费的时间太长。
UMat 的成本时间包括:等待时间(DSP 完成)加上实际写入和任何格式转换(在 CPU 上完成)。 它还很大程度上取决于所使用的数据类型以及是否涉及浮点运算。 如果创建了 remap()的 DSP 优化实现,则可以加速此过程。
我的问题是:如何使用 DSP 加速优化 remap()。
我阅读 了创建 针对 C66内核进行优化的 OpenCL C 内核 的章节、以及 在 OpenCV 应用级别添加新 OpenCL 内核的替代方法,、但我找不到办法。
请帮帮我。