在Flask中流式传输人脸识别视频和元数据

时间:2018-12-10 18:12:53

标签: python flask video-streaming

任务是识别视频流中的面部,并在视频帧上绘制边框并显示人物姓名。需要从API流式传输视频帧和元数据(名称)。该API调用了GPU密集型机器学习子例程,该子例程可以返回Python元组中的帧和名称对。为了减少计算量,我们尝试对每个处理的帧进行单个函数调用。元组包含一个字节类型的框架和一个字符串类型的名称。

如何显示来自API的流视频帧和元数据(名称)?

 def get_frame():
   recog = VideoFaceRecog(target="/video/m.mp4")
while True:
   (ret, frame) = recog.cap.read()

  if not ret:
    print('end of the video file...')
    break

  cv2.resize(frame, (640, 480))
  frame, names, bounding_boxes = recog.frame_recog(frame)

  camera_frame = cv2.imencode('.jpg', frame)[1].tobytes()

  yield (b'--frame\r\n'
       b'Content-Type: image/jpeg\r\n\r\n' + camera_frame + b'\r\n')
@app.route('/camera_feed', methods=['GET'])
def video_feed():
   return Response(stream_with_context((get_frame())), 
                        mimetype='multipart/x-mixed-replace; boundary=frame')

1 个答案:

答案 0 :(得分:0)

recog = VideoFaceRecog()

def get_frame(recog):
    cap = cv2.VideoCapture(0)
    while True:
        (ret, frame) = cap.read()

        if not ret:
            print('end of the video file...')
            break
        frame, names, bounding_boxes = recog.frame_recog(frame)
        recog.add_name(names) 
        camera_frame = cv2.imencode('.jpg', frame)[1].tobytes()
        yield ((b'--frame\r\n'
            b'Content-Type: image/jpeg\r\n\r\n' + camera_frame + b'\r\n'))

在另一个端点中调用元数据。