RuntimeError: Unsupported image type, must be 8bit gray or RGB image.
- face_recognition version: 1.2.2
- Python version: 3.12.3
- Operating System: Fedora 39
Description
Just trying to launch official example. The issue appears while reading jpg image, not camera input
What I Did
import face_recognition
import cv2
import numpy as np
# This is a demo of running face recognition on live video from your webcam. It's a little more complicated than the
# other example, but it includes some basic performance tweaks to make things run a lot faster:
# 1. Process each video frame at 1/4 resolution (though still display it at full resolution)
# 2. Only detect faces in every other frame of video.
# PLEASE NOTE: This example requires OpenCV (the `cv2` library) to be installed only to read from your webcam.
# OpenCV is *not* required to use the face_recognition library. It's only required if you want to run this
# specific demo. If you have trouble installing it, try any of the other demos that don't require it instead.
# Get a reference to webcam #0 (the default one)
video_capture = cv2.VideoCapture(0)
# Load a sample picture and learn how to recognize it.
obama_image = face_recognition.load_image_file("obama.jpg")
obama_face_encoding = face_recognition.face_encodings(obama_image)[0]
# Load a second sample picture and learn how to recognize it.
biden_image = face_recognition.load_image_file("biden.jpg")
biden_face_encoding = face_recognition.face_encodings(biden_image)[0]
# Create arrays of known face encodings and their names
known_face_encodings = [
obama_face_encoding,
biden_face_encoding
]
known_face_names = [
"Barack Obama",
"Joe Biden"
]
# Initialize some variables
face_locations = []
face_encodings = []
face_names = []
process_this_frame = True
while True:
# Grab a single frame of video
ret, frame = video_capture.read()
# Only process every other frame of video to save time
if process_this_frame:
# Resize frame of video to 1/4 size for faster face recognition processing
small_frame = cv2.resize(frame, (0, 0), fx=0.25, fy=0.25)
# Convert the image from BGR color (which OpenCV uses) to RGB color (which face_recognition uses)
rgb_small_frame = small_frame[:, :, ::-1]
# Find all the faces and face encodings in the current frame of video
face_locations = face_recognition.face_locations(rgb_small_frame)
face_encodings = face_recognition.face_encodings(rgb_small_frame, face_locations)
face_names = []
for face_encoding in face_encodings:
# See if the face is a match for the known face(s)
matches = face_recognition.compare_faces(known_face_encodings, face_encoding)
name = "Unknown"
# # If a match was found in known_face_encodings, just use the first one.
# if True in matches:
# first_match_index = matches.index(True)
# name = known_face_names[first_match_index]
# Or instead, use the known face with the smallest distance to the new face
face_distances = face_recognition.face_distance(known_face_encodings, face_encoding)
best_match_index = np.argmin(face_distances)
if matches[best_match_index]:
name = known_face_names[best_match_index]
face_names.append(name)
process_this_frame = not process_this_frame
# Display the results
for (top, right, bottom, left), name in zip(face_locations, face_names):
# Scale back up face locations since the frame we detected in was scaled to 1/4 size
top *= 4
right *= 4
bottom *= 4
left *= 4
# Draw a box around the face
cv2.rectangle(frame, (left, top), (right, bottom), (0, 0, 255), 2)
# Draw a label with a name below the face
cv2.rectangle(frame, (left, bottom - 35), (right, bottom), (0, 0, 255), cv2.FILLED)
font = cv2.FONT_HERSHEY_DUPLEX
cv2.putText(frame, name, (left + 6, bottom - 6), font, 1.0, (255, 255, 255), 1)
# Display the resulting image
cv2.imshow('Video', frame)
# Hit 'q' on the keyboard to quit!
if cv2.waitKey(1) & 0xFF == ord('q'):
break
# Release handle to the webcam
video_capture.release()
cv2.destroyAllWindows()
Traceback (most recent call last):
File "/home/admin/PycharmProjects/faces/main.py", line 19, in <module>
obama_face_encoding = face_recognition.face_encodings(obama_image)[0]
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/admin/.local/lib/python3.12/site-packages/face_recognition/api.py", line 213, in face_encodings
raw_landmarks = _raw_face_landmarks(face_image, known_face_locations, model)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/admin/.local/lib/python3.12/site-packages/face_recognition/api.py", line 156, in _raw_face_landmarks
face_locations = _raw_face_locations(face_image)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/admin/.local/lib/python3.12/site-packages/face_recognition/api.py", line 105, in _raw_face_locations
return face_detector(img, number_of_times_to_upsample)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
RuntimeError: Unsupported image type, must be 8bit gray or RGB image.
same problem
is there any find solution?
the same problem wuth dlib face lanmarks dlib.get_frontal_face_detector(gray,1)
ERROR:
hog_face_detector(gray,1)
^^^^^^^^^^^^^^^^^^^^^^^^^
RuntimeError: Unsupported image type, must be 8bit gray or RGB image.
a year ago, it was working neatly
for me, I downgraded numpy to 1.4 and imported it dlib is not working well with numpy 2.0 version
credit for: https://stackoverflow.com/a/78638053/17027049
Same issue, I downgraded numpy to version 1.26.4 and it worked again Good spot @Noor161 !
so i tried downgrading to numpy version 1.4 but it is giving me some error cant install it or something i also tried it installing manualy by downloading numpy1.4 file but still same error need help currently have these libraries installed
@Hamza-Zartaj have you tried numpy 1.26.4?
change this:
rgb_small_frame = small_frame[:, :, ::-1]
to
rgb_small_frame = cv2.cvtColor(small_frame, cv2.COLOR_BGR2RGB)
numpy==1.26.3 opencv-python==4.9.0.80
@Hamza-Zartaj have you tried numpy 1.26.4?
it was not installing i tried installing it. it had some error with latest python 3.12.4 so i was wondering if i need to downgrade my python version to something like 3.11.8 should i change python version?
same problem. It looks like old error rises from the grave
I downgraded my numpy from 2.0.0 to 1.26.4 solved my problem.
Which python version u using for numpy 1.26.4 I tried downgrading numpy but it give some error something to do with latest python version So should I downgrade to python 3.11 or more lower like 3.9
On Tue, 25 Jun 2024 at 8:05 PM, Ogun Serif Onargan @.***> wrote:
On 16th June, numpy v2.0.0 has been released. I downgraded my numpy from 2.0.0 to 1.26.4 solved my problem.
— Reply to this email directly, view it on GitHub https://github.com/ageitgey/face_recognition/issues/1573#issuecomment-2189206485, or unsubscribe https://github.com/notifications/unsubscribe-auth/BFFISJQI2XSJ6OSTPEY5TF3ZJGBKHAVCNFSM6AAAAABJXE775SVHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMZDCOBZGIYDMNBYGU . You are receiving this because you were mentioned.Message ID: @.***>
@Hamza-Zartaj I was using Python 3.10.5
change this:
rgb_small_frame = small_frame[:, :, ::-1]torgb_small_frame = cv2.cvtColor(small_frame, cv2.COLOR_BGR2RGB)numpy==1.26.3 opencv-python==4.9.0.80
@zoldaten Thank you! it worked.
I have moved to these versions numpy==1.26.3 opencv-python==4.9.0.80 but it is still throwing this error to me, kindly help Error: subjects = detect(gray) ^^^^^^^^^^^^ RuntimeError: Unsupported image type, must be 8bit gray or RGB image.
Yep, downgraded numpy to 1.26.4 and its working..
My question is what is the relation between numpy version and the error: "RuntimeError: Unsupported image type, must be 8bit gray or RGB image."?
It's probably because openCV array structures are converted to numpy arrays ? But why didn't I get a better exception message?
Can you tell me, whats your python version?
@dwaipayanddg its 3.11.3
thank you so much. I changed my bumpy to 1.26.4 and reloaded my requirements.txt. Presto.
use numpy==1.26.4 can complete
@Hamza-Zartaj have you tried numpy 1.26.4?
it was not installing i tried installing it. it had some error with latest python 3.12.4 so i was wondering if i need to downgrade my python version to something like 3.11.8 should i change python version?
yes downgrde your ython version, else dlib would not work
j'utilise la version python 3.12.4 et j'ai installé face_recognition version 1.3.0 apres l'execution du script ,je reçois une erreur comme celle ci: RuntimeError: Unsupported image type, must be 8bit gray or RGB image.
svp aidez moi
Downgrading worked for me
pip uninstall numpy
pip install numpy==1.26.4
Downgrading worked for me, but is there a fix in the works for face recognition/dlib to work with numpy 2.0? Not sure which project would be responsible for this fix- I imagine it's face recognition?
change this:
rgb_small_frame = small_frame[:, :, ::-1]torgb_small_frame = cv2.cvtColor(small_frame, cv2.COLOR_BGR2RGB)numpy==1.26.3 opencv-python==4.9.0.80
@zoldaten 100% worked bruh... Thank you so much ❤️
Python version: 3.10.x
Related: https://github.com/davisking/dlib/issues/1134
Related: https://github.com/davisking/dlib/issues/1134
Use Python 3.10.X version with a virtual environment to solve this error.
Check out: https://github.com/ramprasathmk/Automatic-Attendance-System-for-Face-Recognition/blob/master/Installation.md
@dwaipayanddg its 3.11.3
python3.10 works fine, ya
Same issue, I downgraded numpy to version 1.26.4 and it worked again Good spot @Noor161 !
thanks alot