Home › Fóruns › Fórum Detecção e Reconhecimento Facial com Python › Erro list index out of range
- Este tópico contém 3 respostas, 2 vozes e foi atualizado pela última vez 1 ano, 10 meses atrás por
Gabriel Alves.
- AutorPosts
- 27 de abril de 2023 às 21:29 #40321
Boa noite está gerando este erro no meu códico, e já olhei tudo e não encontro o problema.
Obrigado
3 de maio de 2023 às 16:42 #40360Olá 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.
3 de maio de 2023 às 20:04 #40365Boa noite Gabriel, segue o link do meu colab para verificação, obrigado.
https://colab.research.google.com/drive/1lsa74ARKQaDCDe4FWqNMjmpZwQyMFLN3?usp=share_link
7 de maio de 2023 às 18:32 #40385Olá 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).
- AutorPosts
- Você deve fazer login para responder a este tópico.