Streaming della videocamera Raspberry Pi sulla pagina Web HTML usando Picamera e Flask


8

Sto cercando di utilizzare l' API di Picamera e Flask per implementare un flusso Python (live) puro del JPEG continuo dal modulo della videocamera Raspberry Pi per visualizzarlo utilizzando un modello HTML ma continuo a ricevere un "404 errore non trovato"?

Sono un po 'inesperta con questo argomento particolare, mi scuso in anticipo.

 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

Ecco il codice HTML:

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

3
Un tipo 404 suggerisce che potresti utilizzare l'URL o il numero di porta errati. Puoi confermare che puoi raggiungere la pagina se il suo contenuto è commentato?
goobering

Ho notato che ho inserito la funzione render_template dopo if name == ' main ': app.run (host = '169.254.21.3) ma sto ricevendo un nuovo errore "werkzeug.routing.BuildError, BuildError: Impossibile creare l'URL per endpoint 'vid'. Intendi invece 'statico'? " e grazie
crispy2k12,

1
Potresti provare ad attaccare un simbolo @ davanti a 'app.route' e rieseguire?
goobering

evviva, dovrei davvero controllare la mia sintassi, ora la mia pagina viene visualizzata ma lo stream non viene visualizzato?
crispy2k12,

1
Non stai restituendo nulla dalla funzione vid (), stai collezionando jpeg, ma non li stai passando alla vista. Aggiungi import: da flask import send_file, e all'esterno del ciclo for , prova ad aggiungere: return send_file (stream, mimetype = 'image / jpeg')
goobering

Risposte:


5

Ho fatto ancora qualche lettura e non credo che il tuo approccio funzionerà mai come desiderato. L'articolo di Miguel Grinberg qui illustra come ottenere lo streaming della videocamera Raspberry Pi su Flask e fornisce diversi esempi utili. Viene fornito un programma semplice, completo (non-Pi camera) che mostra l'uso di una funzione generatore e un tipo di risposta multi-parte per ottenere lo streaming animato:

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

Puoi vedere che la /video-feedroute restituisce un oggetto del tipo di risposta multipart che viene continuamente generato dalla gen(camera)funzione. Senza questo approccio sospetto che un'immagine statica sia tutto ciò che vedrai mai. C'è un esempio completo di un'applicazione di streaming da picamera a Flask basata sul tutorial qui sopra qui .


solo una nota minore, ma l'esempio non è completo, richiede un file aggiuntivo ( camera.py) dal tutorial.
machow,

-1

Basta cambiare la fotocamera di importazione in picamera. Devi installare ffpmeg ang mpeg-streamer. Se questi due moduli non funzionano, installare anche uv4l. Dopo di che riavvialo e funziona

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.