Python kivy应用程序速度慢,无法实时查看网络摄像头
我正在尝试制作一个kivy应用程序来实时显示从网络摄像头抓取的图像。它可以工作,但速度很慢,我想知道是否有人知道如何解决这个问题,或者知道使用不同的方法。所谓慢,我的意思是在显示连续图像之间有很大的延迟 代码很简单,只是由一个矩形组成,通过texture.blit_buffer显示从相机抓取的图像。有一个“播放”按钮用于启动和停止图像显示 我已经安排矩形上的纹理每0.02秒更新一次,并且使用pythons时间模块,我能够对更新纹理的函数的执行进行计时。函数大约每0.02秒调用一次并执行一次,因此问题不在于函数本身太慢。这就是我挂断电话的地方。还有什么原因导致显示的图像更新如此缓慢 无论如何,这是.py文件Python kivy应用程序速度慢,无法实时查看网络摄像头,python,kivy,Python,Kivy,我正在尝试制作一个kivy应用程序来实时显示从网络摄像头抓取的图像。它可以工作,但速度很慢,我想知道是否有人知道如何解决这个问题,或者知道使用不同的方法。所谓慢,我的意思是在显示连续图像之间有很大的延迟 代码很简单,只是由一个矩形组成,通过texture.blit_buffer显示从相机抓取的图像。有一个“播放”按钮用于启动和停止图像显示 我已经安排矩形上的纹理每0.02秒更新一次,并且使用pythons时间模块,我能够对更新纹理的函数的执行进行计时。函数大约每0.02秒调用一次并执行一次,因此
import numpy as np
import cv2
from kivy.app import App
from kivy.uix.widget import Widget
from kivy.core.window import Window
from kivy.uix.button import Button
from kivy.graphics.texture import Texture
from kivy.clock import Clock
from kivy.properties import NumericProperty
import time
class WebcamGUI(Widget):
IsPlaying = False
Event = None
Size_x = 640
Size_y = 480
texture = Texture.create(size=(Size_x,Size_y),colorfmt='bgr')
frame = np.ones(shape=[Size_x, Size_y, 3], dtype=np.uint8)
data = frame.tostring()
texture.blit_buffer(data, colorfmt='bgr', bufferfmt='ubyte')
cap = cv2.VideoCapture(0)
t = time.time()
def GetFrame(self,dt):
ret, frame = self.cap.read()
frame1 = cv2.flip(frame, 0)
data = frame1.tostring()
self.texture.blit_buffer(data, colorfmt='bgr', bufferfmt='ubyte')
print(time.time()-self.t)
self.t = time.time()
def Play(self):
self.IsPlaying = not self.IsPlaying
if self.IsPlaying:
self.Event = Clock.schedule_interval(self.GetFrame,0.02)
else:
self.Event.cancel()
class WebcamGUIApp(App):
def build(self):
GUI = WebcamGUI()
return GUI
def on_stop(self):
self.cap.release()
if __name__ == '__main__':
Window.fullscreen = False
WebcamGUIApp().run()
cv2.destroyAllWindows()
以下是.kv文件:
#:kivy 1.0.9
<WebcamGUI>:
canvas:
Rectangle:
pos: 100,100
size: self.Size_x,self.Size_y
texture: self.texture
ToggleButton:
pos: (10,10)
size: 100,25
text: "Play"
on_press: root.Play()
#:kivy 1.0.9
:
画布:
矩形:
位置:100100
大小:self.size\x,self.size\y
纹理:自我纹理
切换按钮:
职位:(10,10)
尺码:100,25
文字:“播放”
按:root.Play()