带渲染模板的烧瓶视频流

时间:2019-12-25 14:21:45

标签: javascript python html flask

我已经用Python绑定在C中实现了DWA路径规划算法,并且我想创建一个Web应用程序作为演示。 “机器人”将使用DWA跟随鼠标,并且用户可以绘制墙以创建对象。我已经使用OpenCV鼠标事件在Python中实现了这一点。要将其移植到Web应用程序中,我首先从页面获取鼠标位置。

<script type=text/javascript>
    $(function() {
        $(document).bind('mousemove', function(event) {
            $.post( "/mouse_events", {
                x: event.clientX,
                y: event.clientY,
            });
            return false;
        });
        $(document).bind('mousedown', function() {
            $.post( "/mouse_events", {
                click: 'true'
            });
            return false;
        });
    });
</script>
@app.route('/')
def index():
    print(type(render_template('mouse.html')))
    return render_template('mouse.html')

@app.route('/mouse_events', methods=['POST'])
def background_process_test():
    data = request.form
    print(data)
    return ""

这部分代码可以完美运行。我可以从页面中检索鼠标的x,y位置。接下来,我需要将渲染的模拟数据流式传输到页面。下面的代码来自网络摄像头以进行测试。

@app.route('/stream')
def streamed_response():
    global cap
    @stream_with_context
    def generate():
        while True:
            ret, frame = cap.read()
            test = cv2.imencode('.jpg', frame)[1].tobytes()
            yield (b'--frame\r\n'
                    b'Content-Type: image/jpeg\r\n\r\n' + test + b'\r\n')
    return Response(generate(), mimetype='multipart/x-mixed-replace; boundary=frame')

最后,我需要将它们组合在一起。我试图用框架连接渲染的模板。尽管流式传输有效,但我无法再检索鼠标数据。有没有办法结合这两个?框架位置可能会出现问题,因为鼠标位置数据是相对于左上角的。如果我能串流帧就很棒 在左上角。

yield (str.encode(render_template('mouse.html')) + b'\r\n' + b'--frame\r\n'
         b'Content-Type: image/jpeg\r\n\r\n' + test + b'\r\n')

1 个答案:

答案 0 :(得分:0)

解决方案非常简单。 视频在另一个/ page中流式传输,并从索引页面引用。 我已将以下代码添加到模板HTML中。我用CSS制作了视频 出现在左上角且无间隙。 <img src="{{ url_for('frame') }}"> 框架是函数的名称。

<style type="text/css">
body {
    margin: 0;
    padding: 0;
}
</style>

<html>
  <body>
    <img src="{{ url_for('frame') }}">
  </body>
</html>