Python 如何使用Django Streaming HTTPS响应正确渲染图像?

Python 如何使用Django Streaming HTTPS响应正确渲染图像?,python,django,opencv,Python,Django,Opencv,我用Python编写了一些代码,它利用(除其他软件包外)逐帧浏览选定的视频,检查帧中是否有人(请参阅),然后返回找到人的所有帧 目前的目标是在web浏览器中动态显示这些图像。我用这个答案作为指导: 我的代码如下: def stream_response(request): return StreamingHttpResponse(detect()) def detect(): frame_count=0 while(frame_count < num_frames

我用Python编写了一些代码,它利用(除其他软件包外)逐帧浏览选定的视频,检查帧中是否有人(请参阅),然后返回找到人的所有帧

目前的目标是在web浏览器中动态显示这些图像。我用这个答案作为指导:

我的代码如下:

def stream_response(request):
    return StreamingHttpResponse(detect())

def detect():
    frame_count=0
    while(frame_count < num_frames):
        ret, frame = capture.read()
        gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
        image_pil=Image.fromarray(gray)
        response = HttpResponse(content_type="image/jpeg")
        image_pil.save(response, "JPEG")
        yield response
        yield ""*1024
        time.sleep(1)
        frame_count+=1
def流_响应(请求):
返回StreamingHttpResponse(detect())
def detect():
帧计数=0
而(帧数<帧数):
ret,frame=capture.read()
灰色=cv2.CVT颜色(边框,cv2.COLOR\u BGR2GRAY)
image\u pil=image.fromarray(灰色)
响应=HttpResponse(content_type=“image/jpeg”)
图像保存(响应,“JPEG”)
屈服响应
收益率“*1024”
时间。睡眠(1)
帧计数+=1
然而,当我使用Django中的StreamingHTTPResponse特性来生成响应(实现a的方法)时,我在浏览器中看到的响应是杂乱无章的(参见下图)。

但是,当我使用HTTPResponse返回响应时,当指向相应的端口时,图像在浏览器中显示良好

我试过各种各样的测试,但还是弄不明白。我的理论是,这可能是因为浏览器无法在给定的时间内渲染图像,但我不确定


更新:最终直接从Python为原型应用程序生成HTML。就目前的目的而言,这确实是一个诀窍,但我们将继续对此进行探索。

您需要像这样的分布式任务队列系统。你可以这样申请

您的主页面(执行流从这里开始)

  • 要求用户上传视频

  • 将此视频文件保存到服务器上

  • 在数据库中添加针对视频的条目

  • 使用视频记录的id调用detect asynchronous task,并根据视频保存数据库中返回的任务id 记录
  • 将用户重定向到具有视频id的成功页面
  • 在成功页面上

  • 显示成功消息
  • 使用javascript调用具有视频id的状态web服务,并相应地一次又一次地更新页面(动态加载图像),直到收到状态完成
  • 在状态web服务中

  • 使用视频id获取任务id

  • 检查任务状态

  • 使用视频id从数据库获取图像(异步任务在后台放入数据库的图像)

  • 返回状态(无论是已完成还是正在进行)和图像列表


  • 您只能返回一个图像/请求,以便浏览器正确显示它。