我想要做的是当用户单击按钮时,django将运行python代码并检测到人。我从imutils.video使用VideoStream,但它只是弹出窗口并冻结。当我测试人脸识别时,它非常有效,但是一旦我将相同的代码放入django中。我的意思是,它仍然可以检测到人,但只能检测到第一帧,然后将冻结。
VideoStream来自imutils.video,而cv2.imshow来自opencv。
这是视频流的代码。即使我只运行视频流(没有面部识别代码),它也仍然冻结。
def detect(request):
vs = VideoStream("http://192.168.1.109:8080/video").start()
while True:
frame = vs.read()
cv2.imshow("Frame", frame)
key = cv2.waitKey(1) & 0xFF
if key == ord("q") :
break
else:
time.sleep(30)
break
cv2.destroyAllWindows()
vs.stop()
return render(request,"attendance/detect.html")
如果它不能解决,那么有什么建议可以做同样的事情?谢谢
答案 0 :(得分:0)
尝试一下:
while True:
frame = vs.read()
cv2.imshow("Frame", frame)
if cv2.waitKey(1) & 0xFF == ord("q"):
break
cv2.destroyAllWindows()
vs.stop()
老实说我真的不明白你想做什么。您想每30秒等待一次,然后再拍张照片吗?您的代码似乎在条件条件和其他条件条件下循环时都中断了
编辑:30秒流
2个选项
1)对于30秒的流,您需要计算fps并在达到fps * 30循环后中断。
2)创建标志变量和超时函数
flag = 0
def timeout(sleep):
time.sleep(sleep)
flag = 1
threading.Thread(target = timetout, args=(30,)).start()
# in your loop then break when
if flag == 1:
break