Responder a: Erro list index out of range

Home Fóruns Fórum Detecção e Reconhecimento Facial com Python Erro list index out of range Responder a: Erro list index out of range

#40385
Gabriel Alves
Moderador

    Olá Rodrigo, eu verifiquei aqui seu código e encontrei o motivo. O problema está na função mostra_reconhecimento(), na primeira linha (onde é declarado os parâmetros da função). Em seu código é definido a variável lista_nome, porém na linha seguinte é passado para a função reconhece_faces() a variável lista_nomes, com “s”, e o valor que você passou à função mostra_reconhecimento é lista_nome, sem o “s”. Na verdade então ele está passando ao reconhece_faces() a lista de nomes do seu exemplo anterior, cuja variável possui esse exato nome (e que contém 9 valores), e não a lista de nomes do dataset_celeb (que contém 55 valores); então por isso dá erro pois assim pode ocorrer de acessar um índice que não existe na lista, já que está passando a lista errada e com apenas 9 valores.

    Portanto, para resolver basta corrigir em sua função o lista_nome, deixando lista_nomes.

    def mostra_reconhecimento(imagem_teste, lista_encodings, lista_nomes, max_width = 700, tolerancia = 0.6):
      localizacoes, nomes, confiancas = reconhece_faces(imagem_teste, lista_encodings, lista_nomes, tolerancia)
      for face_lock, nome, conf in zip(localizacoes, nomes, confianca):
        y1, x2, y2, x1 = face_lock [0], face_lock[1], face_lock[2], face_lock[3]
        cv2.putText(imagem_teste, nome, (x1, y1 -10), cv2.FONT_HERSHEY_DUPLEX, 0.8, (0,0,255), 2)
        cv2.rectangle(imagem_teste, (x1, y1), (x2, y2), (0, 10,255), 4)
        print(conf)
      if imagem_teste.shape[1] > max_width:
        imagem_teste = imutils.resize(imagem_teste, width = max_width)
      cv2_imshow(imagem_teste)

    (ou, também para resolver poderia passar para a função reconhece_faces o lista_nome sem “s”, já que é esse valor que foi recebido como parâmetro).