使用keras内置的模型进行图片预测
keras 模块里面为我们提供了一个预训练好的模型,也就是开箱即可使用的图像识别模型
趁着国庆假期有时间我们就来看看这个预训练模型如何使用吧
可用的模型有哪些?
根据官方文档目前可用的模型大概有如下几个
- VGG16
- VGG19
- ResNet50
- InceptionResNetV2
- InceptionV3
它们都被集成到了keras.applications 中
模型文件从哪来
当我们使用了这几个模型时,keras就会去自动下载这些已经训练好的模型保存到我们本机上面
模型文件会被下载到 ~/.keras/models/并在载入模型时自动载入
各个模型的信息:
如何使用预训练模型
使用大致分为三个步骤
- 导入所需模块
- 找一张你想预测的图像将图像转为矩阵
- 将图像矩阵放到模型中进行预测
关于图像矩阵的大小
VGG16,VGG19,ResNet50 默认输入尺寸是224x224
InceptionV3, InceptionResNetV2 模型的默认输入尺寸是299x299
代码demo
假设我现在有一张图片
我需要使用预训练模型来识别它
那我们就按照上面的步骤
第一步导入模块
from keras.applications import VGG16
from keras.applications import VGG19
from keras.applications import ResNet50
from keras.applications import InceptionV3
from keras.applications import InceptionResNetV2
第二步将图像转为矩阵
这里我们需要使用keras.preprocessing.image
里面img_to_array
来帮我们转
image = cv2.imread(img)image = cv2.resize(image, self.dim)image = img_to_array(image)image = np.expand_dims(image, axis=0)
第三步 将图像矩阵丢到模型中进行预测
predict = model.predict(preprocess)
decode_predict = decode_predictions(predict)
完整代码如下
- 配置文件
- 获取配置文件的模块
- 图像预测模块
配置文件
[image]
image_path=/home/fantasy/Pictures/cat.jpg
[model]
model=vgg16
[weights]
weight=imagenet
获取配置文件的模块
import configparsercf = configparser.ConfigParser()cf.read("configs.cnf")def getOption(section, key):return cf.get(section, key)
图像预测模块以及主要实现
# keras 提供了一些预训练模型,也就是开箱即用的 已经训练好的模型
# 我们可以使用这些预训练模型来进行图像识别,目前的预训练模型大概可以识别2.2w种类型的东西
# 可用的模型:
# VGG16
# VGG19
# ResNet50
# InceptionResNetV2
# InceptionV3
# 这些模型被集成到 keras.applications 中
# 当我们使用了这些内置的预训练模型时,模型文件会被下载到 ~/.keras/models/并在载入模型时自动载入
# VGG16,VGG19,ResNet50 默认输入尺寸是224x224
# InceptionV3, InceptionResNetV2 模型的默认输入尺寸是299x299# 使用内置的预训练模型的步骤
# step1 导入需要的模型
# step2 将需要识别的图像数据转换为矩阵(矩阵的大小需要根据模型的不同而定)
# step3 将图像矩阵丢到模型里面进行预测
# ----------------------------------------------------------------------------------
# step1
import cv2
import numpy as np
from getConfig import getOption
from keras.applications import VGG16
from keras.applications import VGG19
from keras.applications import ResNet50
from keras.applications import InceptionV3
from keras.applications import InceptionResNetV2
from keras.applications import imagenet_utils
from keras.applications.imagenet_utils import decode_predictions
from keras.preprocessing.image import load_img
from keras.preprocessing.image import img_to_array
from keras.applications.inception_v3 import preprocess_inputclass ImageTools(object):"""使用keras预训练模型进行图像识别"""def __init__(self, img, model, w):self.image = imgself.model = modelself.weight = w# step2def image2matrix(self, img):"""将图像转为矩阵"""image = cv2.imread(img)image = cv2.resize(image, self.dim)image = img_to_array(image)image = np.expand_dims(image, axis=0)return image@propertydef dim(self):"""图像矩阵的维度"""if self.model in ["inceptionv3", "inceptionresnetv2"]:shape = (299, 299)else:shape = (224, 224)return shape@propertydef Model(self):"""模型"""models = {"vgg16": VGG16,"vgg19": VGG19,"resnet50": ResNet50,"inceptionv3": InceptionV3,"inceptionresnetv2": InceptionResNetV2}return models[self.model]# step3 def prediction(self):"""预测"""model = self.Model(weights=self.weight)if self.model in ["inceptionv3", "inceptionresnetv2"]:preprocess = preprocess_input(self.image2matrix(self.image))else:preprocess = imagenet_utils.preprocess_input(self.image2matrix(self.image))predict = model.predict(preprocess)decode_predict = decode_predictions(predict)for (item, (imgId, imgLabel, proba)) in enumerate(decode_predict[0]):print("{}, {}, {:.2f}%".format(item + 1, imgLabel, proba * 100))if __name__ == "__main__":image = getOption("image", "image_path")model = getOption("model", "model")weight = getOption("weights", "weight")tools = ImageTools(image, model, weight)tools.prediction()
运行起来时会将模型文件下载到本机,因此第一次运行会比较久(有可能出现的情况就是下载不了,被墙了)
我们来看看使用VGG16的模型预测输出的效果如何
最后如果大家需要使用其他模型时修改 配置文件的model 即可
以上就是keras预训练模型的使用啦,最后祝大家国庆节玩的愉快~
使用keras内置的模型进行图片预测相关推荐
- 关于微信内置浏览器,打开图片上传功能,调用的问题
关于微信内置浏览器,打开图片上传功能,调用的问题 前段时间,项目完结测试的时候,同事打开魅族手机测试,无意中发现一个奇葩的问题! 描述: 显示的是文件系统,列表式的,没有调用相机的功能图标,为什么呢? ...
- 微信内置浏览器无法使用input图片上传和lrz.bundle.js图片压缩插件
标题 微信内置浏览器无法使用input图片上传和lrz.bundle.js图片压缩插件 图片上传功能作为一个比较常见的功能,有时候需要在微信内置浏览器里打开,但是有些型号的手机会出现打不开的现象,点击 ...
- cocoscreator实现微信内置浏览器点击图片识别图中二维码
最近在做一个微信内置浏览器的小游戏,小游戏中有一个二维码,需要用户点击长按二维码弹出系统识别二维码按钮. 下面是解决步骤: 1.cocoscreator是如何实现在浏览器中渲染游戏画面的 看图中箭头处 ...
- html微信内置浏览器点击图片放大,双指缩放,附源码(自测可用)
本人用的是vue框架 引用微信的JS <script type="text/javascript" src="http://res.wx.qq.com/open/j ...
- 使用微信内置浏览器预览图片
在微信H5开发中预览图片,可以使用其他的一些图片预览插件,但是这样却不能把其中的某张图片发送给好友.对于 这种情况可以使用微信内置浏览器图片预览功能,就可以解决这个问题.不说废话直接看代码: 1.首先 ...
- matlab中内置D-STATCOM模型
在matlab命令行中输入上图:power_dstatcom_pwm,回车运行 就会出现下面这个模型,然后运行可以看波形
- keras从入门到放弃(十六)内置预训练网络VGG
什么是预训练网络 一个常用.高效的在小图像数据集上深度学习的方法就是利用预训练网络.一个预训练网络只是简单的储存了之前在大的数据集训练的结果,通常是大的图像分类任务.如果原始的数据集已经足够大,足够一 ...
- Paddle内置的网络模型
简 介: 本文根据文档 模型组网 中给出的信息,总结了在Paddle建立常见到的网络的三种方法. 关键词: paddle,net,内置网络 #mermaid-svg-Wdzr3isBaQEmNZ95 ...
- 深度学习系列笔记——贰 (基于Tensorflow2 Keras搭建的猫狗大战模型 三)
深度学习系列笔记--贰 (基于Tensorflow Keras搭建的猫狗大战模型 一) 深度学习系列笔记--贰 (基于Tensorflow Keras搭建的猫狗大战模型 二) 前面两篇博文已经介绍了如 ...
最新文章
- Spark Machine Learning 03 Spark上数据的获取、处理与准备
- 802.11概述及帧结构分析
- 实现MVC模式的Web应用程序
- 查询score中选学多门课程的同学中分数为非最高分成绩的记录。
- 几个OpenSource的源代码管理软件
- jquery.cookie.js 使用小结
- [-1]是也乎,( ̄▽ ̄)
- 向指定的服务器端口发送信息,向指定服务器的指定端口发送UDP包
- QLV格式的视频怎么在线转化成MP4
- 实习成长之路:下层应用调不到上层方法怎么办?GoogleGuava事件上报来打配合
- 当下学习Linux该选择哪个产品?
- C语言题目——三子棋游戏
- 面试题:ES和Solr的区别是什么?
- 材料科学需要用计算机吗,计算机在材料科学中的运用分析
- Windows2008虚拟机扩容C盘
- 洞察·分析·管理 | 解读良品铺子的客户体验管理三部曲
- Nginx的rewrite(地址重定向)剖析
- java 支付宝 H5支付
- pythonista模板_Python——Code Like a Pythonista: Idiomatic Python
- Win32串口API