Streaming kamera Raspberry Pi ke halaman web HTML menggunakan picamera dan Flask

8

Saya mencoba menggunakan picamera API dan Flask untuk mengimplementasikan aliran Python (langsung) murni dari JPEG kontinu dari modul kamera Raspberry Pi untuk menampilkannya menggunakan templat HTML tapi saya tetap mendapatkan "404 not found error"?

Saya agak tidak berpengalaman dengan subjek khusus ini, permintaan maaf sebelumnya.

 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

Ini adalah kode HTML:

 <img src="{{ url_for('vid') }}"width='950px' height='450px'>
crispy2k12
sumber
3
Jenis 404 menunjukkan bahwa Anda mungkin menggunakan URL atau nomor port yang salah. Bisakah Anda mengonfirmasi bahwa Anda dapat mencapai halaman jika kontennya dikomentari?
goobering
Saya perhatikan bahwa saya telah menempatkan fungsi render_template setelah nama if == ' main ': app.run (host = '169.254.21.3) tetapi saya menerima kesalahan baru "werkzeug.routing.BuildError, BuildError: Tidak dapat membangun url untuk 'vid' titik akhir. Apakah maksud Anda 'statis' sebagai gantinya? " dan terima kasih
crispy2k12
1
Bisakah Anda mencoba menempelkan simbol @ di depan 'app.route' dan menjalankan kembali?
goobering
tepuk tangan, saya harus benar-benar memeriksa sintaks saya, sekarang halaman saya ditampilkan tetapi aliran tidak muncul?
crispy2k12
1
Anda tidak mengembalikan apa pun dari fungsi vid () - Anda mengumpulkan jpeg, tetapi tidak meneruskannya ke tampilan. Tambahkan import: from flask import send_file, dan di luar for for loop , coba tambahkan: return send_file (stream, mimetype = 'image / jpeg')
goobering

Jawaban:

5

Saya melakukan beberapa bacaan lagi, dan tidak berpikir pendekatan Anda akan berfungsi seperti yang diinginkan. Artikel Miguel Grinberg di sini menguraikan cara mencapai streaming kamera Raspberry Pi ke Flask, dan memberikan beberapa contoh berguna. Program sederhana, lengkap (kamera non-Pi) disediakan yang menunjukkan penggunaan fungsi generator dan tipe respons multi-bagian untuk mencapai streaming animasi:

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

Anda dapat melihat bahwa /video-feedrute mengembalikan objek jenis respons multi bagian yang terus-menerus dihasilkan oleh gen(camera)fungsi. Tanpa pendekatan ini saya menduga hanya gambar statis yang akan Anda lihat. Ada contoh lengkap aplikasi streaming picamera-to-Flask berdasarkan tutorial di atas di sini .

Goobering
sumber
hanya catatan kecil, tetapi contohnya tidak lengkap, ia membutuhkan file tambahan ( camera.py) dari tutorial.
machow
-1

Cukup ganti kamera impor ke kamera. Anda harus menginstal ffpmeg ang mpeg-streamer. Jika kedua modul ini tidak berfungsi maka instal uv4l juga. Setelah itu restart dan berfungsi

Ruchir
sumber