我正在尝试使用raspberry pi从USB摄像头捕获图像并使用Django框架进行流式传输 我试图使用StreamingHttpResponse从Opencv2流式传输帧。 但是,它只显示1帧而不替换图像。
如何实时替换图像?
这是我的代码。
from django.shortcuts import render
from django.http import HttpResponse,StreamingHttpResponse
import cv2
import time
class VideoCamera(object):
def __init__(self):
self.video = cv2.VideoCapture(0)
def __del__(self):
self.video.release()
def get_frame(self):
ret,image = self.video.read()
ret,jpeg = cv2.imencode('.jpg',image)
return jpeg.tobytes()
def gen(camera):
while True:
frame = camera.get_frame()
yield(frame)
time.sleep(1)
def index(request):
# response = HttpResponse(gen(VideoCamera())
return StreamingHttpResponse(gen(VideoCamera()),content_type="image/jpeg")
答案 0 :(得分:2)
@Ritwick我所做的是将 gen 和 index 功能更改为
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\r\n') @gzip.gzip_page def index(request): try: return StreamingHttpResponse(gen(VideoCamera()),content_type="multipart/x-mixed-replace;boundary=frame") except HttpResponseServerError as e: print("aborted")
我使用python生成器生成每个相机帧并使用StreamingHttpResponse替换 multipart / x-mixed-replace ,其边界标记为 frame
在django中有一个gzip装饰器函数。
from django.views.decorators import gzip
提高流媒体的速度。我使用django gzip装饰器方法来gzip框架。