如何改變偵測物件的框的顏色?
研究solution_host_stream 的程式,看來yolo偵測的結果會在print_yolo_result()裡面,會去呼叫setup_isp_privacy_mask() 來畫框。我想根據不同的classNum來畫不同顏色偵測框,就修改setup_isp_privacy_mask()這個函式,把classNum傳進去,然後在setup_isp_privacy_mask()這裡面根據不同的classNum改變不同的顏色值給tIspPmOpt.abyColorYUV[0~2]這三個變數。但是為何顏色只有在第一次呼叫setup_isp_privacy_mask會實際使用我定義的classNum的顏色,後續的classNum的改變,都不會再變顏色了,就一直以第一次的顏色為後續所有的偵測框的顏色?我有埋printf 在改變tIspPmOpt.abyColorYUV[0~2]這三個變數的地方,每次classNum的改變,這三個顏色值也會跟著變化,但是實際畫出來的顏色仍然就是以第一次出現的框的顏色為主。為什麼?例如第一次出現的classNum為2,使用紅色,後續不管傳什麼classNum進去,他就一直都是畫紅色,不會變其他色。下次重開機,我給第一次出現的classNum為3,使用綠色,後續不管傳什麼classNum進去,他就一直都是畫綠色,不會變其他色。
The discussion has been closed due to inactivity. To continue with the topic, please feel free to post a new discussion.
Comments
Hi 蔚禮,
privacy_mask只能設定一種顏色且沒辦法更改,如果需要不同顏色請參考draw_rect()。
在solution_host_stream裡面,draw_rect是會被kdp2_host_stream_draw_box所調用。而kdp2_host_stream_draw_box 會被kdp2_host_stream_image_thread所調用。而kdp2_host_stream_image_thread會在kp_firmware裡面的main() 啟動時就會開啟thread
pthread_create(&task_stream_image_handle, NULL, kdp2_host_stream_image_thread, &HostStreamInit);
pthread_create(&task_update_result_handle, NULL, kdp2_host_update_result_thread, &HostStreamInit);
但是我不懂的是在yolo偵測過程中,似乎都不會進入到這兩個程序裡面來畫框,只有在app_header_recv_inference會呼叫到print_yolo_result 而執行setup_isp_privacy_mask畫框。要如何才會讓kdp2_host_stream_image_thread起作用來執行kdp2_host_stream_draw_box 的畫框條件呢?
Hi 蔚禮,
請參考以下說明 ,需注意這種方式如果同時間畫太多框會導致效能下降,使用上需要再評估。
開啟EIS就會使用cpu畫框 (g_dwDrawBoxType = 1;)
指定cpu畫框後,就會執行 pthread_create(&task_draw_box_handle, NULL, kdp2_host_stream_draw_box, pHostStreamInit);