EasyCVR的AI智能分析版本在做研发的时候,就受到了很多朋友的关注,前期我们已经将整体的框架搭好了,现在已经进入了测试阶段。测试EasyCVR的AI人脸识别功能时,添加一路摄像头流,发现在识别人脸的时候出现花屏现象,视频中人物动作幅度越大,花屏就越严重。

测试AI人脸识别go代码异步操作导致花屏怎么破?_人工智能

遇到视频流花屏问题,我们推测可能是推流的问题,也可能是播放器的问题,因此需要用adobe的播放器来进行播放(如VLC和ffplay)验证,如果都出现同样的问题,多半是流本身问题,否则可能是播放器的问题。

在使用VLC播放时也出现花屏(如下图),所以花屏的原因是流本身的问题,可能是在推流中误操作导致了花屏,所以来分析代码中的问题。

测试AI人脸识别go代码异步操作导致花屏怎么破?_人工智能_02

由于人脸识别是一个有点耗时的操作,大约300ms才能识别人物基本信息,然而在go层代码做的是同步操作,以下为部分代码:

测试AI人脸识别go代码异步操作导致花屏怎么破?_视频播放_03

测试AI人脸识别go代码异步操作导致花屏怎么破?_视频播放_04

所以这里的逻辑可能有一点问题,需要把这段人物识别go层代码改成异步进行识别。

测试AI人脸识别go代码异步操作导致花屏怎么破?_人脸识别_05

改成异步操作后,运行程序,在VLC播放还是会出现花屏现象。还需要把人脸识别这段代码给注释“go client.Base.FaceDetection()”;运行程序使用vlc播放,花屏现象就不会出现了。

但其实此处仍然存疑,人脸识别使用的是异步。不会出现卡顿或者花屏问题才对,只能把人脸识别这个功能一步一步的进行修改或者注释。

测试AI人脸识别go代码异步操作导致花屏怎么破?_go_06

在这种情况下,播放还是会出现花屏现象。最后只能把判断改为fasle,在对发送数据流设置断点调试。

测试AI人脸识别go代码异步操作导致花屏怎么破?_go_07

测试AI人脸识别go代码异步操作导致花屏怎么破?_go_08

运行程序发现断点没有进去,但是使用VLC播放居然出现画面,还不花屏,说明发送了二次流。这个就是视频播放花屏的罪魁祸首,解决办法就是删除一个发送数据流。

测试AI人脸识别go代码异步操作导致花屏怎么破?_人工智能_09