python class 函数之间不共享变量

Variable not sharing between the python class functions

我在这里尝试创建一个流式传输网络摄像头的 Flask 应用程序。我的网络摄像头流式传输正常。并且沿着网络摄像头流请求,传递另一个请求以获取当前流 video.Which 的乘法帧值结果(处理后的视频)没有得到正确的结果,但它正在发送请求。问题是 class 函数之间不共享值。在 camera.py 中有 2 个函数 getframe 和 GetBw,它们共享一个 class 变量 self._image。但是 GetBw 没有更新 self._image.

的值

这是我的烧瓶应用代码main.py & index.html

这是重要的代码:

class MainObject():
    def gen(camera):
        while self.Status == True:
            self.frame = camera.get_frame()
            yield (b'--frame\r\n'
                   b'Content-Type: image/jpeg\r\n\r\n' + self.frame + b'\r\n\r\n')

    def abc(camera):
        while self.Status == True:
            self.frame = camera.GetBw()
            yield (b'--frame\r\n'
                   b'Content-Type: image/jpeg\r\n\r\n' + self.frame + b'\r\n\r\n')


class VideoCamera(object):
    def get_frame(self):
        success, image = self.video.read()
        ret, jpeg = cv2.imencode('.jpg', image)
        self.string = jpeg.tostring()
        self._image = image
        return jpeg.tostring()

    def GetBw(self):
        image = self._image
        ret, jpeg = cv2.imencode('.jpg', image)
        self.string = jpeg.tostring()
        return jpeg.tostring()

您断言 GetBw 没有 [获取] self._image 的更新值是不正确的。事实上,当您更新它(在相同的上下文中)时,它确实会获得更新后的值

但问题是,在您的 abc 生成器中,您永远不会导致从相机中提取视频帧。从相机中提取新帧的行是

success, image = self.video.read()

这不是生成器 abc 调用的任何地方。所以你最终会重复返回相同的帧。

相反,您可能只想 GetBw 看起来像:

    def GetBw(self):
        success, image = self.video.read()
        ret, jpeg = cv2.imencode('.jpg', image)
        self.string = jpeg.tostring()
        return jpeg.tostring()