人工智能OCR文字识别研究

本文详细介绍了人工智能OCR文字识别的研究背景和发展历程,包括起步、反思、应用、低迷、稳步和蓬勃发展阶段。重点讨论了OCR技术,包括其定义、分类、流程、简单应用及挑战。OCR主要分为手写体和印刷体识别,其中印刷体识别已相对成熟,而手写体识别仍是难题。文章还介绍了OCR的基本流程,强调了预处理和字符识别的重要性,并探讨了CTPN在文本检测中的应用。尽管OCR技术在某些场景已取得显著进步,但在复杂环境下的识别仍有待提高。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1 研究背景
人工智能是研究开发能够模拟、延伸和扩展人类智能的理论、方法、技术及应用系统的一门新的技术科学,研究目的是促使智能机器会听(语音识别、机器翻译等)、会看(图像识别、文字识别等)、会说(语音合成、人机对话等)、会思考(人机对弈、定理证明等)、会学习(机器学习、知识表示等)、会行动(机器人、自动驾驶汽车等)。
人工智能充满未知的探索道路曲折起伏。如何描述人工智能自1956年以来60余年的发展历程,学术界可谓仁者见仁、智者见智。通过查阅资料将人工智能的发展历程划分为以下6个阶段:
一是起步发展期:1956年—20世纪60年代初。人工智能概念提出后,相继取得了一批令人瞩目的研究成果,如机器定理证明、跳棋程序等,掀起人工智能发展的第一个高潮。
二是反思发展期:20世纪60年代—70年代初。人工智能发展初期的突破性进展大大提升了人们对人工智能的期望,人们开始尝试更具挑战性的任务,并提出了一些不切实际的研发目标。然而,接二连三的失败和预期目标的落空(例如,无法用机器证明两个连续函数之和还是连续函数、机器翻译闹出笑话等),使人工智能的发展走入低谷。
三是应用发展期:20世纪70年代初—80年代中。20世纪70年代出现的专家系统模拟人类专家的知识和经验解决特定领域的问题,实现了人工智能从理论研究走向实际应用、从一般推理策略探讨转向运用专门知识的重大突破。专家系统在医疗、化学、地质等领域取得成功,推动人工智能走入应用发展的新高潮。
四是低迷发展期:20世纪80年代中—90年代中。随着人工智能的应用规模不断扩大,专家系统存在的应用领域狭窄、缺乏常识性知识、知识获取困难、推理方法单一、缺乏分布式功能、难以与现有数据库兼容等问题逐渐暴露出来。
五是稳步发展期:20世纪90年代中—2010年。由于网络技术特别是互联网技术的发展,加速了人工智能的创新研究,促使人工智能技术进一步走向实用化。1997年国际商业机器公司(简称IBM)深蓝超级计算机战胜了国际象棋世界冠军卡斯帕罗夫,2008年IBM提出“智慧地球”的概念。以上都是这一时期的标志性事件。
六是蓬勃发展期:2011年至今。随着大数据、云计算、互联网、物联网等信息技术的发展,泛在感知数据和图形处理器等计算平台推动以深度神经网络为代表的人工智能技术飞速发展,大幅跨越了科学与应用之间的“技术鸿沟”,诸如图像分类、语音识别、知识问答、人机对弈、无人驾驶等人工智能技术实现了从“不能用、不好用”到“可以用”的技术突破,迎来爆发式增长的新高潮。
2 OCR文字识别
2.1什么是OCR?
图 自然场景OCR文字识别(无乎648水印为刘世鹏博客自带,后续也是)
OCR英文全称是Optical Character Recognition,中文叫做光学字符识别。它是利用光学技术和计算机技术把印在或写在纸上的文字读取出来,并转换成一种计算机能够接受、人又可以理解的格式。文字识别是计算机视觉研究领域的分支之一,而且这个课题已经是比较成熟了,并且在商业中已经有很多落地项目了。比如汉王OCR,百度OCR,阿里OCR等等,很多企业都有能力都是拿OCR技术开始挣钱了。其实我们自己也能感受到,OCR技术确实也在改变着我们的生活:比如一个手机APP就能帮忙扫描名片、身份证,并识别出里面的信息;汽车进入停车场、收费站都不需要人工登记了,都是用车牌识别技术;我们看书时看到不懂的题,拿个手机一扫,APP就能在网上帮你找到这题的答案。太多太多的应用了,OCR的应用在当今时代确实是百花齐放。
2.2 OCR的分类
如果要给OCR进行分类分为两类:手写体识别和印刷体识别。
这两个可以认为是OCR领域两个大主题了,当然印刷体识别较手写体识别要简单得多,也能从直观上理解,印刷体大多都是规则的字体,因为这些字体都是计算机自己生成再通过打印技术印刷到纸上。在印刷体的识别上有其独特的干扰:在印刷过程中字体很可能变得断裂或者墨水粘连,使得OCR识别异常困难。当然这些都可以通过一些图像处理的技术帮他尽可能的还原,进而提高识别率。总的来说,单纯的印刷体识别在业界已经能做到很不错了,但说100%识别是肯定不可能的,但是说识别得不错那是没毛病。

