RTSP на Django с использованием OpenCV
Мне нужно транслировать камеру наблюдения на сайт, основанный на Django. Я нашел учебник на Youtube, но он очень простой. Ниже приведен мой код:
from django.shortcuts import render
from django.views.decorators import gzip
from django.http import StreamingHttpResponse
import cv2
# Create your views here.
@gzip.gzip_page
def Home(request):
try:
cam = videoCamera()
return StreamingHttpResponse(gen(cam), content_type="multipart/x-mixed-replace;boundary=frame")
except:
pass
return render(request, 'index.html')
# Video Capture
class videoCamera(object):
video = cv2.VideoCapture("[user]:[password]@rtsp://[ip-address]:554/sub")
while True:
_, frame = video.read()
cv2.imshow("RTSP", frame)
k = cv2.waitKey(10)
if k == ord('q'):
break
video.release()
cv2.destroyAllWindows()
Однако я столкнулся с ошибкой:
cv2.error: OpenCV(4.6.0) D:\a\opencv-python\opencv-python\opencv\modules\highgui\src\window.cpp:967: error: (-215:Assertion failed) size.width>0 && size.height>0 in function 'cv::imshow'
<
попробуйте это в классе videoCamera, не забудьте импортировать threading
class VideoCamera(object):
def __init__(self):
self.video = cv2.VideoCapture("put your video link here")
(self.grabbed , self.frame) = self.video.read()
threading.Thread(target=self.update , args=()).start()
def __del__(self):
self.video.release()
def get_frame(self):
image = self.frame
_ , jpeg = cv2.imencode(' .jpg' , image)
return jpeg.tobytes()
def update(self):
while True:
(self.grabbed , self.frame) = self.video.read()