python实现识别手写数字实现识别手写数字 python图像识别算法图像识别算法
写在前面写在前面
这一段的内容可以说是最难的一部分之一了,因为是识别图像,所以涉及到的算法会相比之前的来说比较困难,所以我尽量会
讲得清楚一点。
而且因为在编写的过程中,把前面的一些逻辑也修改了一些,将其变得更完善了,所以一切以本篇的为准。当然,如果想要直
接看代码,代码全部放在我的GitHub中,所以这篇文章主要负责讲解,如需代码请自行前往GitHub。
本次大纲本次大纲
上一次写到了数据库的建立,我们能够实时的将更新的训练图片存入CSV文件中。所以这次继续往下走,该轮到识别图片的
内容了。
首先我们需要从文件夹中提取出需要被识别的图片test.png,并且把它经过与训练图片相同的处理得到1×10000大小的向量。
因为两者之间存在微小的差异,我也不是很想再往源代码之中增加逻辑了,所以我就直接把增加待识别图片的函数重新写一个
命名为GetTestPicture,内容与GetTrainPicture类似,只不过少了“增加图片名称”这一个部分。
之后我们就可以开始进行正式图片识别内容了。
主要是计算待识别图片与所有训练图片的距离。当两个图片距离越近的时候,说明他们越相似,那么他们很有可能写的就是同
一个数。所以利用这个原理,我们可以找出距离待识别图像最近的几个训练图片,并输出他们的数字分别是几。比如说我想输
出前三个,前三个分别是3,3,9,那就说明这个待识别图片很有可能是3.
之后还可以对每一个位置加个权重,具体的就放在下一次再讲,本节内容已经够多了。
(第一篇文章之中我说过利用图片洞数检测。我尝试了一下,认为有些不妥,具体原因放在本文末。)
MAIN代码代码
所以直接把主要代码放上来,逻辑相对来说还是比较清晰的
import os
import OperatePicture as OP
import OperateDatabase as OD
import PictureAlgorithm as PA
import csv
##Essential vavriable 基础变量
#Standard size 标准大小
N = 100
#Gray threshold 灰度阈值
color = 200/255
n = 10
#读取原CSV文件
reader = list(csv.reader(open('Database.csv', encoding = 'utf-8')))
#清除读取后的第一个空行
del reader[0] #读取num目录下的所有文件名
fileNames = os.listdir(r"./num/")
#对比fileNames与reader,得到新增的图片newFileNames
newFileNames = OD.NewFiles(fileNames, reader)
print('New pictures are: ', newFileNames)
#得到newFilesNames对应的矩阵
pic = OP.GetTrainPicture(newFileNames)
#将新增图片矩阵存入CSV中
OD.SaveToCSV(pic, newFileNames)
#将原数据库矩阵与新数据库矩阵合并
pic = OD.Combination(reader, pic)
#得到待识别图片
testFiles = os.listdir(r"./test/")
testPic = OP.GetTestPicture(testFiles)
#计算每一个待识别图片的可能分类
result = PA.CalculateResult(testPic, pic)
for item in result:
for i in range(n):
评论1
最新资源