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
    Rodrigo 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
      Gabriel Alves
      Moderador

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

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