使用picamera和Flask将Raspberry Pi相机流式传输到HTML网页


8

我正在尝试使用picamera API和Flask从Raspberry Pi相机模块中实现连续JPEG的纯Python(实时)流,以使用HTML模板显示它,但我不断收到“ 404 not found错误”?

我对这个特定的主题有点经验不足,请您提前道歉。

 app.route('/test/')
    def vid():
            with picamera.PiCamera() as camera:
                    stream = io.BytesIO()
                    for foo in camera.capture_continuous(stream, format='jpeg'):

                            stream.truncate()
                            stream.seek(0)

                            if process(stream):
                                break

这是HTML代码:

 <img src="{{ url_for('vid') }}"width='950px' height='450px'>

3
404提示您可能使用了错误的URL或端口号。如果内容被注释掉,您是否可以确认可以访问该页面?
goobering '16

我注意到我已经将render_template函数放置在if name ==' main '之后:app.run(host ='169.254.21.3),但是我收到一个新错误“ werkzeug.routing.BuildError,BuildError:无法生成url端点“ vid”。您是说“静态”吗?” 和感谢
crispy2k12

1
您可以尝试在'app.route'前面粘贴@符号并重新运行吗?
goobering '16

干杯,我真的应该检查我的语法,现在我的页面正在显示,但是没有显示流?
crispy2k12

1
您没有从vid()函数返回任何内容-您正在收集jpeg,但没有将它们传递给视图。添加导入:从flask导入send_file,在for循环之外,尝试添加:return send_file(stream,mimetype ='image / jpeg')
goobering

Answers:


5

我做了更多的阅读,并且认为您的方法永远无法按预期运行。Miguel Grinberg的文章在此处概述了如何实现将Raspberry Pi相机流传输到Flask,并提供了一些有用的示例。提供了一个简单,完整的(非Pi相机)程序,该程序显示了生成器功能和多部分响应类型的使用,以实现动画流:

#!/usr/bin/env python
from flask import Flask, render_template, Response
from camera import Camera

app = Flask(__name__)

@app.route('/')
def index():
    return render_template('index.html')

def gen(camera):
    while True:
        frame = camera.get_frame()
        yield (b'--frame\r\n'
               b'Content-Type: image/jpeg\r\n\r\n' + frame + b'\r\n')

@app.route('/video_feed')
def video_feed():
    return Response(gen(Camera()),
                    mimetype='multipart/x-mixed-replace; boundary=frame')

if __name__ == '__main__':
    app.run(host='0.0.0.0', debug=True)

您会看到/video-feed路由返回了一个由gen(camera)函数连续生成的多部分响应类型对象。如果没有这种方法,我怀疑您将只看到静态图像。有基于上述教程picamera对瓶流应用的完整的例子在这里


只是一个小注释,但示例不完整,它需要camera.py教程中的其他文件()。
Machow

-1

只需将导入相机更改为picamera。您必须安装ffpmeg ang mpeg-streamer。如果这两个模块不起作用,请同时安装uv4l。在那之后重启它,它可以工作了

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.