import os
import numpy as np
from sklearn.neighbors import KNeighborsClassifier
from sklearn.model_selection import train_test_split
import cv2
#需要识别的图片的地址
path_img = "./test.jpg"
#knn需要的资源地址
path = "./trainingDigits"
files = os.listdir(path)
data = []
target = []
#将数据读取到data中和target中去
for file in files:
target.append(file[0])
file_path = path + "/" + file
f = open(file_path, "r")
txt = f.read()
text = []
for t in txt:
if t == '\n':
continue
text.append(int(t))
data.append(text)
#转换数据类型
target = np.array(target)
target = target.astype(int)
data = np.array(data)
#将数据传输给机器
knn = KNeighborsClassifier()
x, x_test, y, y_test = train_test_split(data, target, test_size=0.1)
knn.fit(x, y)
# end = knn.predict(x_test)
# print(list(end))
# print(list(y_test))
#预测区代码
img_txt = []
#加载图片到img中
img = cv2.imread(path_img)
#将图片转换为32x32像素
img = cv2.resize(img ,(32,32))
#将图像二值化
img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
img[img <= 150] = 0
img[img > 150] = 255
# print(img)
#将图片转换为上方机器训练格式的数据
for i in img[:,]:
for x in i:
if 255 == x:
img_txt.append(0)
else:
img_txt.append(1)
#格式转化
img_txt = [img_txt]
#预测
end = knn.predict(img_txt)
print(end)
#显示图片
# cv2.imshow("img", img)
# cv2.waitKey(0)
图片的大小推荐为32x32左右(代码会自动将图片修改为32x32)
代码需要的机器学习资源:https://download.csdn.net/download/qq_58419337/87581726
测试图片:
运行结果: