手写数字图片识别实战
手写数字图片识别实战
- 通过sklearn的KNN邻近相似度,从而实战识别图片上的数字
1.数据导入与处理
import numpy as np
import matplotlib.pyplot as plt
from sklearn.neighbors import KNeighborsClassifier
- 先随便展示一张图片
#展示一张数图。
img_arr = plt.imread("./data/3/3_140.bmp")
img_arr.shape
plt.imshow(img_arr)
- 读取图片并保存在列表中
feature = []
target = []
for file in range(10):
for img in range(1,501):#./data/3/3_140.bmp
img_path = "./data/%s/%s_%s.bmp"%(str(file),str(file),str(img))
img_arr = plt.imread(img_path)
feature.append(img_arr)
target.append(file)
- 将列表形式的样本转换成数组形式:
feature = np.array(feature)
target = np.array(target)
- 将三维feature变成二维 28*28=784
feature = feature.reshape((5000,784))
feature.shape
- 样本数据进行打乱,但target,feature打乱顺序是相同的
np.random.seed(10)
np.random.shuffle(feature)
np.random.seed(10)
np.random.shuffle(target)
2.训练模型
#训练集4980,测试集数据20
x_train = feature[:4980]
y_train = target[:4980]
x_test = feature[4980:]
y_test = target[4980:]
- 创建模型并训练
#创建训练模型
#n_neighbors可以适当调整
knn = KNeighborsClassifier(n_neighbors=5)
knn.fit(x_train,y_train)
3.验证模型
print('模型分类的结果:',knn.predict(x_test))
print('真实的分类结果:',y_test)
"""
模型分类的结果: [6 6 4 4 0 8 5 8 2 2 4 3 3 9 4 1 6 2 9 2]
真实的分类结果: [6 6 4 4 0 8 5 8 2 2 4 3 3 9 4 2 6 2 9 2]
"""
#倒数第5个不一样,剩下都一样。
4.测试图片数字
- 让模型对外部的一张图片进行识别
ex_img_arr = plt.imread('./数字.jpg')
plt.imshow(ex_img_arr)
- 将数字6裁剪出来
img_two_arr = ex_img_arr[80:150,140:190,:]
plt.imshow(img_two_arr)
img_two_arr.shape
"""
(70, 50, 3)
"""
- 降维处理
img_two_arr = img_two_arr.mean(axis=2)
- 对图片进行像素等比例压缩
import scipy.ndimage as ndimage
img_two_arr = ndimage.zoom(img_two_arr,zoom=(28/70,28/50))
- 展示等比压缩图片
plt.imshow(img_two_arr)
img_two_arr.shape#(28, 28)
img_two_arr = img_two_arr.reshape((1,-1))#(1, 784)
- 结果验证
knn.predict(img_two_arr)
"""
array([6])
"""
github源码和数据:点击此处
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库