Я использую Kivy с веб-камерой. Я следовал этому примеру @Arnav использования opencv для формирования и отображать камеру как виджет. Я «расширил» макет в Python, чтобы добавить две кнопки в качестве теста, готовясь к более сложному макету.
class CamApp(App):
def build(self):
self.capture = cv2.VideoCapture(0)
self.my_camera = KivyCamera(capture=self.capture, fps=30,resolution=(1920,1080))
root = BoxLayout(orientation = 'vertical')
root.add_widget(self.my_camera,1)
box2 = BoxLayout(orientation = 'vertical')
btn1 = Button(text='Hello world 1')
btn2 = Button(text='Hello world 2')
box2.add_widget(btn1)
box2.add_widget(btn2)
root.add_widget(box2, 0)
return root
#return Builder.load_string(kv)
Пока это работает, я бы предпочел переместить компоненты пользовательского интерфейса из python в файл kv language
. Проблема в том, как «описать» self.my_camera
в файле kv
?
Я не уверен, следует ли наследовать класс KivyCamera
как widget
в файле kv
, т.е.
kv = '''
<Cam1@KivyCamera>:
texture: self.my_camera
resolution: (1920, 1080)
pos: self.pos
size: self.size
Или использовать виджет canvas
<MyWidget>:
canvas:
Rectangle:
source: self.my_camera
pos: self.pos
size: self.size
Я пробовал другие "взломанные" реализации, но во всех случаях проблема заключается в линковке через self.my_camera
в файл kv
.
Какие-либо предложения?