图 手写字体展示
印刷体已经识别得不错了,那么手写体呢?手写体识别一直是OCR界一直想攻克的难关,但是时至今天,感觉这个难关还没攻破,还有很多学者和公司在研究。为什么手写体识别的难度在于因为人类手写的字往往带有个人特色,每个人写字的风格基本不一样,印刷体一般都比较规则,字体都基本就那几十种,机器学习这几十种字体并不是一件难事,但是手写体,每个人都有一种字体的话,那机器该学习大量字体,这就是难度所在。
2.3 OCR流程
假如输入系统的图像是一页文本,那么识别时的第一件事情是判断页面上的文本朝向,因为得到的这页文档往往都不是很完美的,很可能带有倾斜或者污渍,那么要做的第一件事就是进行图像预处理,做角度矫正和去噪。然后要对文档版面进行分析,进每一行进行行分割,把每一行的文字切割下来,最后再对每一行文本进行列分割,切割出每个字符,将该字符送入训练好的OCR识别模型进行字符识别,得到结果。但是模型识别结果往往是不太准确的,需要对其进行识别结果的矫正和优化,比如可以设计一个语法检测器,去检测字符的组合逻辑是否合理。比如,考虑单词Because,设计的识别模型把它识别为8ecause,那么就可以用语法检测器去纠正这种拼写错误,并用B代替8并完成识别矫正。这样子,整个OCR流程就走完了。从大的模块总结而言,一套OCR流程可以分为:
从上面的流程图可以看出,要做字符识别并不是单纯一个OCR模块就能实现的(如果单纯的OCR模块,识别率相当低),都要各个模块的组合来保证较高的识别率。上面的流程分的比较粗,每个模块下还是有很多更细节的操作,每个操作都关系着最终识别结果的准确性。做过OCR的童鞋都知道,送入OCR模块的图像越清晰(即预处理做的越好),识别效果往往就越好。那现在对这流程中最为重要的字符识别技术做一个总结。
2.4 OCR的简单应用

图 瓶盖的生产日期识别
在一些简单环境下OCR的准确度已经比较高了(比如电子文档),但是在一些复杂环境下的字符识别,在当今还没有人敢说自己能做的很好。现在大家都很少会把目光还放在如何对电子文档的文字识别该怎么进一步提高准确率了,因为他们把目光放在更有挑战性的领域。OCR传统方法在应对复杂图文场景的文字识别显得力不从心,越来越多人把精力都放在研究如何把文字在复杂场景读出来,并且读得准确作为研究课题,用学界术语来说,就是场景文本识别(文字检测+文字识别)。
对图片进行水平投影,找到每一行的上界限和下界限,进行行切割
对切割出来的每一行,进行垂直投影,找到每一个字符的左右边界,进行单个字符的切割。
首先是行切割。这里提到了水平投影的概念。水平投影,就是对一张图片的每一行元素进行统计(就是往水平方向统计),然后根据这个统计结果画出统计结果图,进而确定每一行的起始点和结束点。下面提到的垂直投影也是类似的,只是它的投影方向是往下的,即统计每一列的元素个数。
根据上面的解释,可以写出一个用于水平投影和垂直投影的函数。

#define V_PROJECT 1  //垂直投影(vertical)
#define H_PROJECT 2  //水平投影(horizational)
typedef struct
{
   
	int begin;
	int end;
}char_range_t;
//获取文本的投影以用于分割字符(垂直,水平),默认图片是白底黑色
int GetTextProjection(Mat& src, vector<int>& pos, int mode)
{
   
	if (mode == V_PROJECT)
	{
   
		for (int i = 0; i < src.rows; i++)
		{
   
			uchar* p = src.ptr<uchar>(i);
			for (int j = 0; j < src.cols; j++)
			{
   
				if (p[j] == 0)  //是黑色像素
				{
   
					pos[j]++;
				}
			}
		}
	}
	else if (mode == H_PROJECT)
	{
   
		for (int i = 0; i < src.cols; i++)
		{
   

			for (int j = 0; j < src.rows; j++)
			{
   
				if (src.at<uchar>(j, i) == 0)
				{
   
					pos[j]++;
				}
			}
		}
	}
	return 0;}

下面是画出水平(垂直)投影图的代码实现。

void draw_projection(vector<int>& pos, int mode)
{
   
	vector<int>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值