基于OPENCV的手写数字字符识别修改版 V3
- 格式:pdf
- 大小:641.77 KB
- 文档页数:12
如何使用计算机视觉技术进行手写文字识别计算机视觉技术的发展带来了许多令人惊叹的应用,其中之一就是手写文字识别。
通过使用计算机视觉技术,我们可以将手写的文字转换为可编辑和可搜索的数字文本。
这项技术在许多领域都有广泛的应用,包括文档扫描、自动化数据录入和手写识别等。
在本文中,我们将探讨如何使用计算机视觉技术进行手写文字识别。
首先,为了实现手写文字识别,我们需要选择合适的图像处理工具。
一种常用的工具是OpenCV(开源计算机视觉库),它提供了许多强大的图像处理函数和算法。
通过使用OpenCV,我们可以对图像进行预处理,以提高手写文字识别的准确性。
在进行手写文字识别之前,我们需要将手写的图像转换为数字格式。
这可以通过以下几个步骤来完成:第一步是图像预处理。
我们可以使用OpenCV的函数来对图像进行平滑处理和滤波,以去除图像中的噪声和干扰。
接下来,我们可以使用自适应阈值处理技术将图像二值化,以便更好地分离文字和背景。
第二步是特征提取。
在这一步骤中,我们需要提取图像中手写文字的关键特征,以便进行识别。
常用的特征提取方法包括灰度共生矩阵、方向梯度直方图(HOG)和局部二值模式(LBP)等。
这些方法可以帮助我们捕捉手写文字的形状和纹理信息。
接下来,我们需要训练一个手写文字识别模型。
训练模型的过程通常涉及两个步骤:数据准备和模型训练。
在数据准备阶段,我们需要收集足够多的手写文字图像数据,并将其标记为相应的字符或词汇。
在模型训练阶段,我们可以使用机器学习算法(如支持向量机、随机森林或深度学习模型)来训练一个分类器,以识别手写文字。
完成模型训练后,我们可以使用训练好的模型来进行手写文字识别。
这可以通过以下几个步骤来完成:首先,我们需要将待识别的手写文字图像进行与训练数据相同的预处理步骤,以确保图像质量的一致性。
然后,使用训练好的模型对预处理后的图像进行分类,以确定每个字符或词汇的标签。
最后,将标签转换为可编辑和可搜索的文本格式,并对识别结果进行后处理以提高准确性。
手写数字识别系统的设计与实现随着数字化时代的到来,智能化已经成为了趋势,人工智能的发展需要更精准有效的数据判别处理。
实现手写数字识别系统,可以广泛应用于智能交互、机器人、OCR等领域。
本文将描述手写数字识别系统的设计和实现过程。
一、系统设计手写数字识别系统输入手写数字图像,输出代表数字的数值。
总体设计思路如下:1.数据采集与存储用户输入手写数字图像后,通过归一化等方法去除噪点,存储为图片格式,可以使用20x20像素,黑白二值化的PNG格式存储。
2.特征提取与向量化将图片转化为向量,提取手写数字特征。
常用的特征提取方法是SIFT描述符提取和HOG特征提取,本文采用HOG特征提取方法。
基本步骤如下:a. 图像预处理:将彩色图片转化为灰度图片b. 局部块划分:将图片分为若干块c. 计算梯度直方图:对每一个块进行梯度直方图的计算d. 归一化:将梯度直方图归一化,得到HOG向量3.分类模型及算法采用深度学习神经网络模型进行分类,训练集采用MNIST公开数据集,由于输入的都是28*28的黑白图片,最后需要对数据进行调整,不符合识别输入数据的标准,将输入大小调整为20*20。
采用神经网络库tensorflow,设计softmax回归模型,定义交叉熵损失函数并使用梯度下降法或Adam优化算法最小化损失。
4.模型评估和调优使用测试集对模型进行评估,计算准确率、精度、召回率、F1值等,并采用正则化、dropout等技术对模型进行优化和调整。
5.系统集成与优化将OCR识别模型和手写数字识别系统进行整合,并加入人机交互的界面设计,实现常规数字识别等操作。
二、系统实现整套系统使用python语言实现,通过tensorflow实现深度神经网络模型的训练和预测。
主要步骤如下:1.数据采集与存储:从kaggle网站上下载手写数字数据集,并使用python pandas库对数据集进行处理和存储,确保数据安全、方便、快速可靠的存储和使用。
本科毕业论文(科研训练、毕业设计)题目:基于opencv的银行卡号识别姓名:学院:信息科学与技术学院系:自动化系专业:自动化年级:2009级学号:指导教师(校内):年月日目录摘要 (3)英文摘要 (4)引言 (5)第1章绪论…………………………………………………………………………61.1 引言 (6)1.2 银行卡号识别的研究现状 (6)1.3 识别的目的和意义 (6)1.4 opencv开源图像库 (7)1.5程序的模块 (7)第2章图像预处理模块……………………………………………………………82.1 引言 (8)2.2灰度化处理 (8)2.3二值化处理 (10)第3章字符定位模块 (11)3.1引言 (11)3.2 膨胀和腐蚀 (11)3.3轮廓提取 (13)3.4垂直投影 (14)第4章字符分割模块 (16)4.1引言 (16)4.2 字符分割 (16)4.3 图像归一化 (17)第5章字符识别模块 (18)第6章结论 (19)致谢语 (20)参考文献 (20)基于opencv的银行卡号识别摘要银行卡号是由19位数字编号组成的一串号码。
由于每一张银行卡的卡号都具有唯一性,所以通过确定银行卡卡号就可以识别银行卡,得到银行卡的相关信息。
银行卡卡号的自动识别对实现银行卡的有效管理和进行银行卡的相关服务具有重要的理论意义和实际应用价值。
本论文设计了一个银行卡卡号自动识别程序,这个程序基本上可以完成银行卡卡号的自动识别。
该程序是在对图像进行图像预处理的基础上,对图像处理得到的二值图进行膨胀和腐蚀变换,利用X/Y方向投影定位卡号字符位置;采用投影法分割卡号字符并进行归一化处理;最后采用模板匹配法识别字符得到银行卡卡号。
实验结果表明,程序具有较高的识别速率和准确率,并且具有一定的稳定性。
关键词银行卡卡号字符识别模板匹配图像处理Reasearch On Bank Card Number Identification Program Based OnTemplate MatchingAbstractThe serial number of bank card is a number consists of 19numbers.As the serial number of each bank card is unique,so by the bank card serial number we can be sure of the bank card and get the information of the bank card.The automatic recognition of bank card serial number has important theoretical significance and practical value to realize effective management of the bank card and bank card services.This paper designed a bank card serial number automatic recognition program, this program can basically complete the automatic recognition of bank card serial number.The program is based on image processing of the image, the image processing of the two value image dilation and erosion using X/Y transform, the direction of projection sequence number character position; the sequence number and character segmentation are normalized by projection method; finally, using template matching method to recognize character of bank card serial number. The experimental results show that, the program has a high recognition rate and accuracy, and has certain stability.Key Words bank card serial number; Character recognition; Template matching; Image processing引言随着国民经济的高速发展,银行卡的使用越来越频繁。
基于深度学习的手写书法字体识别算法①许嘉谕, 林楚烨, 陈志涛, 邓卓然, 潘家辉, 梁 艳(华南师范大学 软件学院, 佛山 528225)通讯作者: 梁 艳摘 要: 为解决因手写书法作品种类繁多而识别困难的问题, 降低人们观赏书法的门槛, 本文提出了基于深度学习的手写书法字体识别算法. 识别过程中首先使用投影法等图像处理方法对书法作品图像中的汉字进行定位和分割,然后分别利用GoogLeNet Inception-v3模型和ResNet-50残差网络进行书体风格识别和字形识别. 实验结果表明,本文算法能实现对整幅书法作品中楷书和篆书的书体风格以及字形的识别, 对楷书和篆书单字的识别率分别为91.57%和81.70%, 达到了实用的需求.关键词: 图像处理; 卷积神经网络(CNN); 手写书法字体识别引用格式: 许嘉谕,林楚烨,陈志涛,邓卓然,潘家辉,梁艳.基于深度学习的手写书法字体识别算法.计算机系统应用,2021,30(2):213–218./1003-3254/7819.htmlHandwritten Calligraphy Font Recognition Algorithm Based on Deep LearningXU Jia-Yu, LIN Chu-Ye, CHEN Zhi-Tao, DENG Zhuo-Ran, PAN Jia-Hui, LIANG Yan(School of Software, South China Normal University, Foshan 528225, China)Abstract : In order to solve the problem of difficult recognition due to the large variety of handwritten calligraphy fonts and reduce the threshold for people to appreciate calligraphy, we propose a handwritten calligraphy font recognition algorithm based on deep learning. In the process of recognition, image processing methods, such as projection method, are first used to locate and segment the Chinese characters in the calligraphy works. Then, the GoogLeNet Inception-v3model and ResNet-50 residual network are used to recognize the styles and shapes of Chinese characters. Consequently,this algorithm can recognize the styles and shapes of regular script and seal script in an entire calligraphy work at single-character recognition rates of 91.57% and 81.70%, demonstrating its practicability.Key words : image processing; Convolutional Neural Network (CNN); handwritten calligraphy font recognition1 引言1.1 手写书法字体识别研究背景汉字是传承中华文化的重要载体, 而书法展现了中国汉字独特的书写艺术, 是中华传统文化的瑰宝. 然而古代书法作品大多数采用繁体汉字进行书写[1], 且不同的书法风格导致字体形态复杂多变, 提高了人们阅读和理解书法作品的门槛. 尤其是篆书风格的书法作品, 由于其汉字形态保留了古代象形文字的特点, 未经过专业学习的人士很难熟练地将各个篆体汉字准确辨别出来. 因此利用计算机实现识别书法字体可为书法学习者提供鉴赏指导, 同时有利于降低大众鉴赏书法的难度, 向大众传播优秀书法文化.计算机系统应用 ISSN 1003-3254, CODEN CSAOBNE-mail: Computer Systems & Applications,2021,30(2):213−218 [doi: 10.15888/ki.csa.007819] ©中国科学院软件研究所版权所有.Tel: +86-10-62661041① 基金项目: 国家自然科学基金面上项目(61876067); 广东省自然科学基金面上项目(2019A1515011375); 广州市科技计划项目重点领域研发计划(202007030005)Foundation item: General Program of National Natural Science Foundation of China (61876067); General Program of Natural Science Foundation of Guangdong Province (2019A1515011375); Research and Development Plan of Key Areas, Science and Technology Plan of Guangzhou Municipality (202007030005)收稿时间: 2020-06-25; 修改时间: 2020-07-27; 采用时间: 2020-08-19; csa 在线出版时间: 2021-01-27213目前造成书法字体识别困难的原因主要有3个方面. 第一, 汉字数量繁多且字体结构复杂. 据统计中国汉字字符数量超过80 000[2], 字体结构与数字和字母相比更加复杂, 同时还不乏字形相似的汉字, 使得识别汉字字形的难度大大增加.第二, 书法汉字的字体风格多样化. 从古至今各书法名家创造了多种书体风格, 同一个汉字使用不同书体风格书写将展现不同的形态且差异较大, 例如楷体、隶书、篆书等.第三, 不同书法作者具有不同的书写习惯, 因此书法手写体的呈现形态和排布方式会因人而异. 比如楷书的字体风格又分成颜体、柳体等, 它们同为楷书却都有各自的特点. 与此同时古代书法作品与现今汉字印刷体的排布方式有着较大的差异, 因此汉字印刷体的识别方法不适用于书法字体识别.1.2 研究现状在图像识别和模式识别领域中, 汉字识别是重要的研究课题之一. 日常的汉字手写体识别经过多年的研究, 如今识别率已经达到了90%以上甚至更高[3]. 然而目前针对书法汉字的识别技术发展比较滞后, 但也已经有了许多研究成果.浙江大学硕士研究生顾刚的学位论文《汉字识别关键算法研究与应用》[2]中提出了基于卷积神经网络的书法字识别方法: 首先利用计算机系统中的标准字库和汉字图书字库训练卷积神经网络模型, 使之能够判断出待识别图像的书体风格, 然后使用MQDF算法在对应字体下的特征库进行识别. 经过实验分析可知卷积神经网络能有效提取图像的深度特征, 在识别书法字体的速度和正确率等方面具有很大的优势. 此外西安理工大学张福成的硕士学位论文《基于卷积神经网络的书法风格识别的研究》[4]和温佩芝等的期刊论文《基于卷积神经网络的石刻书法字识别方法》[5]也提供了针对书法风格和字体的识别方法. 然而这些研究成果都是针对计算机中的标准书法字库或石刻书法图像进行识别, 未解决识别手写书法字体问题.2014年浙江大学硕士研究生林媛的学位论文《中国书法字识别算法研究及应用》[6]中提出了基于检索的书法字识别, 能够高效识别楷书、篆书、行书等书法风格的单个手写书法字体图片. 这些研究成果为书法字体识别的技术实现提供了很多理论依据, 但都未提出识别完整手写书法作品图像的解决方法, 目前识别手写书法作品图片面临着诸多挑战. 因此本文算法结合图像处理方法和深度学习技术实现完整手写书法作品图像的书体风格和内容识别, 为大众学习和欣赏书法提供解读参考.2 书法字体识别算法描述本文算法对输入图像进行预处理和识别, 最终输出包含书法风格和字体内容的识别结果, 算法描述流程如图1所示. 首先对待识别图像进行预处理, 消除图片噪声并去除框线; 然后进行目标分割, 对书法作品中的单字进行定位并分割出目标单字; 随后利用GoogLeNet Inception-v3模型[7]和ResNet-50残差网络[8]分别实现书体风格和单字字形的识别, 在判断出书法作品图像的书法风格后选择对应书体的单字字形识别模型进行识别, 最后输出书法作品中的书体风格和汉字识别结果.预处理……字符分割图1 书法字体识别算法流程框架图3 图像预处理3.1 图像去噪声和二值化由于部分书法作品年代久远, 拍摄得到的图片中可能会有噪点. 本文方法采用图像形态学的方法, 使用开运算腐蚀图像中的噪点, 可在不影响书法字体的情况下达到去噪效果.随后对待识别图像进行二值化处理, 图像二值化是指将像素值分为黑白两种元素的集合, 以黑色像素作为前景, 白色像素作为背景, 以达到区分目标和背景像素的目的. 由于书法作品形式多样, 不同作品图像的对比度各异[9], 为了降低图像对比度带来的影响, 采用最大类间方差法[10]对图像进行二值化处理.取多个分割阈值T区分图像中的前景与背景, 设前景像素点占比为m0, 其平均灰度为n0; 背景像素点占比为m1, 其平均灰度为n1, 计算图像前景和背景的类间方差g, 如下所示:类间方差越大说明类间差异越大, 因此最后以类间方差计算结果最大的阈值来区分图像前景与背景.计算机系统应用2021 年 第 30 卷 第 2 期2143.2 去除文档边框线部分书法作品可能具有文档边框线, 将会对后续的单字分割和识别产生影响, 因此需要去除文档边框线. 本文算法使用矩形结构化元素分别得到图像水平边框线和垂直边框线后, 融合获取图像中所有多余边框线, 再利用帧差法去除边框线. 设原图像为f 1(x ,y ), 边框线图像为f 2(x ,y ), 进行求差得到差分图像F (x ,y ), 即去除文档边框线后的书法作品图像, 计算公式如下所示:4 书法汉字的定位与分割书法汉字的定位与分割是书法单字识别前的重要处理步骤, 如图2所示, 一共分为4个步骤: 列分割、行分割、单字轮廓提取及切割和扩大画布.图2 书法汉字的定位与分割流程4.1 列分割对图像进行垂直投影[11], 由于书法作品一般从上至下进行书写, 列与列之间较少有黏连, 可依据竖直方向上背景点的数量获取竖直切割线的位置, 同时得出列的平均宽度, 若待切割的某列的列宽度大于平均宽度的两倍, 表示列与列之间存在黏连, 需对该列再次进行切割. 列分割效果如图3所示.图3 列分割效果4.2 行分割对切割好的列图像进行水平投影, 由于汉字结构中存在上下结构的字形, 进行行切割时有可能将上下结构的字体分割开[12]. 因此对初次行分割后得到的图像进行检测, 若分割后的图像宽度小于平均宽度1/3,对该图像的相邻分割图像重新进行检测, 若均小于1/3,则说明已将单字分割开, 需要进行图像合并[13]. 行分割效果如图4所示.图4 行分割效果4.3 单字轮廓提取及切割切割后的单字图像可能还会存在细小的噪点, 因此需利用OpenCV 的findContours 函数提取单字图像的轮廓并进行再一次切割, 能够有效消除噪声并切除多余的背景像素.4.4 扩大画布对画布上、下、左、右4个方向上分别进行20%的背景像素填充, 使得识别目标处于图片正中心后, 统一将单字图片处理成144×144的尺寸, 便于进行后续的数据增强处理.5 书法作品的风格识别书体识别是对图像中的书法风格进行识别. 书体识别模型是字形识别模型的前置模型, 用户输入待识别图片后, 经书体识别模型处理后得出此作品所用书体并根据书体识别结果调用对应字形识别模型, 因此书体识别模型对后续的字形识别至关重要.本文算法利用GoogLeNet Inception-v3模型[7]实现书体识别, 该模型以稀疏连接的方式扩增网络的深度与宽度, 能够在扩大网络规模的同时, 节约参数数量,防止网络计算量过大. GoogLeNet Inception-v3网络主要由多个Inception-v3模块组成, 模块内部结构如图5所示, GoogLeNet Inception-v3网络整体结构如图6所示.原始Inception 模块使用多个不同大小的卷积核,对输入图像执行并行的卷积操作以及最大池化操作,以提取出抽象的书法风格特征. 随后将该模块的卷积输出拼接起来, 并输入至下一个网络模块中. Inception-v3模块对原始的Inception 模块作出改进, 利用1×1卷积操作对图片进行降维, 随后将原始Inception 模块中较大的二维卷积核拆分成两个较小的一维卷积核, 尺寸分别是1×n 和n ×1, 以达到节约参数和加速网络运算2021 年 第 30 卷 第 2 期计算机系统应用215的目的. 与此同时Inception-v3仍然保留了4个卷积分支的设置, 使得卷积神经网络保持一定的宽度, 能更高效地提取书法作品风格的抽象信息.损失函数使用多分类交叉熵, 设y i为模型预测目标x属于第i类的概率, 符号t i标记目标样本x是否属于第i个类别, 即:那么, 损失函数可按照下列公式进行计算:书体识别模型通过随机梯度下降的方式来进行迭代训练, 模型训练时将学习率设置成0.01, 迭代次数设置10 000并保存具有最优测试结果的模型参数.图5 Inception-v3模块结构图图6 GoogLeNet Inception-v3网络结构图6 书法汉字的字形识别6.1 数据增强深度神经网络拥有大量的参数, 其数量级可达到数百万以上. 如果训练数据不充足, 将可能会出现数据过拟合的现象. 因此需要在原有数据集基础上进行数据增强, 对图像数据进行旋转、裁剪、移位等操作, 制作出更丰富的数据, 从而使得网络模型具有更好的泛化能力和鲁棒性. 考虑到书法作品图像的特点, 本文采用的数据增强方法有以下4种: 对目标单字进行上下左右4个方向上0~20%以内的随机平移、任意角度旋转、高斯模糊. 经过数据增强后每个书法单字有500张图像, 大大增加了训练数据量.6.2 书法字形识别模型由于书法单字分类具有三千多种, 网络模型需要有足够的深度才能满足目标识别效果. 然而网络深度到达一定程度之后, 单纯叠加神经网络层数可能会出现网络退化的问题[8], 导致模型检测效果比浅层网络更差. 因此本文算法选择ResNet-50网络模型来实现书法单字字形识别功能, 残差网络能够在网络通过增加残差块来解决梯度爆炸的问题[8]. ResNet-50网络主要由残差学习模块和卷积模块组成, 这两个模块均会对输入特征图进行卷积和拼接处理, 提取图像中的书法单字字形特征, 其模块内部结构如图7所示, 网络整体结构如图8所示.图7 残差学习模块和卷积模块内部结构图计算机系统应用2021 年 第 30 卷 第 2 期216图8 ResNet-50网络整体结构图残差学习模块有两个分支, 其中一条分支通过短路连接来学习残差来进行优化, 另一分支中的两个1×1卷积核的作用是分别对特征图进行降维和升维, 模块的输出可定义为:其中, x 表示输入特征图, y 表示输出特征图, F (x ,{W i })表示对x 进行多层卷积.残差学习模块的作用是在网络训练过程中, 当低层网络提取的特征已经足够成熟时,更深层网络在训练时能通过中间隐层推导实现恒等映射, 因而避免了网络退化的问题.另外, 卷积模块的输出可定义为:其中, W s 表示1×1卷积操作, 目的是调整特征图x 的通道数, 使其与隐层计算结果的维度相匹配, 能有效减少参数规模.字形识别模型的损失函数仍然选择多分类交叉熵, 形式与式(3)、式(4)相同.模型训练时学习率设置为0.0001, 并按照指数衰减法逐步减小学习率, 迭代次数为14 000.7 实验结果与分析本次实验利用分布式爬虫技术, 针对书法字典网站中的楷书和篆书类别, 获取常用3500字对应的单字图片以及各书法家整幅作品集图片, 作为训练模型和测试效果的数据, 数据规模如表1所示.表1 数据集规模表书体作品图片总数预处理后单字种类数量切割后单字图片数(张)楷书58723479116 340篆书4470270034 828将数据集按照7:3的比例划分训练集和测试集, 进行数据增强并实现书体识别和字型识别模型, 在测试集上的测试效果如表2、表3所示. 实验结果显示本文方法针对图像书法风格的识别率能达到85.53%, 对楷书和篆书单字的识别率分别达到91.57%和81.70%.能够准确识别出大部分图像的书法风格以及字形, 并且识别一幅书法作品图片的平均时间为2.5 s.为了进一步说明本文提出的算法在字形识别任务中的有效性, 我们将本文算法与SIFT-MQDF 方法[2]进行对比, 结果如表4所示. 从表4可以看到, 与SIFT-MQDF 方法相比, 本文算法的楷书字体识别率略低(相差0.23%), 但本文算法的篆书识别率远高于SIFT-MQDF 方法的79.10%(相差2.60%). 值得注意的是,SIFT-MQDF 方法所用的数据集为CADAL 数字图书馆汉字图书子库[2], 字符背景单一, 噪声少, 而本文所采用的数据集为自建数据集, 图片从各网站收集而来, 样本数据存在噪声较多、图片分辨率低、背景复杂等问题, 对算法的挑战度更大. 因此, 测试结果的数据表明,本文算法更能有效地提取书法字体特征, 有利于提高识别的性能.表2 书法风格识别测试结果统计表识别风格种类测试集数量正确识别数量错误识别数量识别率(%)楷书3255569485.53篆书325表3 字形识别测试结果统计表单字风格测试集数量正确识别数量错误识别数量识别率(%)楷书5935435091.57篆书82671581.70表4 字形识别测试结果对比(%)识别方法楷书单字识别率篆书单字识别率SIFT-MQDF [2]91.8079.10本文算法91.5781.708 结束语本文针对手写书法字体识别困难的问题提出了书法字体识别算法, 利用图像处理方法与深度神经网络技术对图像中的书法字体进行定位和识别, 实验表明本文算法能够有效判断图像中的书法风格并识别出楷书和篆书字体, 识别率分别是91.57%和81.70%, 识别结果可为大众提供解读书法作品的参考. 下一步的工2021 年 第 30 卷 第 2 期计算机系统应用217作是提高单字检测和分割的准确度, 通过实现端到端的单字检测与识别, 进一步提高识别书体风格和字形的精度, 并且在未来增加可识别的字体种类, 例如隶书和行书等多种字体风格.参考文献毛天骄. 书法字书体风格识别技术[硕士学位论文]. 杭州:浙江大学, 2014.1顾刚. 汉字识别关键算法研究与应用[硕士学位论文]. 杭州: 浙江大学, 2017.2金连文, 钟卓耀, 杨钊, 等. 深度学习在手写汉字识别中的应用综述. 自动化学报, 2016, 42(8): 1125–1141. [doi: 10.16383/j.aas.2016.c150725]3张福成. 基于卷积神经网络的书法风格识别的研究[硕士学位论文]. 西安: 西安理工大学, 2018.4温佩芝, 姚航, 沈嘉炜. 基于卷积神经网络的石刻书法字识别方法. 计算机工程与设计, 2018, 39(3): 867–872. [doi:10.16208/j.issn1000-7024.2018.03.047]5林媛. 中国书法字识别算法研究及应用[硕士学位论文].杭州: 浙江大学, 2014.6Szegedy C, Vanhoucke V, Ioffe S, et al . Rethinking theinception architecture for computer vision. Proceedings of 2016 IEEE Conference on Computer Vision and Pattern Recognition. Las Vegas, NV, USA. 2016. 2818–2826.7He KM, Zhang XY, Ren SQ, et al . Deep residual learning forimage recognition. Proceedings of 2016 IEEE Conference on Computer Vision and Pattern Recognition. Las Vegas, NV,USA. 2016. 770–778.8雷鑫, 李俊阳, 宋宇, 等. 用于手写汉字识别的文本分割方法. 智能计算机与应用, 2018, 8(2): 126–128. [doi: 10.3969/j.issn.2095-2163.2018.02.029]9苏敏. 古籍手写文字分割算法的研究与应用[硕士学位论文]. 兰州: 兰州交通大学, 2018.10张一夫. 碑帖图像文字的分割与提取[硕士学位论文]. 哈尔滨: 哈尔滨工业大学, 2013.11吴相锦, 张忠林, 周生龙. 基于可变窗口的古代手写汉字多步切分方法. 计算机工程与设计, 2016, 37(4): 1102–1106.[doi: 10.16208/j.issn1000-7024.2016.04.049]12王序哲, 曹卫. 一种手写汉字投影切分方法的改进算法. 电脑知识与技术, 2011, 7(25): 6205–6206. [doi: 10.3969/j.issn.1009-3044.2011.25.055]13计算机系统应用2021 年 第 30 卷 第 2 期218。
手写数字识别系统的设计与实现一、绪论随着机器学习及神经网络技术的发展,人工智能正在不断向更广泛的领域渗透,尤其是在图像处理领域。
手写数字识别系统也因此应运而生,被广泛应用于各种场景中,例如验证码识别、手写板输入、银行支票识别等。
本文将介绍一种手写数字识别系统的设计与实现,以帮助读者深入了解该领域的技术。
二、系统设计本手写数字识别系统采用支持向量机(SVM)算法。
系统开发基于Python编程语言和OpenCV图像处理库进行,共分为以下四个模块:2.1 数据采集模块数据采集模块通过获取手写数字原始图像,采集大量的训练数据集和测试数据集。
该模块通过调用计算机的摄像头进行数据采集,将原始图像转化为数字图像,表示手写数字的像素。
在采集数据时,需要注意手写数字应该尽可能接近正方形,大小需要尽量一致,以保证后续的数字处理和识别效果。
数据采集完成后,需要对采集到的数据进行分类标注,即手写数字的分类,一般采用数字0-9进行标注。
2.2 特征提取模块在特征提取模块中,我们需要将数字图像转化为一组数字特征,以便于后续的数字图像比较和分类识别。
目前最常用的数字特征是手写数字的边界轮廓。
该模块通过调用OpenCV库中的边界检测函数获取数字的边界轮廓。
检测出轮廓后,我们可以使用等高线函数对其进行平滑处理,再通过描绘轮廓的关键点获取有效特征向量。
2.3 训练模型模块在训练模型模块中,我们需要将已经提取出的数字特征向量和其分类标注进行学习,训练得到一个能够正确识别数字的模型。
本系统采用了支持向量机(SVM)算法来实现数字的分类识别。
SVM算法有着很好的泛化性能和分类性能,并且适用于高维特征的数据集。
在训练模型时,我们首先对原始数据进行归一化处理,使其在相同量级内。
然后使用SVM训练模型,通过交叉验证的方式调整模型超参数,以达到最优分类效果。
2.4 数字识别模块数字识别模块是手写数字识别系统最核心的部分。
在该模块中,输入待识别的数字,对它进行特征提取,然后将其送入训练得到的SVM分类模型中进行分类,最终输出数字的识别结果。
[转]⼀个简单的基于Tesseract的数字识别程序⼀个简单的基于Tesseract的数字识别程序时间 2016-07-25 20:01:18原⽂主题⼀、前⾔这算是⼀个临时空降的任务,项⽬背景就懒描述了,先期⽬的就是从电表的照⽚中,⾃动识别出电表的读数出来。
如果透过现象看本质,这显然就是⼀个OCR的任务,⽽OCR⽆⾮就是先期的图⽚预处理,以及后期的实际OCR识别任务两个阶段。
说到OCR,就不得不提到⼤名⿍⿍的Google Tesseract了(虽然这个项⽬最初是由惠普开发,后⾯交由Google维护),⼏乎绝⼤多数的开源OCR项⽬,都是⽤它作为识别引擎的。
Tesseract是开源的,⽽且本⾝就包含了很多种语⾔模型的训练结果,如果不是有特别的需求(⽐如⼿写的不规则字体),⼏乎就是开箱就⽤的效果。
我们这⾥电表的读数都是8段LCD的字体,作为⼀类最常见的标准字体,我想⾃⼰训练也不见得模型有所提升,把精⼒花在第⼀步图像的处理⽅⾯,会得到更加显著的效果。
当然,这暂时也不是我的兴趣所在,也没有什么深⼊研究和体会,只是借助上⾯的项⽬搭建了个可以⼯作的模型,所以⼲货是没有的⼲活~⼆、EasyPR开源车牌对于OCR,经过Google之后,我不得不推荐⼀个项⽬,其原因不仅仅在于它是开源的,⽽是作者⼗分的⽤⼼,将整个的原理、思路和实现细节介绍的⼗分详细,可以说是⼿把⼿教你做车牌识别的,⽽这⽆论对于准备⼊坑的⼯程师,还是在校学⽣灌⽔发论⽂或者毕业设计,都具有很好的指导⼊门作⽤。
现在这个项⽬已经更新到v1.5版本了,引⼊了MSER等算法⽤于⽬标定位等操作,如果想跟着上⾯作者教程的思路,建议切换到v1.3分⽀查看。
参阅作者的教程,总结下来实现流程是这样的:2.1 图像预处理过程这个过程可以总结为抠图过程——就是在⼀副图像中,提取出车牌号的那⼀块出来,这纯粹就是个图像处理的过程;对于抠出来的图⽚,还通过SVM判断器分析是否是车牌图像,可以在减少后续OCR操作的同时,也增加了识别的准确率。
Python中的数字识别技术随着计算机技术和人工智能的不断发展,数字识别技术已经成为了计算机视觉领域的一个重要部分。
数字识别技术是指计算机在图像和视频中自动识别数字字符或手写数字的能力,也是实现OCR(Optical Character Recognition,光学字符识别)和数字识别等应用的基础技术之一。
Python是一种常用的编程语言,而且在数字识别领域中也有广泛的应用。
本文将从数字识别技术的发展历程、数字识别技术的基础原理以及Python在数字识别领域的应用等方面进行论述。
一、数字识别技术的发展历程数字识别技术的发展可以追溯到上个世纪60年代末期,当时光学字符识别技术开始进入实用化阶段。
20世纪70年代,由于数字化技术的兴起,数字字符的使用逐渐普及,数字字符的扫描、存储和处理也成为了一项重要的技术。
20世纪80年代,在计算机技术和光学字符识别技术的共同促进下,数字识别技术得到了进一步发展。
20世纪90年代,随着神经网络、支持向量机等机器学习技术的发展,数字识别技术又进一步得到了提升。
21世纪以来,数字识别技术随着深度学习、卷积神经网络等技术的发展,已经变得越来越成熟,并在许多领域得到了广泛应用。
二、数字识别技术的基础原理数字识别技术的基本流程是:图像采集、前处理、特征提取、分类识别。
下面我将分别对这四个过程进行介绍。
1.图像采集数字识别技术的首要任务是获取用于数字识别的原始图像。
数字图像的获取方法主要有两种:一种是使用扫描仪扫描纸质原件,另一种是使用数码相机或摄像机进行拍摄。
数字识别技术在实际应用中,通常不直接使用原始图像进行处理,而是需要进行一系列前处理,以便更好的获取图像信息。
2.前处理前处理是指对获取到的原始图像进行变换、滤波、二值化等一系列操作,处理得到更加利于数字识别的图像。
前处理包括灰度化、二值化、去噪等。
灰度化是将一幅彩色图像转化为灰度图像;二值化是将灰度值低于某一阈值的像素设为黑色,其他像素设为白色,将灰度图像转化为二值图像;去噪是将图像中的噪声进行识别,并去除掉。
使⽤Python+OpenCV进⾏卡类型及16位卡号数字的OCR功能⽬录1.效果图2.原理2.1OCR-A字体2.2检测过程步骤2.3优化3.源代码这篇博客将介绍如何通过OpenCV和Python使⽤模板匹配执⾏光学字符识别(OCR)。
具体来说,将使⽤Python+OpenCV实现模板匹配算法,以⾃动识别卡的类型和以及16位卡号数字。
在⽐较数字时,模板匹配是⼀种⾮常快速的⽅法。
为此将图像处理管道分为4个步骤:1. 通过各种图像处理技术检测信⽤卡上四组四个数字,包括形态学操作、阈值和轮廓提取。
2. 从四个分组中提取每个单独的数字,得到16个需要分类的数字。
3. 将模板匹配应⽤于每个数字,将其与OCR-A字体进⾏⽐较,以获得数字分类。
4. 检查信⽤卡号的第⼀位数字以确定发卡公司。
在对信⽤卡OCR系统进⾏评估后,发现如果发卡信⽤卡公司使⽤OCR-A字体作为数字,该系统的准确率为100%。
优化可以考虑在野外采集信⽤卡的真实图像,并训练机器学习模型(通过标准特征提取或训练或卷积神经⽹络),以进⼀步提⾼此系统的准确性。
1. 效果图⾸先了解⼀下卡的组成:OCR-A 参考字体识别如下:原始图 VS 灰度图 VS 阈值化图 VS 轮廓每个数字提取图:灰度图:忽略颜⾊对轮廓提取的影响阈值化图:使得轮廓在前景⽩⾊,背景⿊⾊便于轮廓提取。
轮廓提取图:提取每个数字ROI并记录,⽅便后续对⽐卡⽚中的区域以识别出对应的数字。
以下卡号均是演⽰卡,正确的识别卡的类型和卡号,效果图1:识别过程1——原图 VS 灰度图 VS ⽩帽图 VS 梯度图如下:灰度图:忽略⾊彩影响⽩帽图:从较暗的背景中提取较亮的区域梯度图:计算Schaar梯度图,便于了解图像的⾊彩分配及提取;识别过程2——形态学闭合图 VS ⼆值化图1 VS 阈值化图2 如下:形态学闭合图:矩形框形态学闭合操作,以帮助闭合信⽤卡数字之间的⼩的缝隙⼆值化图:以便于提取阈值化图:⽅形框形态学闭合操作,以⼆次帮助闭合信⽤卡数字区域之间的缝隙识别过程3——轮廓过滤图 VS 提取最终效果图如下:轮廓过滤图:根据⾯积及纵横⽐,只保留卡⽚中的卡号区最终效果图:提取4组4数字每⼀个组,然后对每⼀个组中的4个数字进⾏截取ROI并识别,并与之前存储的数字ROI进⾏模板匹配,选取匹配值最⾼的作为最终结果。
开源ai文字识别案例开源AI文字识别是指利用开源的人工智能技术,实现对文字的自动识别和理解。
它可以将图片或图像中的文字提取出来,并转化为可编辑的文本形式。
这一技术在许多领域具有广泛的应用,如自动化办公、图像识别、文档管理等。
下面列举了十个开源AI文字识别的案例。
1. Tesseract OCR:Tesseract是一个开源的OCR引擎,由Google 开发和维护。
它可以识别多种语言的文字,并具有较高的准确性和稳定性。
Tesseract可以作为独立的应用程序使用,也可以嵌入到其他软件中。
2. OCRopus:OCRopus是一个基于开源的OCR系统,由Google开发和维护。
它包括一系列用于图像处理和文字识别的工具和库。
OCRopus可以自动处理扫描文档,提取其中的文字,并转换为可编辑的文本文件。
3. Keras OCR:Keras OCR是一个基于Keras库的OCR工具包,它提供了一系列用于文字识别的模型和算法。
Keras OCR可以用于处理各种类型的图像,如文档、照片、屏幕截图等。
它具有良好的灵活性和可扩展性。
4. EasyOCR:EasyOCR是一个简单易用的OCR库,它基于深度学习模型和开源OCR引擎。
EasyOCR支持多种语言的文字识别,并具有较高的准确性和速度。
它可以用于处理图像、视频和实时摄像头数据。
5. TextRecognition:TextRecognition是一个用于文字识别的开源库,它基于深度学习模型和图像处理算法。
TextRecognition可以处理各种类型的图像,如照片、印刷品、手写字等。
它可以识别多种语言的文字,并具有较高的准确性和鲁棒性。
6. OpenCV OCR:OpenCV是一个开源的计算机视觉库,它提供了一系列用于图像处理和文字识别的函数和算法。
OpenCV可以用于提取图像中的文字,并进行字符识别和文本分析。
它支持多种OCR引擎和模型,并具有较高的性能和稳定性。
1.1数字识别概述模式识别是六十年代初迅速发展起来的一门学科。
由于它研究的是如何用机器来实现人(及某些动物)对事物的学习、识别和判断能力,因而受到了很多科技领域研究人员的注意,成为人工智能研究的一个重要方面。
字符识别是模式识别的一个传统研究领域。
从50年代开始,许多的研究者就在这一研究领域开展了广泛的探索,并为模式识别的发展产生了积极的影响。
字符识别一般可以分为两类:1.联机字符识别;2.光学字符识别(Optical Chara-cter Recognition,OCR)或称离线字符识别。
在联机字符识别中,计算机能够通过与计算机相连的输入设备获得输入字符笔划的顺序、笔划的方向以及字符的形状,所以相对OCR来说它更容易识别一些。
但联机字符识别有一个重要的不足就是要求输入者必须在指定的设备上书写,然而人们在生活中大部分的书写情况是不满足这一要求的,比如人们填写各种表格资料,开具支票等。
如果需要计算机去认识这些己经成为文字的东西,就需要OCR技术。
比起联机字符识别来,OCR不要求书写者在特定输入设备上书写,它可以与平常一样书写,所以OCR 的应用更为广泛。
OCR所使用的输入设备可以是任何一种图像采集设备,如CCD、扫描仪、数字相机等。
通过使用这类采集设备,OCR系统将书写者已写好的文字作为图像输入到计算机中,然后由计算机去识别。
由于OCR的输入只是简单的一副图像,它就不能像联机输入那样比较容易的从物理特性上获得字符笔划的顺序信息,因此OCR是一个更具挑战性的问题。
数字识别是多年来的研究热点,也是字符识别中的一个特别问题,它是本文研究的重点。
数字识别在特定的环境下应用特别广泛,如邮政编码自动识别系统,税表和银行支票自动处理系统等。
一般情况下,当涉及到数字识别时,人们往往要求识别器有很高的识别可靠性,特别是有关金额的数字识别时,如支票中填写的金额部分,更是如此。
因此针对这类问题的处理系统设计的关键环节之一就是设计出高可靠性和高识别率的数字识别方法。
然而可以说还没有哪个数字识别器达到完美的识别效果。
在过去的数十年中,研究者们提出了许许多多的识别方法。
按使用的特征不同,这些方法可以分为两类:基于结构特征的方法和基于统计特征的方法。
结构特征通常包括圆、端点、交叉点、笔划、轮廓等,统计特征通常包括点密度的测量、矩、特征区域等,一般来说,两类特征各有优势。
例如,使用统计特征的分类器易于训练,而且对于使用统计特征的分类器,在给定的训练集上能够得到相对较高的识别率,而结构特征的主要优点之一是能描述字符的结构,在识别过程中能有效地结合几何和结构的知识,因此能够得到可靠性较高的识别结果。
1.2数字图像处理的应用数字图像处理主要研究的内容有以下几个方面:1、图像变换。
由于图像阵列很大,直接在空间域中进行处理,涉及计算量很大。
因此,往往采用各种图像变换的方法,如傅立叶变换、沃尔什变换、离散余弦变换等间接处理技术,将空间域的处理转换为变换域处理,不仅可减少计算量,而且可获得更有效的处理(如傅立叶变换可在频域中进行数字滤波处理)。
目前新兴研究的小波变换在时域和频域中都具有良好的局部化特性,它在图像处理中也有着广泛而有效的应用。
2、图像编码压缩。
图像编码压缩技术可减少描述图像的数据量(即比特数),以便节省图像传输、处理时间和减少所占用的存储器容量。
压缩可以在不失真的前提下获得,也可以在允许的失真条件下进行。
编码是压缩技术中最重要的方法,它在图像处理技术中是发展最早且比较成熟的技术。
3、图像增强和复原。
图像增强和复原的目的是为了提高图像的质量,如去除噪声,提高图像的清晰度等。
图像增强不考虑图像降质的原因,突出图像中所感兴趣的部分。
如强化图像高频分量,可使图像中物体轮廓清晰,细节明显;强化低频分量可减少图像中噪声影响。
图像复原要求对图像降质的原因有一定的了解,一般讲应根据降质过程建立“降质模型”,再采用某种滤波方法,恢复或重建原来的图像。
4、意义的特征部分提取出来,其有意义的特征有图像中的边缘、区域等,这是进一步进行图像识别、分析和理解的基础。
虽然目前已研究出不少边缘提取、区域分割的方法,但还没有一种普遍适用于各种图像的有效方法。
因此,对图像分割的研究还在不断深入之中,是目前图像处理中研究的热点之一。
5、图像描述。
图像描述是图像识别和理解的必要前提。
作为最简单的二值图像可采用其几何特性描述物体的特性,一般图像的描述方法采用二维形状描述,它有边界描述和区域描述两类方法。
对于特殊的纹理图像可采用二维纹理特征描述。
随着图像处理研究的深入发展,已经开始进行三维物体描述的研究,提出了体积描述、表面描述、广义圆柱体描述等方法。
6、图像分类(识别)。
图像分类(识别)属于模式识别的范畴,其主要内容是图像经过某些预处理(增强、复原、压缩)后,进行图像分割和特征提取,从而进行判决分类。
图像分类常采用经典的模式识别方法,有统计模式分类和句法(结构)模式分类,近年来新发展起来的模糊模式识别和人工神经网络模式分类在图像识别中也越来越受到重视。
在数字识别中分类识别之前要利用数字图象处理和计算机图形学的知识进行图象的预处理以便进行下面的特征提取以及识别。
图象的预处理包括二值化、图象的增强、图象的锐化以及图象的分割等。
1.3本论文所做的工作本论文在数字识别及预处理方面做了如下工作:1、介绍了数字识别广阔的应用前景和常用的识别方法,通过分析指出数字识别的难点在于无法建立精确的数学模型和做出简单可行的识别系统。
3、第二章分析了常规数字识别的基本步骤,并指出数字识别的关键步骤是预处理和特征提取。
第2章数字识别系统的设计与实现2.1系统的实现平台程序采用Microsoft Visual Studio2010与OpenCV2.4.8在Windows 7-64位旗舰版系统下开发完成。
并在Windows xp-32位系统下测试可用。
2.2系统的流程几种常用的解决问题的软件开发方法,一种是对问题追述的方法,也就是从问题的结果分析起一步一步找到问题的源头。
另一种解决问题的方法是寻找容易解决的或者是己经解决的相关的问题转而应用到解决当前的问题来。
但是当前软件开发中更为流行和常用的方法是逐步求精法。
这种方法是一种由顶向下的方法,也就是由一般到特殊的方法,它的基本思想是将原始的问题分割成若干个子问题,子问题较整个大问题容易解决。
本文程序设计采用逐步求精法,将整个系统问题分割成若干个子问题来做,主要包括图像预处理,特征提取,分类识别。
首先分别对每个模块进行单元测试分析和模块测试,然后再组合成系统,进行系统测试。
预处理过程主要找到图像的ROI部分子图像并进行大小的归一化处理,特征提取将图像转化为特征向量,分类识别采用k-近邻分类方法进行分类处理,最后根据分类结果完成识别工作。
主流程图:细化流程图:2.3系统的具体处理步骤2.3.1预处理预处理的过程就是找到图像的ROI区域的过程,如下图所示:首先找到数字的边界框,然后大小归一化数字图片,主要流程如下图所示:主要代码:IplImage preprocessing(IplImage*imgSrc,int new_width,int new_height){IplImage*result;IplImage*scaledResult;CvMat data;CvMat dataA;CvRect bb;//bounding boxCvRect bba;//boundinb box maintain aspect ratio//Find bounding box找到边界框bb=findBB(imgSrc);cvGetSubRect(imgSrc,&data,cvRect(bb.x,bb.y,bb.width,bb.height));int size=(bb.width>bb.height)?bb.width:bb.height;result=cvCreateImage(cvSize(size,size),8,1);cvSet(result,CV_RGB(255,255,255),NULL);//将图像放中间,大小归一化int x=(int)floor((float)(size-bb.width)/2.0f);int y=(int)floor((float)(size-bb.height)/2.0f);cvGetSubRect(result,&dataA,cvRect(x,y,bb.width,bb.height));cvCopy(&data,&dataA,NULL);//Scale resultscaledResult=cvCreateImage(cvSize(new_width,new_height),8,1);cvResize(result,scaledResult,CV_INTER_NN);//Return processed datareturn*scaledResult;//直接返回处理后的图片}2.3.2特征提取在拿到ROI图像减少了信息量之后,就可以直接用图片作为向量矩阵作为输入:void basicOCR::getData(){IplImage*src_image;IplImage prs_image;CvMat row,data;char file[255];int i,j;for(i=0;i<classes;i++)//总共10个数字{for(j=0;j<train_samples;j++)//每个数字50个样本{//加载所有的样本pbm格式图像作为训练if(j<10)sprintf(file,"%s%d/%d0%d.pbm",file_path,i,i,j);elsesprintf(file,"%s%d/%d%d.pbm",file_path,i,i,j);src_image=cvLoadImage(file,0);if(!src_image){printf("Error:Cant load image%s\n",file);//exit(-1);}//process fileprs_image=preprocessing(src_image,size,size);//生成训练矩阵,每个图像作为一个向量cvGetRow(trainClasses,&row,i*train_samples+j);cvSet(&row,cvRealScalar(i));//Set datacvGetRow(trainData,&row,i*train_samples+j);IplImage*img=cvCreateImage(cvSize(size,size),IPL_DEPTH_32F,1);//转换换8bits image to32位浮点数图片取值区间为[0,1]//scale=0.0039215=1/255;cvConvertScale(&prs_image,img,0.0039215,0);cvGetSubRect(img,&data,cvRect(0,0,size,size));CvMat row_header,*row1;//convert data matrix sizexsize to vecorrow1=cvReshape(&data,&row_header,0,1);cvCopy(row1,&row,NULL);}}}2.3.3分类识别识别方法采用knn近邻分类法。