Streaming da câmera Raspberry Pi para a página HTML usando picamera e Flask

8

Estou tentando usar a API picamera e o Flask para implementar um fluxo Python (ao vivo) puro do JPEG contínuo do módulo de câmera Raspberry Pi para exibi-lo usando um modelo HTML, mas continuo recebendo um "erro 404 não encontrado"?

Sou um pouco inexperiente com esse assunto em particular, com desculpas antecipadamente.

 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

Aqui está o código HTML:

 <img src="{{ url_for('vid') }}"width='950px' height='450px'>
crispy2k12
fonte
3
Um tipo 404 sugere que você pode estar usando o URL ou o número da porta incorretos. Você pode confirmar que pode acessar a página se o conteúdo for comentado?
18716
Percebo que coloquei a função render_template após o if name == ' main ': app.run (host = '169.254.21.3), mas estou recebendo um novo erro "werkzeug.routing.BuildError, BuildError: Buildn url para o ponto final 'vid'. Você quis dizer 'estático'? " e obrigado #
crispy2k12 18/02/16
11
Você pode tentar colocar um símbolo @ na frente de 'app.route' e executar novamente?
goobering
Saúde, devo realmente verificar minha sintaxe, agora minha página está sendo exibida, mas o fluxo não está aparecendo?
crispy2k12
11
Você não está retornando nada da função vid () - você está coletando jpegs, mas não os passando para a visualização. Adicione o import: from import do balão send_file, e fora do loop for , tente adicionar: return send_file (stream, mimetype = 'image / jpeg')
goobering

Respostas:

5

Eu li um pouco mais e acho que sua abordagem nunca funcionará como desejado. O artigo de Miguel Grinberg aqui descreve como obter o streaming da câmera Raspberry Pi para o Flask e fornece vários exemplos úteis. É fornecido um programa simples e completo (câmera não Pi) que mostra o uso de uma função de gerador e um tipo de resposta com várias partes para obter streaming animado:

#!/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)

Você pode ver que a /video-feedrota retorna um objeto de tipo de resposta com várias partes que é gerado continuamente pela gen(camera)função. Sem essa abordagem, suspeito que uma imagem estática é tudo que você verá. Há um exemplo completo de um aplicativo de streaming de picamera para Flask com base no tutorial acima aqui .

goobering
fonte
apenas uma pequena nota, mas o exemplo não está completo, requer um arquivo adicional ( camera.py) do tutorial.
machow
-1

Basta mudar a câmera de importação para a câmera. Você precisa instalar o ffpmeg ang mpeg-streamer. Se esses dois módulos não funcionarem, instale também o uv4l. Depois disso, reinicie-o e funcione

Ruchir
fonte