admin管理员组文章数量:1794759
Python Kivy(App开发)调用摄像头的样例
样例思路
简单来说,Kivy只是提供了可以让用户和手机进行交互的框架和接口,我们只要把框架搭好,内部算法的参数传递到框架相应的接口,就能实现交互。所以实际上,底层算法并不会改变,改变的是输入输出方式。 kivy代码原文链接:kivy/doc/stable/examples/gen__camera__main__py.html# 编译器:Pycharm Kivy版本:1.11
效果展示Kivy语言编写界面 Builder.load_string(''' <CameraClick>: orientation: 'vertical' Camera: id: video #关键,调用OpenCV函数 resolution: (640, 480) play: False ToggleButton: text: 'Play' on_press: video.play = not video.play size_hint_y: None height: '48dp' Button: text: 'Capture' size_hint_y: None height: '48dp' on_press: root.capture() ''')
在我之前的基础部分,我没有详细地说过Kivy语言,因为它非常简单,几乎都是描述性的语句。从上面的代码可以看出,需要调用的函数写在最前面,用<>进行包裹,它必须与我们在主程序中定义的类的名字一致,kivy才能调用。接着定义函数中的widgets,比如这里我们定义的Camera,Button等,都是Kivy的widgets,可以看出,非常简洁明了。在这些函数后面,跟着这些函数内部的参数名,冒号:之后就是对参数的定义。
这部分的关键在于,Camera函数那里,我们在Kivy内对Python进行了访问,调用OpenCV函数,然后Python对整个kivy语言用Builder.load_string进行访问,调用内部函数,实现界面布局设计。这样相互之间就建立了信交流通道。我想强调的就是这个做法,Kivy为Python提供了交互接口。
实际上,我们可以单独写一个以.kv为拓展名的Kivy文件,在程序运行的时候自动调用.ky,使得代码更加简洁。
把OpenCV函数输出到Kivy窗口 class CameraClick(BoxLayout): def capture(self): camera = self.ids['video'] timestr = time.strftime("%Y%m%d_%H%M%S") camera.export_to_png("IMG_{}.png".format(timestr)) print("Captured")我们在这里定义一个对相机画面进行简单操作的盒式布局的类。调用Kivy语言中相机的ids,根据我们在Kivy语言中设置的名字,它叫做video,如果需要直接调用,就不用kivy语言写这句代码,看个人习惯。
总结需要注意的是,Kivy目前在国内不流行,所以在打包的时候需要外面的资源,只能翻过去下载,不稳定也慢。Kivy也不够成熟。
程序 from kivy.App import App #使用Kivy语言 from kivy.lang import Builder from kivy.uix.boxlayout import BoxLayout import time #使用Kivy语言编写界面框架 Builder.load_string(''' <CameraClick>: orientation: 'vertical' Camera: id: video resolution: (640, 480) play: False ToggleButton: text: 'Play' on_press: video.play = not video.play size_hint_y: None height: '48dp' Button: text: 'Capture' size_hint_y: None height: '48dp' on_press: root.capture() ''') #创建盒式布局类,实现截图 class CameraClick(BoxLayout): def capture(self): camera = self.ids['video'] timestr = time.strftime("%Y%m%d_%H%M%S") camera.export_to_png("IMG_{}.png".format(timestr)) print("Captured") #主程序 class TestCamera(App): def build(self): return CameraClick() TestCamera().run()版权声明:本文标题:Python Kivy(App开发)调用摄像头的样例 内容由林淑君副主任自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.xiehuijuan.com/baike/1686470201a71082.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论