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

Posted

技术标签:

【中文标题】dlib 人脸检测错误:不支持的图像类型,必须是 8 位灰度或 RGB 图像【英文标题】:dlib face detection error : Unsupported image type, must be 8bit gray or RGB image 【发布时间】:2018-07-23 16:28:01 【问题描述】:

我正在尝试通过首先检测面部然后调整图像大小来从 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)

【问题讨论】:

我怀疑这是您的 data1 数组的格式。当它应该是整数或字节时,它是浮点数还是字符串? @Pam [[[[ 34 34 34] [ 35 35 35] [ 40 40 40] ... [ 8 8 8] [ 12 12 12] [ 12 12 12]] [[ 39 39 39] [ 30 30 30] [ 25 25 25] ... [ 11 11 11] [ 1 1 1] [ 5 5 5]] [[ 54 54 54] [ 44 44 44] [ 34 34 34] .. . [ 32 32 32] [ 9 9 9] [ 0 0 0]] ...这就是我的data1的样子,我猜它是int而不是string或float 我认为这可能是一个太多的方括号 []。三个通道,R、G 和 B;一个高度;一个宽度组成三组方括号。 另外,您可以将它以“打包”形式存在(rgb、rgb、rgb ......)。我不知道 dlib 是否需要平面 (rrrr...., gggg...., bbbb....)。不过可能不是问题。 @Pam 可能是什么错误,我该如何纠正/ 【参考方案1】:

Opencv 默认将图像读取为 BGR。

您可以使用 cv2 读取图像:

import cv2
cv2.imread(image_filepath)

【讨论】:

以上是关于dlib 人脸检测错误:不支持的图像类型,必须是 8 位灰度或 RGB 图像的主要内容,如果未能解决你的问题,请参考以下文章

基于Dlib人脸检测(图像视频)demo

人脸检测——Dlib学习Face_detector_example

Dlib 人脸检测不适用于灰度图像

如何在 dlib python 中保存/裁剪检测到的人脸

在 dlib 中获取检测到人脸的概率[关闭]

opencv联合dlib人脸检测例子