1. 程式人生 > 其它 >EasyCVR開發測試AI人臉識別go程式碼非同步操作導致花屏問題排查

EasyCVR開發測試AI人臉識別go程式碼非同步操作導致花屏問題排查

EasyCVR的AI智慧分析版本在做研發的時候,就受到了很多朋友的關注,前期我們已經將整體的框架搭好了,現在已經進入了測試階段。測試EasyCVR的AI人臉識別功能時,新增一路攝像頭流,發現在識別人臉的時候出現花屏現象,視訊中人物動作幅度越大,花屏就越嚴重。

遇到視訊流花屏問題,我們推測可能是推流的問題,也可能是播放器的問題,因此需要用adobe的播放器來進行播放(如VLC和ffplay)驗證,如果都出現同樣的問題,多半是流本身問題,否則可能是播放器的問題。

在使用VLC播放時也出現花屏(如下圖),所以花屏的原因是流本身的問題,可能是在推流中誤操作導致了花屏,所以來分析程式碼中的問題。

由於人臉識別是一個有點耗時的操作,大約300ms才能識別人物基本資訊,然而在go層程式碼做的是同步操作,以下為部分程式碼:

所以這裡的邏輯可能有一點問題,需要把這段人物識別go層程式碼改成非同步進行識別。

改成非同步操作後,執行程式,在VLC播放還是會出現花屏現象。還需要把人臉識別這段程式碼給註釋“go client.Base.FaceDetection()”;執行程式使用vlc播放,花屏現象就不會出現了。

但其實此處仍然存疑,人臉識別使用的是非同步。不會出現卡頓或者花屏問題才對,只能把人臉識別這個功能一步一步的進行修改或者註釋。

在這種情況下,播放還是會出現花屏現象。最後只能把判斷改為fasle,在對傳送資料流設定斷點除錯。

執行程式發現斷點沒有進去,但是使用VLC播放居然出現畫面,還不花屏,說明發送了二次流。這個就是視訊播放花屏的罪魁禍首,解決辦法就是刪除一個傳送資料流。