Kivy 简明教程
Kivy - Camera Handling
Kivy 框架通过特定于平台的提供程序支持摄像头硬件。“opencv-python”软件包使摄像头支持大多数操作系统上的 Kivy。因此,建议在 Kivy 的工作环境中安装 opencv-python 软件包。
在本章中,我们将使用 Kivy 库的 Camera 类构建一个摄像头应用程序。摄像头小部件与切换按钮和普通按钮放置在垂直框布局中以构建应用程序界面。
Camera 实例的初始播放状态以 True 启动,这意味着应用程序窗口将立即开始从摄像头流式传输视频。切换按钮用于在向下时停止摄像头。它绑定到 play() 方法。只有在摄像头正在播放时,捕捉按钮才会启用。
def play(self, instance):
if instance.state=='down':
self.mycam.play=False
instance.text='Play'
self.cb.disabled=True
else:
self.mycam.play=True
instance.text='Stop'
self.cb.disabled=False
捕捉按钮将当前帧保存到 PNG 文件,方法是调用相机对象的 export_to_png() 方法。
当图像被捕捉时,Kivy 会弹出带有图像已捕捉标题的消息框。
def capture(self, instance):
if self.tb.text == 'Stop':
self.mycam.export_to_png("IMG.png")
layout = GridLayout(cols=1)
popup = Popup(
title='Image Captured', title_size=24,
content=layout, auto_dismiss=True,
size_hint=(None, None), size=(300, 100)
)
popup.open()
其余的代码涉及在 build() 方法中组合应用程序界面。
Example
以下是完整代码 −
from kivy.app import App
from kivy.lang import Builder
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.togglebutton import ToggleButton
from kivy.uix.button import Button
from kivy.uix.popup import Popup
from kivy.uix.camera import Camera
from kivy.core.window import Window
Window.size = (720, 400)
class TestCamera(App):
def build(self):
box = BoxLayout(orientation='vertical')
self.mycam = Camera(play=True, resolution=(640, 480))
box.add_widget(self.mycam)
self.tb = ToggleButton(
text='Stop', size_hint_y=None,
height='48dp', on_press=self.play
)
box.add_widget(self.tb)
self.cb = Button(
text='Capture', size_hint_y=None, height='48dp',
disabled=False, on_press=self.capture
)
box.add_widget(self.cb)
return box
def play(self, instance):
if instance.state == 'down':
self.mycam.play = False
instance.text = 'Play'
self.cb.disabled = True
else:
self.mycam.play = True
instance.text = 'Stop'
self.cb.disabled = False
def capture(self, instance):
if self.tb.text == 'Stop':
self.mycam.export_to_png("IMG.png")
layout = GridLayout(cols=1)
popup = Popup(
title='Image Captured', title_size=24,
content=layout, auto_dismiss=True,
size_hint=(None, None), size=(300, 100)
)
popup.open()
TestCamera().run()