face_recognition IndexError: list index out of range
阿新 • • 發佈:2018-12-29
再利用face_recognition做人臉識別的時候訓練人臉圖片時報錯:
face_recognition IndexError: list index out of range
主要程式碼定位到:增加編碼到訓練集的face_recognition.face_encodings(...)
#遍歷訓練集中每個資料集 for class_dir in os.listdir(train_dir): if not os.path.isdir(os.path.join(train_dir,class_dir)): continue print "get:",class_dir #遍歷每個目錄下的每張照片 for img_path in image_files_in_folder(os.path.join(train_dir,class_dir)): image = fr.load_image_file(img_path) boxes = fr.face_locations(image) #對於當前圖片 增加編碼到訓練集 X.append(fr.face_encodings(image,known_face_locations=boxes)[0]) y.append(class_dir)
分析原因:
在追加資料到X中時,會將識別的圖片編碼,但是前提是能識別出人臉,否則編碼資料則為空,這也為什麼會報訪問超出邊界BUG,這裡我們需要新增判斷。
#遍歷訓練集中每個資料集 for class_dir in os.listdir(train_dir): if not os.path.isdir(os.path.join(train_dir,class_dir)): continue print "get:",class_dir #遍歷每個目錄下的每張照片 for img_path in image_files_in_folder(os.path.join(train_dir,class_dir)): image = fr.load_image_file(img_path) boxes = fr.face_locations(image) #對於當前圖片 增加編碼到訓練集 encodings = fr.face_encodings(image,known_face_locations=boxes) if len(encodings) > 0: X.append(encodings[0]) y.append(class_dir) else: print("No faces found in the image!") #X.append(fr.face_encodings(image,known_face_locations=boxes)[0]) #y.append(class_dir)