Issue
I'm working on a facial recognition project. The app works great, until a large amount of faces are added to my database and then I am getting an out of range error that I cannot solve. I initially tried to do this project in c#, but found the api's were lacking so I switched to python, but I am quite bad at it.
The error is somewhere in this piece of code that generates the database.
def encode_photos():
encoded = {}
for dirpath, dnames, fnames in os.walk("./datasets"):
for f in fnames:
if f.endswith(".jpg") or f.endswith(".png"):
face = face_recognition.load_image_file("datasets/" + f)
encoding = face_recognition.face_encodings(face, model="cnn")[0]
encoded[f.split(".")[0]] = encoding
print("Encoding image", f)
with open('dataset_faces.dat', 'wb') as f:
pickle.dump(encoded, f)
print("Encoding complete and saved in dataset_faces.dat")
It never gets to the data dump part because it is encountering this error:
Exception in Tkinter callback
Traceback (most recent call last):
File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/tkinter/__init__.py", line 1702, in __call__
return self.func(*args)
File "cnn.py", line 42, in encode_photos
encoding = face_recognition.face_encodings(face, model="cnn")[0]
IndexError: list index out of range
The folder has about 2600 photos in it but it is only getting through a few hundred before this error occurs.
Any ideas?
Solution
In the end it turned out the easiest way to solve this was to add exception handling. The database was created without any issues with this addition to the code.
try:
face = face_recognition.load_image_file("datasets/" + f)
encoding = face_recognition.face_encodings(face, model="cnn")[0]
encoded[f.split(".")[0]] = encoding
print("Encoding image", f)
except Exception:
pass
Answered By - cfive
0 comments:
Post a Comment
Note: Only a member of this blog may post a comment.