本文使用keras中inception_v3预训练模型识别图片。结合官方源码,如下内容。
其中,
- 数据输入借助opencv-python,
- 程序运行至
model=InceptionV3()
时按需(如果不存在就)下载模型训练数据,你也可以(分析源码keras\applications\inception_v3.py
)在网址离线下载并移动至C:\Users\用户名\.keras\models
下。
- 所用
imagenet_class_index.json
(分析源码:keras\applicationsimagenet_utils.py
)需要到网址下载。
- 所用测试图片为博客头像
from keras.applications.inception_v3 import InceptionV3
import cv2
import numpy as np
import json
pre_x = []
input = cv2.imread('../data/cat.jpg')
input=cv2.resize(input, (299, 299))
input=cv2.cvtColor(input, cv2.COLOR_BGR2RGB)
pre_x.append(input) #input一张图片
pre_x=np.array(pre_x)
model=InceptionV3()
# model.summary()
preds=model.predict(pre_x/255.0)
with open('../data/imagenet_class_index.json') as f:
js = json.load(f)
for p in preds: #遍历每个input
s= [(js[str(i)],p[i]) for i in p.argsort()[-1:-4:-1]] #输出最大3个
输出:
[([‘n02112018’, ‘Pomeranian’], 0.81736), ([‘n02085620’, ‘Chihuahua’], 0.066418365), ([‘n02509815’, ‘lesser_panda’], 0.003906726)]
官网教程(只需要提供测试图片,如上会联网下载)代码:
from keras.applications.inception_v3 import InceptionV3
import numpy as np
from keras.applications.inception_v3 import preprocess_input
from keras.applications.inception_v3 import decode_predictions
from keras.preprocessing import image
model=InceptionV3()
# model.summary()
# 按照 InceptionV3 模型的默认输入尺寸
img = image.load_img('../data/rotman.jpg', target_size=(299, 299))
# 提取特征
x = image.img_to_array(img)
x = np.expand_dims(x, axis=0)
x = preprocess_input(x)
preds = model.predict(x)
print('Predicted:', decode_predictions(preds, top=3)[0])
Predicted: [(‘n02112018’, ‘Pomeranian’, 0.7385136), (‘n02085620’, ‘Chihuahua’, 0.13314979), (‘n02086079’, ‘Pekinese’, 0.0047504483)]
两者输出差别原因如图片缩放插值方式(PIL和opencv),归一化方式(preprocess_input)不同等。