本文主要是记录课程设计,使用Python和TensorFlow平台进行图像训练识别。
识别结果:
代码:
import os
import sys
from PIL import Image
import numpy as np
import tensorflow.contrib.keras as k
import scipy.spatial.distance as distance
import pandas as pd
def resizeImage(inputImage, maxWidth, maxHeight):
originalWidth, originalHeight = inputImage.size
f1 = 1.0*maxWidth / originalWidth
f2 = 1.0*maxHeight / originalHeight
factor = min([f1,f2])
width = int(originalWidth*factor)
height = int(originalHeight*factor)
return inputImage.resize((width,height),Image.ANTIALIAS)
ifRestartT = False
roundCount = 20
learnRate = 0.01
trainDir="../imageData/animals"
trainResultPath = "./imageclassifySave/"
optimizerT = "RMSProp"
lossT = "categorical_crossentropy"
predictFile = None
metaData=pd.read_csv(trainDir+"meta.txt",header=None).as_matrix()
maxTypes = len(metaData)
print("maxTypes: %d" % maxTypes)
argt = sys.argv[1:]
print("argt:%s" % argt)
for v in argt:
if v == "-restart":
ifRestartT = True
if v.startswith("-round="):
roundCount = int(v[len("-round="):])
if v.startswith("-learnrate="):
learnRate = float(v[len("-learnrate="):])
if v.startswith("-dir="):
trainDir = v[len("-dir="):]
if v.startswith("-optimizer="):
optimizerT = v[len("-optimizer="):]
if v.startswith("-loss="):
lossT = v[len("-loss="):]
if v.startswith("-predict="):
predictFile=v[len("-predict="):]
print("predict file: %s" % predictFile)
xData =[]
yTrainData = []
fnData = []
predictAry = []
listt = os.listdir(trainDir)
lent = len(listt)
for i in range(lent):
v = listt[i]
if v.endswith(".jpg"):
print("processing %s ..." % v)
img = Image.open(trainDir + "/"+v)
w,h =img.size
img1 = resizeImage(img,512,512)
img2 = Image.new("RGB",(512,512),color = "white")
w1,h1 = img1.size
img2 = Image.new("RGB",(512,512),color ="white")
img2.paste(img1,box=(int((512 - w1)/2),int((512 -h1)/2)))
xData.append(np.matrix(list(img2.getdata())))
tmpv = np.full([maxTypes],fill_value=0)
tmpv[int(v.split(sep="_")[0]) - 1] = 1
yTrainData.append(tmpv)
fnData.append(trainDir+v)
rowCount = len(xData)
print("rowCount:%d" % rowCount)
xData = np.array(xData)
xData = np.reshape(xData,(-1,512,512,3))
yTrainData = np.array(yTrainData)
fnData = np.array(fnData)
if(ifRestartT is False) and os.path.exists(trainResultPath+".h5"):
print("Loading...")
model = k.models.load_model(trainResultPath+".h5")
model.load_weights(trainResultPath+"wb.h5")
else:
model=k.models.Sequential()
model.add(k.layers.Conv2D(filters=4,kernel_size=(3,3),input_shape=(512,512,3),data_format="channels_last",activation="relu"))
model.add(k.layers.Conv2D(filters=3,kernel_size=(3,3),data_format="channels_last",activation="relu"))
model.add(k.layers.Conv2D(filters=2,kernel_size=(2,2),data_format="channels_last",activation="selu"))
model.add(k.layers.Flatten())
model.add(k.layers.Dense(256,activation='tanh'))
model.add(k.layers.Dense(64,activation='sigmoid'))
model.add(k.layers.Dense(maxTypes,activation='softmax'))
model.compile(loss=lossT,optimizer=optimizerT,metrics=['accuracy'])
if predictFile is not None:
print("preparing...")
predictAry = model.predict(xData)
print("processing %s ..." % predictFile)
img = Image.open(predictFile)
img1=resizeImage(img,512,512)
w1, h1=img1.size
img2=Image.new("RGB",(512,512),color="white")
img2.paste(img1,box=(int((512 - w1)/2),int((512 - h1)/2)))
xi = np.matrix(list(img2.getdata()))
xi1 = np.array(xi)
xin = np.reshape(xi1,(-1,512,512,3))
resultAry = model.predict(xin)
print("x:%s, y:%s"%(xin,resultAry))
maxIdx = -1
maxPercent = 0
for i in range(maxTypes):
if resultAry[0][i]>maxPercent:
maxPercent = resultAry[0][i]
maxIdx = i
minDistance = 200
minIdx = -1
minFile = ""
for i in range(rowCount):
dist = distance.cosine(resultAry[0],predictAry[i])
if dist<minDistance:
minDistance = dist
minIdx = i
minFile = fnData[i]
print("图片类型: %s,推断正确概率: %10.6f%%, 最相识文件:%s, 相似度: %10.6f%%" %(metaData[maxIdx][1],maxPercent*100,minFile.split("")[-1],(1-minDistance)*100))
sys.exit(0)
model.fit(xData,yTrainData,epochs=roundCount,batch_size=lent,verbose=2)
print("saving...")
model.save(trainResultPath+".h5")
model.save_weights(trainResultPath +"wb.h5")
然后在pc控制台进入到工程目录:
然后在控制台输入指令:python 文件名 -predict=预测文件
完成后即可获取预测结果,我这里使用的训练图片比较少,所以预测结果可能有差异,在神经网络学习中,需要使用大量数据来进行训练。
相关知识
探秘花语:基于Python的智能花卉图像识别系统
人工智能毕业设计基于python的花朵识别系统
基于卷积神经网络的农作物病虫害识别系统
【花卉识别系统】Python+卷积神经网络算法+人工智能+深度学习+图像识别+算法模型
深度学习之基于Tensorflow卷积神经网络花卉识别系统
tensorflow识别花朵
深度学习基于python+TensorFlow+Django的花朵识别系统
【机器学习】花卉识别01
opencv深度学习昆虫识别系统图像识别 python
BP神经网络,bp神经网络预测模型,Python源码.rar.zip资源
网址: 基于Python和TensorFlow平台的神经网络进行图像识别 https://m.huajiangbk.com/newsview702193.html
上一篇: 【作业】第五章课后作业 |
下一篇: 28.K |