Поэтому я написал код потоковой передачи.
Код: Выделить всё
from flask import Flask, render_template, Response
import cv2
app = Flask(__name__)
capture = cv2.VideoCapture(0)
capture.set(cv2.CAP_PROP_FRAME_WIDTH, 640)
capture.set(cv2.CAP_PROP_FRAME_HEIGHT,480)
def GenerateFrame():
capture = cv2.VideoCapture(0)
while True:
ref, frame = capture.read()
if not ref:
break
else:
ref, buffer = cv2.imencode('.jpg',frame)
frame = buffer.tobytes()
yield (b'--frame\r\n'
b'Content-Type: image /jpeg\r\n\r\n' + frame + b'\r\n')
@app.route("/")
def Index():
return render_template('index.html')
@app.route('/video_feed')
def video_feed():
return Response(GenerateFrame(), mimetype = 'multipart/x-mixed-replace; boundary = frame')
if __name__ == "__main__":
app.run(host="0.0.0.0", port = "8080")
Код: Выделить всё
WEBCAM STREAMING
Live Streaming
[img]{{url_for([/img]
Код работал хорошо, но я не вижу потоковое видео, когда захожу на свой IP-адрес.
Когда я захожу на веб-сайт, в терминале Raspberry Pi появляется код ошибки, как показано ниже.
Код: Выделить всё
@raspberrypi:~/opencv $ sudo python app_start.py
[ WARN:0] global ../modules/videoio/src/cap_gstreamer.cpp (1824) handleMessage OpenCV | GStreamer warning: Embedded video playback halted; module v4l2src0 reported: Failed to allocate required memory.
[ WARN:0] global ../modules/videoio/src/cap_gstreamer.cpp (914) open OpenCV | GStreamer warning: unable to start pipeline
[ WARN:0] global ../modules/videoio/src/cap_gstreamer.cpp (501) isPipelinePlaying OpenCV | GStreamer warning: GStreamer: pipeline have not been created
* Serving Flask app "app_start" (lazy loading)
* Environment: production
WARNING: This is a development server. Do not use it in a production deployment.
Use a production WSGI server instead.
* Debug mode: off
* Running on http://0.0.0.0:8080/ (Press CTRL+C to quit)
192.168.123.9 - - [16/Jan/2024 10:29:43] "GET / HTTP/1.1" 200 -
[ WARN:1] global ../modules/videoio/src/cap_gstreamer.cpp (1824) handleMessage OpenCV | GStreamer warning: Embedded video playback halted; module v4l2src1 reported: Device '/dev/video0' is busy
[ WARN:1] global ../modules/videoio/src/cap_gstreamer.cpp (914) open OpenCV | GStreamer warning: unable to start pipeline
[ WARN:1] global ../modules/videoio/src/cap_gstreamer.cpp (501) isPipelinePlaying OpenCV | GStreamer warning: GStreamer: pipeline have not been created
[ WARN:1] global ../modules/videoio/src/cap_v4l.cpp (893) open VIDEOIO(V4L2:/dev/video0): can't open camera by index
192.168.123.9 - - [16/Jan/2024 10:29:43] "GET /video_feed HTTP/1.1" 200 -
Но я не использовал video0 за исключением запуска этого кода.
Как решить эту проблему?
Подробнее здесь: https://stackoverflow.com/questions/778 ... spberry-pi
Мобильная версия