opencv和dlib的视频滞后问题

时间:2019-05-14 05:43:47

标签: python opencv flask dlib

我是新手,目前正在从事视频处理。我正在使用Imutil的webcamvideostream函数捕获实时流,并使用dlib的get_frontal_face_detector()函数的对象作为检测器。我正在使用dlib库检测面部标志。在检测并提取了面部特征之后,我正在处理每个帧,然后再屈服。 一切都可以正常运行几秒钟,但是在一两分钟之后,视频开始出现滞后现象,并随着时间的推移逐渐增加。

我试图通过在线程中运行进程来最小化处理时间。另外,我降低了帧频和分辨率。我也尝试过跳过帧,但这不会产生流畅的视频。 当超过平均最小时间时,我在检测功能上设置了超时(这是唯一需要花费更多时间执行的功能)。 降低帧速率和分辨率确实减少了滞后现象,但是如果视频持续运行5分钟,则滞后现象会再次开始。

我该如何解决这个滞后问题并长时间获得流畅的视频?

这里的结构可能会有所帮助。

def frame_pro(form_data=None):

### Making a webcam object by WebcamVideoStream and detector by get_frontal_face_detector()

while True:
    frame = camera.read()
    frame = imutils.resize(frame, width=600)

    ### Processing each frame

    ### yielding all frames in response after encoding

    yield (b'--frame\r\n'
            b'Content-Type: text/plain\r\n\r\n' + stringData + b'\r\n')

del camera
cv2.destroyAllWindows()


@app.route('/callp', methods=['POST', 'GET'])
def callp():
    if request.method in ['POST']:
        all_data = request.form.to_dict()
        return Response(frame_pro(all_data), mimetype='multipart/x-mixed-replace; boundary=frame')
    else:
        return Response(frame_pro(), mimetype='multipart/x-mixed-replace; boundary=frame')

预先感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

您可以参考本主题Working with hundred thousand of pictures以减少dlib的处理时间。

但是,您的滞后问题在经过一段“平稳的”分钟后(您在5分钟后说)开始发生,我对内存消耗管理感到怀疑。例如,每次迭代之后,都会有一个数组变大并且永远不会被释放。您应该在此处添加带有注释的代码,以便我们进一步建议。