Truyền camera Raspberry Pi sang trang web HTML bằng picamera và Flask


8

Tôi đang cố gắng sử dụng API picamera và Flask để triển khai luồng Python (trực tiếp) thuần túy của JPEG liên tục từ mô-đun máy ảnh Raspberry Pi để hiển thị nó bằng mẫu HTML nhưng tôi vẫn nhận được "lỗi không tìm thấy 404"?

Tôi hơi thiếu kinh nghiệm với chủ đề đặc biệt này, xin lỗi trước.

 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

Đây là mã HTML:

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

3
Một loại 404 gợi ý rằng bạn có thể đang sử dụng sai URL hoặc số cổng. Bạn có thể xác nhận rằng bạn có thể truy cập trang nếu nội dung của nó được nhận xét không?
goobering

Tôi nhận thấy rằng tôi đã đặt hàm render_template sau if name == ' main ': app.run (host = '169.254.21.3) nhưng tôi nhận được một lỗi mới "werkzeug.routing.BuildError, BuildError: Không thể tạo url cho điểm cuối 'vid'. Ý bạn là 'tĩnh' thay vào đó? " và cảm ơn
crispy2k12

1
Bạn có thể thử dán biểu tượng @ trước 'app.route' và chạy lại không?
goobering

Xin chúc mừng, tôi thực sự nên kiểm tra cú pháp của mình, bây giờ trang của tôi đang hiển thị nhưng luồng không xuất hiện?
crispy2k12

1
Bạn sẽ không trả lại bất cứ thứ gì từ hàm vid () - bạn đang thu thập jpeg, nhưng không chuyển chúng đến chế độ xem. Thêm việc nhập khẩu: từ send_file bình nhập khẩu, và bên ngoài vòng lặp for , hãy thử thêm: trở về send_file (suối, Mimetype = 'image / jpeg')
goobering

Câu trả lời:


5

Tôi đã đọc thêm một chút và không nghĩ cách tiếp cận của bạn sẽ hoạt động như mong muốn. Bài viết của Miguel Grinberg ở đây phác thảo cách đạt được máy ảnh Raspberry Pi phát trực tiếp lên Flask và cung cấp một số ví dụ hữu ích. Một chương trình đơn giản, hoàn chỉnh (máy ảnh không phải Pi) được cung cấp cho thấy việc sử dụng chức năng của trình tạo và loại phản hồi đa phần để đạt được luồng hoạt hình:

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

Bạn có thể thấy rằng /video-feedtuyến trả về một đối tượng loại phản hồi nhiều phần được liên tục tạo bởi gen(camera)hàm. Không có cách tiếp cận này, tôi nghi ngờ một hình ảnh tĩnh là tất cả những gì bạn sẽ thấy. Có một ví dụ hoàn chỉnh của một picamera-to-Flask luồng ứng dụng dựa trên các hướng dẫn trên đây .


chỉ là một lưu ý nhỏ, nhưng ví dụ không đầy đủ, nó yêu cầu một tệp bổ sung ( camera.py) từ hướng dẫn.
machow

-1

Chỉ cần thay đổi máy ảnh nhập khẩu để picamera. Bạn phải cài đặt ffpmeg ang mpeg-streamer. Nếu hai mô-đun này không hoạt động thì cài đặt uv4l cũng được. Sau đó khởi động lại và nó hoạt động

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.