【问题标题】:How to fix the freezing cv2.imshow(from opencv) in django如何在 django 中修复冻结的 cv2.imshow(来自 opencv)
【发布时间】:2019-06-13 18:00:13
【问题描述】:

我想要做的是当用户单击按钮时,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")

如果无法修复,有什么建议可以做同样的事情吗?谢谢

【问题讨论】:

    标签: python django opencv live-streaming face-recognition


    【解决方案1】:

    试试这个:

    while True:
        frame = vs.read()
        cv2.imshow("Frame", frame)
        if cv2.waitKey(1) & 0xFF == ord("q"):
           break
    cv2.destroyAllWindows()
    vs.stop()
    

    老实说,我真的不明白你想做什么。您想每隔 30 秒再拍一张照片吗?您的代码似乎在 if 条件和 else 条件下都中断了 while 循环

    编辑: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
    

    【讨论】:

    • hmmmmm .....我想显示 30 秒的直播,我才意识到 time.sleep 不是为了那个...谢谢
    猜你喜欢
    • 1970-01-01
    • 2022-01-25
    • 2016-08-30
    • 1970-01-01
    • 2023-03-09
    • 2015-01-22
    • 2021-10-14
    • 1970-01-01
    • 2018-03-29
    相关资源
    最近更新 更多