Erro list index out of range

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

Visualizando 4 posts - 1 até 4 (de 4 do total)
  • Autor
    Posts
  • #40321
    Profile photo ofRodrigoSantosRodrigo Santos
    Participante

     

    Boa noite está gerando este erro no meu códico, e já olhei tudo e não encontro o problema.

    Obrigadoerro gerado

    #40360

    Olá Rodrigo!

    Esse erro ocorre geralmente quando tentamos acessar um item de uma lista usando um índice que não existe na lista.

    Verifique se o list_names (que você passou como parâmetro à função do mostra_reconhecimento) está contendo os valores esperados, pode ser dando um print() na variável mesmo.

    Desse trecho de código que você mostrou na imagem parece estar correto, mas sugiro comparar com o restante do código do colab da aula (aqui). Se mesmo assim não descobrir o erro, peço que se possível compartilhe o seu Colab aqui para eu conseguir verificar melhor pois deve haver outra coisa no código interferindo e causando isso.

    #40365
    Profile photo ofRodrigoSantosRodrigo Santos
    Participante

    Boa noite Gabriel, segue o link do meu colab para verificação, obrigado.

    https://colab.research.google.com/drive/1lsa74ARKQaDCDe4FWqNMjmpZwQyMFLN3?usp=share_link

    #40385

    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).

Visualizando 4 posts - 1 até 4 (de 4 do total)
  • Você deve fazer login para responder a este tópico.