python学习—图像识别

这是我从

零基础

开始学习的图像识别,当然用的是容易上手的python来写,持续更新中,记录我学习python基础到图像识别应用的一步步过程和踩过的一些坑。最终实现得到自己的训练模型(h5或者pb模型),可随意更改需要识别的物品,只要有数据就行。(若有错误或问题,肯请指正)

安装编译环境

此前确保已经安装并配置好了Python环境,在此我选择了比较流行的pycharm,具体安装教程网上很多,也比较简单。

安装所需库

我是利用了anaconda命令安装的,本项目所需用的库为:

keras、numpy、tensorflow2.0(我的是GPU版本),

GPU版本速度快但安装起来比较麻烦。

导包

import os

from PIL import Image

import numpy as np

import matplotlib.pyplot as plt

import tensorflow as tf

from tensorflow.keras import datasets, layers, models

一、接下来就是处理你的图片数据集

在这里我只提供了需要的函数,若果是自己的数据学要修改其中的变量,包括图片路径、传入参数等。

1.转换图片像素,使其大小一致

def read_image(paths):

os.listdir(paths)

filelist = []

for root, dirs, files in os.walk(paths):

for file in files:

if os.path.splitext(file)[1] == ".jpg":

filelist.append(os.path.join(root, file))

return filelist

def im_xiangsu(paths):

for filename in paths:

try:

im = Image.open(filename)

newim = im.resize((128, 128))

newim.save('F:/CNN/test/' + filename[12:-4] + '.jpg')

print('图片' + filename[12:-4] + '.jpg' + '像素转化完成')

except OSError as e:

print(e.args)

2.图片数据转化为数组

def im_array(paths):

M=[]

for filename in paths:

im=Image.open(filename)

im_L=im.convert("L") #模式L

Core=im_L.getdata()

arr1=np.array(Core,dtype='float32')/255.0

list_img=arr1.tolist()

M.extend(list_img)

return M

3.准备训练数据

dict_label={0:'汽车',1:'饮料瓶'}

train_images=np.array(M).reshape(len(filelist_all),128,128)

label=[0]*len(filelist_1)+[1]*len(filelist_2)

train_lables=np.array(label) #数据标签

train_images = train_images[ ..., np.newaxis ] #数据图片

print(train_images.shape)#输出验证一下(400, 128, 128, 1)

4.构建神经网络并保存

model = models.Sequential()

model.add(layers.Conv2D(32, (3, 3), activation='relu', input_shape=(128, 128, 1)))

model.add(layers.MaxPooling2D((2, 2)))

model.add(layers.Conv2D(64, (3, 3), activation='relu'))

model.add(layers.MaxPooling2D((2, 2)))

model.add(layers.Conv2D(64, (3, 3), activation='relu'))

model.add(layers.Flatten())

model.add(layers.Dense(64, activation='relu'))

model.add(layers.Dense(2, activation='softmax'))#注意这里参数,我只有两类图片,所以是2.

model.summary() # 显示模型的架构

model.compile(optimizer='adam',

loss='sparse_categorical_crossentropy',

metrics=['accuracy'])

#epochs为训练多少轮、batch_size为每次训练多少个样本

model.fit(train_images, train_lables, epochs=5)

model.save('my_model.h5') #保存为h5模型

#tf.keras.models.save_model(model,"F:\python\moxing\model")#这样是pb模型

print("模型保存成功!")

看一下准确度,还可以,但由于数据集太少,有可能会出现过拟合情况。

二、用上面得到的模型预测随便一张图片

新建一个py,直接放完整代码

import os

from PIL import Image

import numpy as np

import tensorflow as tf

#导入图像数据

#测试外部图片

model= tf.keras.models.load_model('my_model.h5')

model.summary() #看一下网络结构

print("模型加载完成!")

dict_label={0:'汽车',1:'饮料瓶'}

def read_image(paths):

os.listdir(paths)

filelist = []

for root, dirs, files in os.walk(paths):

for file in files:

if os.path.splitext(file)[1] == ".jpg":

filelist.append(os.path.join(root, file))

return filelist

def im_xiangsu(paths):

for filename in paths:

try:

im = Image.open(filename)

newim = im.resize((128, 128))

newim.save('F:/CNN/test/' + filename[12:-4] + '.jpg')

print('图片' + filename[12:-4] + '.jpg' + '像素转化完成')

except OSError as e:

print(e.args)

def im_array(paths):

im = Image.open(paths[0])

im_L = im.convert("L") # 模式L

Core = im_L.getdata()

arr1 = np.array(Core, dtype='float32') / 255.0

list_img = arr1.tolist()

images = np.array(list_img).reshape(-1,128, 128,1)

return images

test='F:/CNN/test/' #你要测试的图片的路径

filelist=read_image(test)

im_xiangsu(filelist)

img=im_array(filelist)

#预测图像

predictions_single=model.predict(img)

print("预测结果为:",dict_label[np.argmax(predictions_single)])

#这里返回数组中概率最大的那个

print(predictions_single)

最后结果

数组内的两个值分别表示为汽车和瓶子的概率大小。

三、总结

