手写数字识别
功能概述
微信机器人接收到的手写数字图片,传送给已经经过机器学习训练过的knn分类器,进行预测,输出数字结果。
实现步骤
- 将手写数字图片转变为32*32的矩阵
因为机器学习的训练数据集是DBRHD数据集(训练数据集已上传到我的资料可以自行下载),图片均归一化为以数字为中心的32*32规格的矩阵:空白区域用0表示,字迹部分用1表示。所以首先就需要将手写数字图片转换成文本形式。
ps:DBRHD数据集我已上传到我的资源
from PIL import Image
import matplotlib.pylab as plt
import numpy as np
def picTo01(filename):
"""
将图片转化为32*32像素的文件,用0 1表示
:param filename:
:return:
"""
# 打开图片
img = Image.open(filename).convert('RGBA')
# 得到图片的像素值
raw_data = img.load()
# 将其降噪并转化为黑白两色
for y in range(img.size[1]):
for x in range(img.size[0]):
if raw_data[x, y][0] < 90:
raw_data[x, y] = (0, 0, 0, 255)
for y in range(img.size[1]):
for x in range(img.size[0]):
if raw_data[x, y][1] < 136:
raw_data[x, y] = (0, 0, 0, 255