我最近启动了django,我想看看从笔记本电脑摄像头到基于django 2.2的web应用程序的视频。我通过使用函数display_livefeed直接向网络发送响应,成功地观看了摄像头视频。以下是我的应用程序"camerafeed"的视图代码.py
class mycamera(object):
def __init__(self):
self.frames = cv2.VideoCapture(0)
def __del__(self):
self.frames.release()
def get_jpg_frame(self):
is_captured, frame = self.frames.read()
retval, jframe = cv2.imencode('.jpg', frame)
return jframe.tobytes()
def livefeed():
camera_object = mycamera()
while True:
jframe_bytes = camera_object.get_jpg_frame()
yield (b'--framern'
b'Content-Type: image/jpegrnrn' + jframe_bytes + b'rnrn')
@condition(etag_func=None)
def display_livefeed(self):
return StreamingHttpResponse(
livefeed(),
content_type='multipart/x-mixed-replace; boundary=frame'
)
我使用路径('monitor/',display_livefeed,name='monitor'(,在http://127.0.0.1:8000/monitor/并且它完美地工作>>来自流视频的图像<lt;
现在我想在html模板上只显示一行,它在这里完成:https://www.pyimagesearch.com/2019/09/02/opencv-stream-video-to-web-browser-html-page/但这是通过使用烧瓶完成的。但我想用Django做同样的事情,结果被卡住了。这是上面链接中的html文件。
<html>
<head>
<title>Pi Video Surveillance</title>
</head>
<body>
<h1>Pi Video Surveillance</h1>
<img src="{{ url_for('video_feed') }}">
</body>
我试着通过制作这个功能来做到这一点:
def video_feed(request):
return StreamingHttpResponse(
livefeed(), # Calling livefeed() function
content_type='multipart/x-mixed-replace; boundary=frame'
)
但它可以使用路径('',homePageView.as_view((,name='home'(在html页面上查看视频,并将下面的代码放在views.py 中
class homePageView(TemplateView):
template_name = 'home.html'
我看到并尝试了以下内容:
- Django将HttpResponse流化为模板
- Django网页中摄像头的Opencv直播
但可能是因为我对包括web开发在内的所有这些事情都是新手,所以我可能无法完成。请帮我解释一下怎么做。
我使用的是python 3.7和django 2.2
我解决了这个问题,从url模式禁用了监视器路径。我认为问题是有两个消息来源试图使用相机。只需评论
path('monitor', views.display_livefeed, name="monitor")
它是有效的。