[Python] Python - CV2 FaceRecognizer retorna usuario não cadastrado [fechada]

Discussão em 'Python' iniciado por Stack, Novembro 19, 2024.

  1. Stack

    Stack Membro Participativo

    Estou criando um programa de reconhecimento, onde a pessoa cadastra as informações e tira uma foto para o reconhecimento facial.

    Consigo criar quantos usuarios necessarios e todas ela reconhecem certinho cada pessoa, retornando as informações de cada usuario na tela, mas o problema está nas faces não cadastradas.

    Quando há um usuario cadastrado e uma pessoa não cadastrada coloca o rosto, ele retorna que nenhum usuario foi encontrado, mas quando há mais de um usuario cadastrado e uma pessoa não cadastrada coloca o rosto para o reconhecimento, ela SEMPRE RETORNA O PRIMEIRO USER CADASTRADO.

    Esse é código abaixo que faz o reconhecimento das faces.

    from database import *
    from kivy.app import App
    from kivy.uix.screenmanager import Screen
    from kivy.lang import Builder
    import cv2
    import numpy as np
    import csv
    from datetime import datetime

    camera = cv2.VideoCapture(0)
    detectorFace = cv2.CascadeClassifier("./lib/haarcascade_frontalface_default.xml")
    reconhecedor = cv2.face.EigenFaceRecognizer_create()
    reconhecedor.read("./lib/classificadorEigen.yml")
    largura, altura = 220, 220
    font = cv2.FONT_HERSHEY_COMPLEX_SMALL
    id_t = ''
    nome_arquivo = 'ponto.xlsx'
    cabecalho = ('Nome', 'Data')
    hora = datetime.now()

    def gerar_arquivo(nome_arquivo, cabecalho, resultado):
    with open (nome_arquivo, "w", newline = "") as csvfile:
    dados = csv.writer(csvfile)
    dados.writerow(cabecalho)
    for x in resultado:
    tempo = (x[0], hora, '\n')
    dados.writerow(tempo)


    while (True):
    conectado, imagem = camera.read()
    imagemCinza = cv2.cvtColor(imagem,cv2.COLOR_BGR2GRAY)
    facesDetectadas = detectorFace.detectMultiScale(imagemCinza, minNeighbors=20, minSize=(30, 30), maxSize=(400, 400))
    for (x,y,l,a) in facesDetectadas:
    imagemFace = cv2.resize(imagemCinza[y:y+a,x:x+l],(largura,altura))
    cv2.rectangle(imagem,(x,y),(x+l,y+a),(0,0,255),2)
    id,confianca = reconhecedor.predict(imagemFace)
    print(id)
    id_t = id
    cursor.execute("SELECT nome FROM users WHERE id = ?",(int(id),))
    resultado = cursor.fetchall()
    print(resultado)
    if not resultado:
    cv2.putText(imagem, "Nenhum user encontrado".strip("(),'"), (x, y + (a + 30)), font, 2, (0, 0, 255))
    else:
    cv2.putText(imagem, str(resultado[0]).strip("(),'"), (x, y + (a + 30)), font, 2, (0, 0, 255))

    cv2.imshow("Face",imagem)

    if cv2.waitKey(1) == ord('q'):
    gerar_arquivo(nome_arquivo, cabecalho, resultado)
    Builder.load_file('../kv_showresults.kv') # Carrega o arquivo


    class AnswerInput(Screen):
    pass

    class MainApp(App):

    global result

    cursor.execute(
    "SELECT id, nome, telefone, endereco, cidade FROM users WHERE id = ?", (str(id_t)))
    result = cursor.fetchone()
    print(result)
    nome = "Nome: " + result[1]
    telefone = "Telefone: " + result[2]
    endereco = "Endereco: " + result[3]
    cidade = "Cidade: " + result[4]
    source_ = './treinamento/pessoa.'+str(result[0])+'.1.jpg'

    def build(self):
    return AnswerInput()
    if __name__ == '__main__':
    MainApp().run()
    break
    if cv2.getWindowProperty("Face", cv2.WND_PROP_VISIBLE) < 1:
    break

    camera.release()
    cv2.destroyAllWindows()

    Continue reading...

Compartilhe esta Página