我正在构建一个人脸检测器,但我在调整捕获帧的大小以匹配模型的大小方面遇到了挑战,因此出现以下错误
Im building a face detector but Im having a challenge resizing the captured frame to match that of the model hence the error below
这是产生错误的代码
这是我模型的基础结构。我正在导入 MobileNetV2,但我遗漏了顶层。
baseModel = MobileNetV2(weights="imagenet", include_top=False, input_tensor=Input(shape=(224, 224, 3)))
然后我现在正在用opencv创建一个人脸检测器。人脸检测器抓拍人脸,模型预测人脸是否戴口罩。
下面这一行产生了错误,因为我没有将捕获的图像帧的大小调整为模型输入的适当大小。
for (x,y,w,h) in faces:
face_img = grayscale_img[y:y+w,x:x+w]
resized_img = cv2.resize(face_img,(56,56))
normalized_img = resized_img/255.0
reshaped_img = np.reshape(normalized_img,(224, 224, 3))
result=model.predict(reshaped_img)
生成的错误如下
ValueError: 无法将大小为 3136 的数组重塑为形状 (224,224,3)
重塑此 img 的正确方法是什么?谢谢
尽管没有足够的像素来构成 224x224x3 图像,但该错误看起来数组可能只是一维的。
如果面部图像是灰度的,那么您将无法将其整形为 3 个通道,您必须将其复制到其他 3 个通道:
grayscale_img = grayscale_img[y:y+w,x:x+w]
face_img = np.stack([grayscale_img,grayscale_img,grayscale_img], axis= -1)## three channels
或者将模型的顶部转换为单个通道,可能(我不确定)在创建模型时使用以下方法:
input_tensor=Input(shape=(224, 224, 1)
然后您可以使用 opencv 或 np:
调整图像的宽度和高度
resized_img = cv2.resize(face_img, (224,224)) ## opencv
MobileNetv2 需要在 (-1,1) 之间归一化因此:
normalized_img = resized_img/128 -1
您可能想查看:
如果您的灰度图像非常小,您可能想尝试调整模型以接受较小的图像而不是放大它们
这是产生错误的代码
这是我模型的基础结构。我正在导入 MobileNetV2,但我遗漏了顶层。
baseModel = MobileNetV2(weights="imagenet", include_top=False, input_tensor=Input(shape=(224, 224, 3)))
然后我现在正在用opencv创建一个人脸检测器。人脸检测器抓拍人脸,模型预测人脸是否戴口罩。
下面这一行产生了错误,因为我没有将捕获的图像帧的大小调整为模型输入的适当大小。
for (x,y,w,h) in faces:
face_img = grayscale_img[y:y+w,x:x+w]
resized_img = cv2.resize(face_img,(56,56))
normalized_img = resized_img/255.0
reshaped_img = np.reshape(normalized_img,(224, 224, 3))
result=model.predict(reshaped_img)
生成的错误如下
ValueError: 无法将大小为 3136 的数组重塑为形状 (224,224,3)
重塑此 img 的正确方法是什么?谢谢
尽管没有足够的像素来构成 224x224x3 图像,但该错误看起来数组可能只是一维的。
如果面部图像是灰度的,那么您将无法将其整形为 3 个通道,您必须将其复制到其他 3 个通道:
grayscale_img = grayscale_img[y:y+w,x:x+w]
face_img = np.stack([grayscale_img,grayscale_img,grayscale_img], axis= -1)## three channels
或者将模型的顶部转换为单个通道,可能(我不确定)在创建模型时使用以下方法:
input_tensor=Input(shape=(224, 224, 1)
然后您可以使用 opencv 或 np:
调整图像的宽度和高度resized_img = cv2.resize(face_img, (224,224)) ## opencv
MobileNetv2 需要在 (-1,1) 之间归一化因此:
normalized_img = resized_img/128 -1
您可能想查看:
如果您的灰度图像非常小,您可能想尝试调整模型以接受较小的图像而不是放大它们