dlib 人脸检测错误:不支持的图像类型,必须是 8 位灰度或 RGB 图像

问题描述 投票:0回答:3

我正在尝试通过首先检测脸部然后调整图像大小来从 Instagram 头像中裁剪出脸部。我正在读取存储在数据框中的所有图像,然后创建一个 numpy 数组。然后我正在运行一个正面检测器,它返回一个对象,但是当我调用该对象时,它返回给我所述的错误。我尝试只提供彩色图像作为输入,但这不起作用,也没有尝试和例外。这是代码:

 df = pd.read_csv('/home/instaurls2.csv')
img_width, img_height = 139, 139
confidence = 0.8
#graph = K.get_session().graph
data1 = np.array([io.imread(row[1]) for row in df.itertuples()])
#print(data1)
detector = dlib.get_frontal_face_detector()
print (detector)
dets=detector(data1,1) # **error arrives here**
print (dets)
output=None
for i, d in enumerate(dets):
    data1 = data1[d.top():d.bottom(), d.left():d.right()]
    data1 = resize(data1, (img_width, img_height))
    output = np.expand_dims(data1, axis=0)
print (output)
python image numpy face-detection dlib
3个回答
2
投票

Opencv 默认将图像读取为 BGR。

您可以使用cv2读取图像:

import cv2
cv2.imread(image_filepath)

0
投票

这对我有用:

image.astype('uint8')

0
投票

这是一个旧线程,但如果有人最近遇到过这个错误,这很可能是由于 Numpy 2.0 重大更新所致; https://numpy.org/devdocs/release/2.0.0-notes.html

这是几天前发布的,目前 Dlib 不支持它并抛出上述错误。我正在设置一个新的虚拟机,并花了几个小时研究为什么相同的代码在以前的虚拟机中有效,而在新的虚拟机中不起作用……希望 Dlib 很快就会发布支持此新版本的更新,但与此同时,如果您看到此错误 - 请使用较旧的 Numpy 版本 (1.X.X)

© www.soinside.com 2019 - 2024. All rights reserved.