前置import
'''
import os
import tempfile
from matplotlib import pyplot as plt
import numpy as np
import tensorflow as tf
tmpdir = tempfile.mkdtemp()
'''
介绍如何用keras检测自己找的图片
'''
file = tf.keras.utils.get_file(
"ocellated-electric-ray.jpg",#检测图片的名字
"https://img.diveadvisor.com/marine-life/ocellated-electric-ray.jpg") #这个是扫描图像的网络地址,可以自己从网络上找自己想检测的图片
img = tf.keras.utils.load_img(file, target_size=[224, 224])
plt.imshow(img)
plt.axis('off')
x = tf.keras.utils.img_to_array(img)
x = tf.keras.applications.mobilenet.preprocess_input(
x[tf.newaxis,...])
labels_path = tf.keras.utils.get_file(
'ImageNetLabels.txt',
'https://storage.googleapis.com/download.tensorflow.org/data/ImageNetLabels.txt')#文本库,模型里面可以识别出来的物体的名字,都在这里面了,可以根据这里面有的名字找检测图片
imagenet_labels = np.array(open(labels_path).read().splitlines())
pretrained_model = tf.keras.applications.MobileNet()#引入加载keras的模型
result_before_save = pretrained_model(x)
decoded = imagenet_labels[np.argsort(result_before_save)[0,::-1][:5]+1]
print("Result before saving:\n", decoded)#输出图片扫描出来的物体文本
'''
如何创建SavedModel格式文件并应用
'''
mobilenet_save_path = os.path.join(tmpdir, "mobilenet/1/")
tf.saved_model.save(pretrained_model, mobilenet_save_path)#模型的保存路径
loaded = tf.saved_model.load(mobilenet_save_path)
print(list(loaded.signatures.keys())) # ["serving_default"],
infer = loaded.signatures["serving_default"]
print(infer.structured_outputs)#查看模型的服务模式
labeling = infer(tf.constant(x))
print(pretrained_model.summary())但是之后输出summary发现是有predictions的,这就奇怪了。
[pretrained_model.output_names[0]]#加载获取模型的输出,按照官方文档看是这样,但是却报错了, labeling = infer(tf.constant(x))[pretrained_model.output_names[0]]KeyError: 'predictions'
decoded = imagenet_labels[np.argsort(labeling)[0,::-1][:5]+1]
print("Result after saving and loading:\n", decoded)#正常来说后面应该会正常输出,
'''
参考文章:https://tensorflow.google.cn/guide/saved_model?hl=zh-cn
https://blog.csdn.net/qq_37388085/article/details/115432865
后面了解到tf.saved_model和model.save的区别,还是需要注意学习一下