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()
我在这里尝试创建一个流式传输网络摄像头的 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()