Ask Your Question
-1

Error line: 49 id = names[id] IndexError: list index out of range

asked 2019-07-10 16:29:14 -0600

import cv2
import numpy as np
import os 

recognizer = cv2.face.LBPHFaceRecognizer_create()
recognizer.read('trainer/trainer.yml')
cascadePath = "haarcascade_frontalface_default.xml"
faceCascade = cv2.CascadeClassifier(cascadePath);

font = cv2.FONT_HERSHEY_SIMPLEX

id = 0

names = ['None', 'User', 'Paula', 'Ilza', 'Z', 'W'] 

cam = cv2.VideoCapture(0)

minW = 0.1*cam.get(3)
minH = 0.1*cam.get(4)

while True:

ret, img = cam.read()
img = cv2.flip(img, 1)

gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

faces = faceCascade.detectMultiScale( 
    gray,
    scaleFactor = 1.1,
    minNeighbors = 5,
    minSize = (int(minW), int(minH)),
   )

for(x,y,w,h) in faces:

    cv2.rectangle(img, (x,y), (x+w,y+h), (0,255,0), 2)

    id, confidence = recognizer.predict(gray[y:y+h,x:x+w])

    # Check if confidence is less them 100 ==> "0" is perfect match 
    if (confidence < 100):
        id = names[id]
        confidence = "  {0}%".format(round(100 - confidence))
    else:
        id = "unknown"
        confidence = "  {0}%".format(round(100 - confidence))

    cv2.putText(img, str(id), (x+5,y-5), font, 1, (255,255,255), 2)
    cv2.putText(img, str(confidence), (x+5,y+h-5), font, 1, (255,255,0), 1)  

cv2.imshow('camera',img) 

k = cv2.waitKey(0) & 0xff # Press 'ESC' for exiting video
if k == 27:
    break

print("\n [INFO] Exiting Program and cleanup stuff")
cam.release()
cv2.destroyAllWindows()
edit retag flag offensive close merge delete

Comments

id can be negative, look up docs.

berak gravatar imageberak ( 2019-07-11 11:05:40 -0600 )edit

I did not understand.

emmanuelsiqueira gravatar imageemmanuelsiqueira ( 2019-07-13 08:51:39 -0600 )edit

I did not understand.

yes. main reason for all of your problems. uncurable from here.

berak gravatar imageberak ( 2019-07-13 10:12:29 -0600 )edit

1 answer

Sort by ยป oldest newest most voted
0

answered 2020-09-09 00:21:25 -0600

This error basically means you are trying to access a value at a List index which is out of bounds i.e greater than the last index of the list or less than the least index in the list. So the first element is 0, second is 1, so on. So if there are n elements in a python list, the last element is n-1 . If you try to access the empty or None element by pointing available index of the list, then you will get the "List index out of range " error. To solve this error, you should make sure that you're not trying to access a non-existent item in a list.

edit flag offensive delete link more

Question Tools

1 follower

Stats

Asked: 2019-07-10 16:29:14 -0600

Seen: 1,494 times

Last updated: Jul 10 '19