Image rendered on the target is black.

Hello

I have made an app based on the sample_drivenet project. The app recieves images (pixel stream) as RGA32 from an external source through TCP communication. The image gets processed by the DNN from drivenet and rendered on screen.
The app works good on HOST PC. When I cross-compile the app to the target (E3550) and run it on target, the rendered window is all black, but with objects detected and the ROIs are created correctly… I wonder why is that?
Some information about my system: diveworks2.0, Drive OS sdk5.1.0.2. CUDA10.0

Thanks!

Dear yoannzh,

It would be difficult to analyze without code. Would you like to check the application code referring to the following in DriveWorks doc?

-. DriveNet Workflow
DriveNet comes with meta data which contains preprocessing configuration for the network. Object Detector module automatically reads this meta data information and configures Data Conditioner accordingly. However, tone mapping type required by DriveNet module can be obtained from this meta data to set up Soft Image Signal Processing (ISP) accordingly to get the best results. Object Detector Workflow shows in more details how to use DriveNet after initialization.

According to the topic’s description, Object Detector module seems to work fine.
Would you like to check Data Conditioner part? Thanks.

Hello Steve

I know it is hard to see without the code. I didn’t put it because it is based on the sample_drivenet code. I only modified onProcess() for the getNextFrame function. I will try to explain what I did:
two streamer were initialized:

m_streamerCPU2CUDA
m_streamerCUDA2GL

then in onProcess() a CPU image is creted:

dwImageCPU *cpu_a;

after recieving the pixel values, they are copied to the CPU image

mempcpy(cpu_a->data[0], pixel_data_R, DATA_SIZE / 3); // 
mempcpy(cpu_a->data[1], pixel_data_G, DATA_SIZE / 3); // ...
mempcpy(cpu_a->data[2], pixel_data_B, DATA_SIZE / 3);

after that, stream cpu image to CUDA:

status = dwImageStreamer_producerSend(m_rgbCPU, m_streamerCPU2CUDA);
status = dwImageStreamer_consumerReceive(&rgbCUDA, 1000, m_streamerCPU2CUDA)
dwImage_getCUDA(nextFrameCUDA, rgbCUDA); // nextFrameCUDA is the output for getNextFrame().

then format convert the RGB into RGBA

status = dwImage_copyConvert(m_rgbaCUDA, rgbCUDA, m_context);

stream CUDA image to GL

status = dwImageStreamerGL_producerSend(m_rgbaCUDA, m_streamerCUDA2GL);
status = dwImageStreamerGL_consumerReceive(&glImageNew, 1000, m_streamerCUDA2GL);
dwImage_getGL(nextFrameGL, glImageNew);//nextFrameGL is also the ouput for getNextFrame like in the original drivenet sample code.

at last return the streamers

CHECK_DW_ERROR(dwImageStreamerGL_consumerReturn(&glImageNew, m_streamerCUDA2GL));
CHECK_DW_ERROR(dwImageStreamerGL_producerReturn(nullptr, 1000, m_streamerCUDA2GL));
CHECK_DW_ERROR(dwImageStreamer_consumerReturn(&rgbCUDA, m_streamerCPU2CUDA));
CHECK_DW_ERROR(dwImageStreamer_producerReturn(nullptr, 1000, m_streamerCPU2CUDA));
//endof getNextFrame()

The thing I don’t understand is it works good on HOST PC, but not on target…

Hi yoannzh,

Would you please help to update your registration info to be the business email instead of the private one, and the full name if company?

Thanks