前言
上文我们使用Microsoft.ML
做了字母和数字的识别,效果还可以。
但是OpenCV的KNN在识别图像上效果会更好,但是C#上不支持KNN模型的训练,所以本文使用Python来训练。
阿里针对教育的OCR识别
环境配置参考
https://www.psvmc.cn/article/2022-06-13-python-development-env.html
IDEA
IDEA中报错配置
idea no python interpreter configured for the module
File
=> Project Structure
=> PlatForm Settings
=> SDKs
点击 +
=> Add Python SDK...
我这里使用的虚拟环境,选择已存在的环境,可以根据名字判断环境。
Modules中也选择上面对应的SDK
添加依赖
项目目录下初始化
1 | pipenv install |
安装OpenCV
1 | pipenv install opencv-python==4.5.4.60 |
KNN
步骤
准备数据:准备特征和标签数据,并训练 KNN 模型。
保存和加载模型:将模型保存到文件中,然后从文件中加载模型。
测试数据:定义需要进行预测的测试数据。
进行预测:使用
findNearest()
方法进行预测。该方法返回四个值:
ret
:返回值(通常是 KNN 结果的准确性)results
:预测结果的标签neighbors
:最近邻的标签dist
:每个测试样本到其最近邻的距离
获取预测标签:
results
是一个二维数组,你可以通过flatten()
方法将其转化为一维数组,以便直接获取预测的标签值。
模型训练
1 | import cv2 |
注意
在 OpenCV 的 KNN 模型中:
特征数据必须是
numpy.ndarray
类型。数据的类型应该是np.float32
。这是因为 KNN 算法要求特征数据要以浮点数格式表示。
labels
参数必须是整数类型 (int32
)。这意味着标签不能是字符串或者其他非整数类型。
模型预测
1 | # 加载模型 |
结果是这样的
预测结果的标签: [0. 0.]
预测结果的标签(字符串形式): [‘cat’, ‘cat’]
图片识别工具类
我们可以把参与训练的图片都转为20*20的大小,这样输入的数据都是400长度的数组。
1 | import csv |
读取TSV文件
1 | import csv |