Проблемы с добавлением пользовательского виджета камеры в файл kivy kv

Основываясь на примере arnav, я пытаюсь добавить этот пользовательский виджет камеры в структуру kv. К сожалению, этот "механизм" все еще неясен для меня. Итак, я получил следующий код. Подсветка камеры активна после нажатия на кнопку запуска. Однако "видеопоток" не отображается. При запуске только кода arnav с помощью cv2.VideoCapture(0) отображается "видеопоток".

Что я здесь не так делаю?

qrtest.py:

from kivy.app import App
from kivy.uix.image import Image
from kivy.clock import Clock
from kivy.graphics.texture import Texture

from kivy.uix.boxlayout import BoxLayout
from kivy.core.window import Window

import cv2
import os


class KivyCamera(Image):
    def dostart(self, capture, fps, **kwargs):
        self.capture = capture
        Clock.schedule_interval(self.update, 1.0 / fps)

    def update(self, dt):
        ret, frame = self.capture.read()
        if ret:
            # convert it to texture
            buf1 = cv2.flip(frame, 0)
            buf = buf1.tostring()
            image_texture = Texture.create(
                size=(frame.shape[1], frame.shape[0]), colorfmt='bgr')
            image_texture.blit_buffer(buf, colorfmt='bgr', bufferfmt='ubyte')
            # display image from the texture
            self.texture = image_texture


capture = None

class QrtestHome(BoxLayout):

    def init_qrtest(self):
        pass

    def dostart(self, *largs):
        global capture
        capture = cv2.VideoCapture(0)
        my_camera = KivyCamera(capture=capture, fps=10, )
        my_camera.dostart(capture,10)

    def doexit(self):
        global capture

        if capture != None:
            capture.release()

        os._exit(0)


class qrtestApp(App):
    def build(self):
        Window.clearcolor = (.4,.4,.4,1)
        Window.size = (400, 300)
        homeWin = QrtestHome()
        homeWin.init_qrtest()
        return homeWin
qrtestApp().run()

и файл qrtest.kv:

<QrtestHome>:

    BoxLayout:
        orientation: "vertical"

        Label:
            height: 20
            size_hint_y: None
            text: 'Testing the camera'

        KivyCamera:
            canvas:
                Color:
                    rgb: (0, 0.6, 0.6)

                Rectangle:
                    texture: self.texture
                    pos: (50, 30)
                    size: (300, 240)


            height: 260
            id: qrcam

        BoxLayout:
            orientation: "horizontal"
            height: 20
            size_hint_y: None

            Button:
                id: butt_start
                size_hint: 0.5,1
                text: "start"
                on_press: root.dostart()

            Button:
                id: butt_exit
                text: "quit"
                size_hint: 0.5,1
                on_press: root.doexit()

0 ответов

Другие вопросы по тегам