变量不在python类函数之间共享

时间:2015-04-18 06:17:59

标签: python flask

这里我正在尝试创建一个流式传输网络摄像头的烧瓶应用程序。我正确地使用了网络摄像头。并且沿着网络摄像头流传输请求,传递对当前流视频的倍增帧值结果(处理后的视频)的另一请求。哪个没有得到正确的结果但是它发送请求。问题是它在类函数之间没有共享价值。在camera.py中有2个函数getframe和GetBw共享一个类变量self._image。但GetBw并没有更新self._image的值。

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

1 个答案:

答案 0 :(得分:0)

以下是重要的代码:

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()