可以将 cv2 blobFromImage 传递给 keras 模型预测吗?

时间:2021-03-18 09:37:44

标签: python numpy tensorflow opencv keras

我正在 TensorFlow 和 openCV 上制作应用程序。

我知道您可以将 keras 模型(.h5 或 .hdf5)传递给 .pb,从而使用 cv2 读取它。但我想知道 cv.blobFromImage 是否可以用于 Keras model.predict(...) 方法。

如果我尝试直接传递它,则会出现错误。由于 blob 的返回顺序与 keras 模型中所需的顺序不同。

例如:

frameSrc = cv2.imread('example.jpg')

# Correct Keras model input.
frameDst = cv2.resize(frameSrc.copy(), (256, 256), interpolation=cv2.INTER_LINEAR)
frameDst = cv2.cvtColor(frameDst, cv2.COLOR_BGR2RGB)
frameDst = np.array([frameDst])
frameDst = frameDst / 255.
# frameDst.shape = (1, 256, 256, 3)
        
# cv2 blob.
blob = cv2.dnn.blobFromImage(frameSrc.copy(), scalefactor=1/255., size=(256, 256), swapRB=False)
# blob.shape = (1, 3, 256, 256)

1 个答案:

答案 0 :(得分:1)

考虑到 TF 后端,Keras 期望格式为 (batch_size, height, width, number_of_channels)

所以 blob.shape 需要采用这种格式,而不是像上面看到的那样采用 (batch_size,channels,height,width)

您可以交换轴以获得合适的输入格式:

blob = np.transpose(blob,(0,2,3,1))
blob.shape (1,256,256,3)