我正在 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)
答案 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)