【问题标题】:How to stream opencv frame with django frame in realtime?如何使用 django 帧实时流式传输 opencv 帧?
【发布时间】:2018-02-04 23:37:46
【问题描述】:

我正在尝试使用树莓派从 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")

【问题讨论】:

  • 客户端可能只需要一个图像,因为 content_type 是image/jpeg。这个问题可能有用。 stackoverflow.com/questions/21197638/…
  • 感谢您的回复!我已经能够使用 multipart/x-mixed 流式传输我的相机输入帧!
  • 你能解释一下你是如何使用多部分的吗?或者也许有一个代码sn-p?我也有同样的问题。

标签: python django opencv django-views real-time-data


【解决方案1】:

@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替换边界标记为frame的multipart/x-mixed-replace

在 django 中有一个 gzip 装饰器功能。

from django.views.decorators import gzip</pre>

提高流媒体的速度。我使用了 django gzip 装饰器方法来 gzip 框架。

【讨论】:

  • 有没有办法在模板上提出这个?我有一个网页,我想在其中运行上述代码并将结果显示在页面的侧边栏上。您能否告诉我需要对视图和模板进行哪些更改?
  • @Abhijit,您找到解决方案了吗?我也在找一样的。
  • @Abhijit 您可以将&lt;img src="{% url 'url-name' %}"&gt;&lt;/img&gt; 与url-name 作为上面视图index 的URL 名称。这是一个执行此操作的 django 应用程序:github.com/sawardekar/Django_VideoStream
  • @luvwinnie 当我们使用 jpeg 压缩格式时是否需要 gzip 装饰器?为什么流有时无法在 Safari 中运行并且加载页面冻结?
猜你喜欢
  • 2019-12-31
  • 2017-12-07
  • 2019-09-25
  • 2020-10-27
  • 1970-01-01
  • 1970-01-01
  • 2020-02-06
  • 1970-01-01
相关资源
最近更新 更多