我是新手,目前正在从事视频处理。我正在使用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')
预先感谢您的帮助。
答案 0 :(得分:0)
您可以参考本主题Working with hundred thousand of pictures以减少dlib的处理时间。
但是,您的滞后问题在经过一段“平稳的”分钟后(您在5分钟后说)开始发生,我对内存消耗管理感到怀疑。例如,每次迭代之后,都会有一个数组变大并且永远不会被释放。您应该在此处添加带有注释的代码,以便我们进一步建议。