Opencv in kivy image detector ERROR camera hangs

Asked

Viewed 75 times

1

Guys, I’m trying to run this code and it locks the camera and does nothing else. The idea of the code is to run the face detector inside the widgets + kivy using this library from kivy.uix.image import Image. someone can help me ?

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

# DIRETORIO DO HAAR
faceCascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')


class cadastro(App):
    def build(self):
        self.img1 = Image(source='logoCL.jpg')

        layout = BoxLayout(orientation='vertical')
        layout.add_widget(self.img1)
        # CAMERA CONFIGURAÇÃO
        self.cap = cv2.VideoCapture(0)
        # self.cap.set(3, 640)  # set Width
        # self.cap.set(4, 480)  # set Height
        Clock.schedule_interval(self.atualizaImagem, 1.0 / 30.0)

        return layout

    def atualizaImagem(self, dt):
        ret, frame = self.cap.read()  # captura uma imagem da camera
        # inverte para não ficar de cabeça para baixo

        if ret:
            buf1 = cv2.flip(frame, 0)
            buf = buf1.tostring()  # converte em textura
            texture1 = Texture.create(size=(frame.shape[1], frame.shape[0]), colorfmt='bgr')
            texture1.blit_buffer(buf, colorfmt='bgr', bufferfmt='ubyte')
            self.img1.texture = texture1  # apresenta a imagem

            # SE A CAMERA FICAR DE PONTA CABEÇA
            # img = cv2.flip(img, -1)
            gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
            faces = faceCascade.detectMultiScale(
                gray,
                scaleFactor=1.2,
                minNeighbors=5,
                minSize=(20, 20)
            )
            # CONFIGURAÇÃO DA FACE PARA RECONHECER FICA QUADRADO AZUL
            for (x, y, w, h) in faces:
                cv2.rectangle(frame, (x, y), (x + w, y + h), (255, 0, 0), 2)
                roi_gray = gray[y:y + h, x:x + w]
                roi_color = frame[y:y + h, x:x + w]

            # MOSTRA NA CAMERA
            # cv2.imshow('video', img)

            # FECHAR A CAMERA. NÃO PRECISA POR Q A CAMERA
            # VAI ESTAR RODANDO NO MAIN.PY QUANDO FECHA O MAIN.PY CAMERA FECHA JUNTO
            # POR QUE ESTA NO MESMO LAYOUT
            # k = cv2.waitKey(30) & 0xff
            # if k == 27:  # press 'ESC' to quit
            #   break

            self.cap.release()
            cv2.destroyAllWindows()
        pass


# INICIA O APP
if __name__ == '__main__':
    cadastro().run() ```
No answers

Browser other questions tagged

You are not signed in. Login or sign up in order to post.