cv2 VideoCapture在启动时将烧瓶服务器挂起

时间:2019-11-12 17:59:52

标签: python opencv flask

Flask服务器在启动时挂起(并且不提供任何页面)。发生这种情况是因为尝试在类中初始化OpenCV VideoCapture:

我有一个LaptopCamera类,该类使用OpenCV初始化便携式相机:

class LaptopCamera:
    def __init__(self):
        self.video = cv2.VideoCapture(0)
        self.video.set(cv2.CAP_PROP_FRAME_WIDTH, 1920)
        self.video.set(cv2.CAP_PROP_FRAME_HEIGHT, 1080)
        self.video.set(cv2.CAP_PROP_FPS, 60)
        self.video.set(cv2.CAP_PROP_BUFFERSIZE, 1)

    def single_image(self):
        """return jpeg image of frame"""
        ret, jpeg = cv2.imencode('.jpeg', self.read_video())
        return jpeg.tobytes()

,然后在烧瓶服务器中使用它,如下所示:

@API.route('/picture.jpeg')
def provide_jpeg():
    cam.read_video()
    return Response(cam.single_image(), mimetype='image/jpeg')

cam = LaptopCamera()

if __name__ == '__main__':
    tankyAPI.run(HOST, PORT, debug=True)

如果我首先评论cam = LaptopCamera(),请启动服务器,取消对cam = LaptopCamera()的注释,然后等待其重新加载就可以了。

我想知道为什么会这样吗?以及如何找到解决方案?

1 个答案:

答案 0 :(得分:0)

在开发应用程序时,我也有类似的经历。我的解决方案是删除所有库,创建一个新环境,然后重新安装所有库。它在Ubuntu 18上运行,并且CV2和其他python模块之间有些系统库有所不同,因此解决我的问题的最简单方法是从头开始并重新安装每个库。

希望这会有所帮助。