【发布时间】:2020-03-06 09:35:40
【问题描述】:
我有一个图像小部件,它从流中获取帧并打印帧并每秒更新 30 次。我想在它上面放置一个标签小部件作为一种覆盖来提供额外的信息(例如帧速率、分辨率等)。但我似乎无法成功在我的小部件上绘制标签。我该怎么做?
到目前为止我有:
.kv:
KivyCamera:
stream: "rtsp://my-stream"
Label:
text: "Testing12345"
pos: self.pos
size: 320, 240
.py:
class KivyCamera(Image):
status = 0
frame = 0
stream = ObjectProperty()
fps = NumericProperty(25)
def __init__(self, **kwargs):
super(KivyCamera, self).__init__(**kwargs)
self._capture = None
def on_stream(self, *args):
if self._capture is not None:
self._capture.release()
self._capture = cv2.VideoCapture(self.stream)
self.thread = Thread(target=self.update, args=())
self.thread.daemon = True
self.thread.start()
Clock.schedule_interval(self.show_frame, 1.0 / self.fps)
@property
def capture(self):
return self._capture
def update(self):
while True:
if self.capture.isOpened():
(self.status, self.frame) = self.capture.read()
time.sleep(.01)
def show_frame(self, dt):
if self.status:
buf1 = cv2.flip(self.frame, 0)
buf = buf1.tostring()
image_texture = Texture.create(
size=(self.frame.shape[1], self.frame.shape[0]), colorfmt="bgr"
)
image_texture.blit_buffer(buf, colorfmt="bgr", bufferfmt="ubyte")
self.texture = image_texture
【问题讨论】:
标签: python python-3.x user-interface kivy kivy-language