我在Python中编写了一些代码,利用OpenCV(以及其他软件包)逐帧浏览选定的视频,检查框架是否有人(参见here),以及然后返回找到一个人的所有帧。
目标(目前)是在Web浏览器中动态显示这些图像。我用这个答案作为指导:How to stream an HttpResponse with Django
我的代码如下:
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
然而,当我在Django中使用StreamingHTTPResponse功能来产生响应(实现generator的方法)时,我在浏览器中看到的响应是乱码(见下图) )。
但是,当我使用HTTPResponse 返回响应时,当定向到相应的端口时,图像在浏览器中显示正常。
我已尝试过各种测试,但仍然无法弄清楚。我的理论是,可能是由于浏览器无法在给定时间内渲染图像,但我不确定......
更新:直接从Python中为原型应用程序生成HTML。这就是当前目的的诀窍,但会重新探讨这一点。
答案 0 :(得分:2)
您需要像Celery这样的分布式任务队列系统。您可以按照
的方式进行申请您的主页(执行流程从哪里开始)
要求用户上传视频
将此视频文件保存在服务器上
在数据库中添加针对视频的条目
在成功页面上
在状态网络服务中
使用视频ID
检查任务状态
使用视频ID(异步任务在后台放入数据库的图像)从数据库中获取图像
返回状态(已完成或正在进行)和图像列表