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