由于剩余时间有限,本项目用了两类图片汽车和瓶子进行训练预测,每类图片200张,共400张,所以很有可能出现过拟合,但增加数据集会在处理图片时耗费大量时间,所以我们尽量做个折中。一类几千张差不多就行。

图片数据不够的话可以扩充。

步骤:

1、调用上述函数,处理图片,我是把的所有图片的像素大小改成了128*128,

对应input_shape=(128, 128, 1)。

2、图片数据转成数组。

3、准备训练数据(train_images, train_lables)。

4、构建神经网络并保存模型

最后附一张我调用函数的流程:

python图像分类需要什么环境_Python学习简单图像识别分类,python相关推荐

  1. python学习-简单图像识别分类

    python学习-图像识别 这是我从零基础开始学习的图像识别,当然用的是容易上手的python来写,持续更新中,记录我学习python基础到图像识别应用的一步步过程和踩过的一些坑.最终实现得到自己的训 ...

  2. python主要学哪些课程_Python学习课程大纲自学Python参考

    第一阶段: Python 环境配置. 1 . Python 的历史和它的哲学思想. 2 . Python 开发环境安装与配置. (Linux 系统安装配置, Windows 平台配 置 ) 3 . P ...

  3. 以下()不是python的数值运算操作符_Python学习(三)——Python的运算符和数值、字符的类中方法...

    Python开发IDE PyCharm,eclipse PyCharm的基础用法 全部选中后 Ctrl+?全部变为注释 运算符 结果为值的运算符 算术运算符: + - * / % // ** 赋值运算 ...

  4. python语言基础项目报告书_Python语言基础01-初识Python

    1. Python简介 1.1 Python的历史 Python的创始人为吉多·范罗苏姆(荷兰语:Guido van Rossum) 1989年的圣诞节期间:吉多·范罗苏姆为了在阿姆斯特丹打发时间,决 ...

  5. python na不显示 占位_Python学习之路—Python基础(一)

    前言 在Python学习之路-初识Python一文中,简单的介绍了Python的基本信息,搭建了Python的基础运行环境,这篇文档将主要展现一些Python的入门必备内容,如有错误或遗漏的地方,欢迎 ...

  6. python中sn的意思_python学习笔记

    学习资料:<简明 Python 教程.pdf>Python是一种简单易学,功能强大的编程语言,它有高效率的高层数据结构,简单而有效地实现面向对象编程. 特点:1.简单 2.易学 3.开源, ...

  7. python做实时温度曲线图_Python学习记录 - matplotlib绘制温度变化折线图

    Python学习记录 - matplotlib绘制温度变化折线图 Python学习记录 - matplotlib绘制温度变化折线图 题目:列表a表示10点到12点每一分钟的气温,累计为2个小时,绘制折 ...

  8. python编程16章教程_Python学习笔记__16.2章 TCP编程

    # 这是学习廖雪峰老师python教程的学习笔记 Socket是网络编程的一个抽象概念.通常我们用一个Socket表示"打开了一个网络链接",而打开一个Socket需要知道目标计算 ...

  9. python的解释提示符为_python学习笔记01--基础

    一.解释型语言 python是一门解释型语言,这意味着: l编写过后的代码不用编译连接即可运行,节约调试时间 lpython的解释器在大多数系统中都有很好实现,所以编写的代码可以运行在任何系统中 但同 ...

最新文章

  1. 美媒评全球十家增速最快IT办事公司 当当网居首
  2. ​Nessus更新到8.9.1
  3. 19款绚丽实用的jQuery/CSS3侧边栏菜单
  4. Python pip安装命令
  5. java断言assert
  6. 日语学习-多邻国-平假名2
  7. 摄像头系统linux,Linux摄像头编程
  8. C++:DFS求最优路径
  9. JMeter中BeanShell的使用方法和常用语法
  10. 介绍一个Office画图工具--visio
  11. 4.6.2 IPv6的地址
  12. 新浪批量短网址生成php源码,最新新浪短网址API接口与短网址在线批量生成工具的使用方法...
  13. uniapp下拉框组件
  14. 商务邮箱一般用什么?办公最常用的邮箱功能是?
  15. 如何使用STM32和BLE收集SHT85传感器数据?
  16. Centos7设置阿里源
  17. 51单片机的蓝牙电子秤设计
  18. IDC FutureScape:全球智慧城市2019年预测 - 中国启示
  19. 英文数字汇总,KMGT,毫微纳
  20. 解决动易SiteWeaver6.8后台编辑器支持IE9/IE10/IE11浏览器的方法

热门文章

  1. TIOBE 4月编程语言排行榜:MATLAB即将跌出TOP 20
  2. 从开源爱好者到 Apache 董事,他花了 11 年
  3. 硅谷对“元宇宙”一无所知
  4. 力排众议,自由软件之父 RMS 正式回归 FSF!
  5. 美团败诉,赔偿饿了么 100 万元;华为 Mate X2 首发秒没;库克获 8 亿年终奖 | 极客头条...
  6. 从 TDSQL 演进史,探索国产数据库发展规律
  7. Deno 会取代 Node.js 吗?
  8. 腾讯再出新招!社交新产品“有记”已上线?
  9. 软件绿色联盟开发者大会惊喜不断,今日还有重磅议程!
  10. 华为全球最快 AI 训练集群 Atlas 900 诞生!