图片字母,数字识别技术
来源:未知 时间:2018-31-24 浏览次数:217次
图片字母,数字识别技术,本文主要讲解图片中字母以及数字的识别技术,主要应用有车牌号识别软件,钞票编码识别,税号识别等应用系统中,图片文字识别技术应用在很多重要的工业领域不仅能够节省重复的人力成而且能够增加识别归档的准确率一、主要思路
将降噪后的图片切成单个的字母或文字,同svm技术训练机器的识别能力,逐渐提高准确率
二、使用技术
-
- python3.5
-
python SDK版本
-
- PIL
-
图片处理库
-
- libsvm
-
开源的svm机器学习库
三、基本流程- 准备原始图片素材
- 图片预处理
- 图片字符切割
- 图片尺寸归一化
- 图片字符标记
- 字符图片特征提取
- 生成特征和标记对应的训练数据集
- 训练特征标记数据生成识别模型
- 使用识别模型预测新的未知图片集
- 达到根据“图片”就能返回识别正确的字符集的目标
四、图片字母,数字识别的实现
图片预处理
虽然目前的机器学习算法已经相当先进了,但是为了减少后面训练时的复杂度,同时增加识别率,很有必要对图片进行预处理,使其对机器识别更友好。
针对以上原始素材的处理步骤如下:
- 读取原始图片素材
- 将彩色图片二值化为黑白图片
- 去除背景噪点
二值化图片
主要步骤如下:
- 将RGB彩图转为灰度图
- 将灰度图按照设定阈值转化为二值图
image = Image.open(img_path) imgry = image.convert('L') # 转化为灰度图 table = get_bin_table() out = imgry.point(table, '1')
上面引用到的二值函数的定义如下:
1234567891011121314def
get_bin_table(threshold
=
140
):
"""
获取灰度转二值的映射table
:param threshold:
:return:
"""
table
=
[]
for
i
in
range
(
256
):
if
i < threshold:
table.append(
0
)
else
:
table.append(
1
)
return
table
- 1对某个 黑点 周边的九宫格里面的黑色点计数
- 2如果黑色点少于2个则证明此点为孤立点,然后得到所有的孤立点
- 3对所有孤立点一次批量移除。
模型训练
libSVM是一个机器学习的框架,需要查阅官方文档完成集成工作,主要是python与libsvm的集成
到这个阶段后,由于本文直接使用的是开源的 libSVM 方案,属于应用了,所以此处内容就比较简单的。只需要输入特征文件,然后输出模型文件即可。
可以搜索到很多相关中文资料
主要代码如下:
def train_svm_model(): """ 训练并生成model文件 :return: """ y, x = svm_read_problem(svm_root + '/train_pix_feature_xy.txt') model = svm_train(y, x) svm_save_model(model_path, model)