文字识别 Optical Character Recognition,OCR CTC STN

文字识别 Optical Character Recognition,OCR

自然场景文本检测识别技术综述

将图片上的文字内容,智能识别成为可编辑的文本。

场景文字识别(Scene Text Recognition,STR)

OCR(Optical Character Recognition, 光学字符识别)传统上指对输入扫描文档图像进行分析处理,识别出图像中文字信息。场景文字识别(Scene Text Recognition,STR) 指识别自然场景图片中的文字信息。自然场景图像中的文字识别,其难度远大于扫描文档图像中的文字识别,因为它的文字展现形式极其丰富:

  • 1· 允许多种语言文本混合,字符可以有不同的大小、字体、颜色、亮度、对比度等。
  • 2· 文本行可能有横向、竖向、弯曲、旋转、扭曲等式样。
  • 3· 图像中的文字区域还可能会产生变形(透视、仿射变换)、残缺、模糊等现象。
  • 4· 自然场景图像的背景极其多样。如文字可以出现在平面、曲面或折皱面上;文字区域附近有复杂的干扰纹理、或者非文字区域有近似文字的纹理,比如沙地、草丛、栅栏、砖墙等。

也有人用OCR技术泛指所有图像文字检测和识别技术, 包括传统OCR技术与场景文字识别技术。这是因为,场景文字识别技术可以被看成是传统OCR技术的自然演进与升级换代。

场景文字识别技术之所以难度更大,是因为自然场景中的文字表现形式极为多样和复杂。多种语言文本的混合、字符的大小、字体、颜色、亮度、对比度等的差异,以及文本行的方向、形状变化,都增加了识别的难度。此外,图像中的文字区域可能受到透视、仿射变换、残缺、模糊等因素的影响,进一步增加了识别的挑战性。同时,自然场景图像的背景也极其多样,文字可能出现在各种平面上,并受到复杂纹理的干扰,这些都使得文字检测与识别变得更为复杂。

然而,尽管存在这些挑战,OCR技术仍然取得了显著的进步,并广泛应用于各个领域。从身份证、名片、银行卡等卡证类的印刷体识别,到手写体识别,再到交通物流字符识别,OCR技术都展现出了其强大的应用潜力。同时,随着物联网、5G等技术的发展,OCR技术也在逐步扩展到更多的领域,如传感器可视化数据识别等。

值得一提的是,OCR技术的发展离不开计算机视觉处理和自然语言处理两个领域的支持。视觉处理技术帮助我们从图像中提取出文字区域的特征向量,而自然语言处理技术则将这些特征向量解码为文字结果。这种跨学科的融合使得OCR技术得以不断发展和完善。

未来,随着技术的不断进步和应用场景的不断拓展,OCR技术将继续发挥更大的作用。我们可以期待OCR技术在更多领域实现落地应用,为人们的生活带来更多便利和效率。同时,随着深度学习、强化学习等人工智能技术的不断发展,OCR技术的性能和准确性也将得到进一步提升,使得文字识别变得更加高效和精准。

应用:

  • 1.身份证、名片、银行卡、户口本等卡证类、出版物(扫描版图像、试题)、票据类(发票、火车票、彩票、出租车票)的印刷体识别;

  • 2.运单、考试试卷、办公手写文档、快递手写单号等手写体识别;

  • 3.车牌、集装箱号、快递运单、行驶证、驾驶证、等交通物流字符识别等;

  • 4.水表、电表、燃气表等各种传感器可视化数据识别(5G物联网之后可能就不需要了);

  • 5.图像文字检测和识别技术有着广泛的应用场景。已经被互联网公司落地的相关应用涉及了识别名片、识别菜单、识别快递单、识别身份证、识别营业证、识别银行卡、识别车牌、识别路牌、识别商品包装袋、识别会议白板、识别广告主干词、识别试卷、识别单据等等。

文本检测和识别技术处于一个学科交叉点,其技术演进不断受益于计算机视觉处理和自然语言处理两个领域的技术进步。它既需要使用视觉处理技术来提取图像中文字区域的图像特征向量,又需要借助自然语言处理技术来解码图像特征向量为文字结果。

什么是OCR?

OCR英文全称是Optical Character Recognition,中文叫做光学字符识别。它是利用光学技术和计算机技术把印在或写在纸上的文字读取出来,并转换成一种计算机能够接受、人又可以理解的格式。文字识别是计算机视觉研究领域的分支之一,而且这个课题已经是比较成熟了,并且在商业中已经有很多落地项目了。比如汉王OCR、百度OCR、阿里OCR、腾讯OCR等等,很多企业都有能力都是拿OCR技术开始挣钱了。其实我们自己也能感受到,OCR技术确实也在改变着我们的生活:比如一个手机APP就能帮忙扫描名片、身份证,并识别出里面的信息;汽车进入停车场、收费站都不需要人工登记了,都是用车牌识别技术;我们看书时看到不懂的题,拿个手机一扫,APP就能在网上帮你找到这题的答案。太多太多的应用了,OCR的应用在当今时代确实是百花齐放啊。

OCR的发展

在一些简单环境下OCR的准确度已经比较高了(比如电子文档),但是在一些复杂环境下的字符识别,在当今还没有人敢说自己能做的很好。现在大家都很少会把目光还放在如何对电子文档的文字识别该怎么进一步提高准确率了,因为他们把目光放在更有挑战性的领域。OCR传统方法在应对复杂图文场景的文字识别显得力不从心,越来越多人把精力都放在研究如何把文字在复杂场景读出来,并且读得准确作为研究课题,用学界术语来说,就是场景文本识别(文字检测+文字识别)。自然场景下的文字识别比简单场景的文字识别实在困难太多了,现在虽然出了很多成果,但是离理想结果还是差很远。

OCR的分类

如果要给OCR进行分类,我觉得可以分为两类:手写体识别和印刷体识别。这两个可以认为是OCR领域两个大主题了,当然印刷体识别较手写体识别要简单得多,我们也能从直观上理解,印刷体大多都是规则的字体,因为这些字体都是计算机自己生成再通过打印技术印刷到纸上。在印刷体的识别上有其独特的干扰:在印刷过程中字体很可能变得断裂或者墨水粘连,使得OCR识别异常困难。当然这些都可以通过一些图像处理的技术帮他尽可能的还原,进而提高识别率。总的来说,单纯的印刷体识别在业界已经能做到很不错了,但说100%识别是肯定不可能的,但是说识别得不错那是没毛病。

印刷体已经识别得不错了,那么手写体呢?手写体识别一直是OCR界一直想攻克的难关,但是时至今天,感觉这个难关还没攻破,还有很多学者和公司在研究。为什么手写体识别这么难识别?因为人类手写的字往往带有个人特色,每个人写字的风格基本不一样,虽然人类可以读懂你写的文字,但是机器缺很难。那为什么机器能读懂印刷体?因为印刷体是机器造出来的啊,那机器当然能读懂自己造的字体啦哈哈~其实上面也提到了,印刷体一般都比较规则,字体都基本就那几十种,机器学习这几十种字体并不是一件难事,但是手写体,每个人都有一种字体的话,那机器该学习多少字体啊?这就是难度所在。

如果按识别的内容来分类,也就是按照识别的语言的分类的话,那么要识别的内容将是人类的所有语言**(汉语、英语、德语、法语等)**。如果仅按照我们国人的需求,那识别的内容就包括:汉字、英文字母、阿拉伯数字、常用标点符号。根据要识别的内容不同,识别的难度也各不相同。简单而言,识别数字是最简单了,毕竟要识别的字符只有0~9,而英文字母识别要识别的字符有26个(如果算上大小写的话那就52个),而中文识别,要识别的字符高达数千个(二级汉字一共6763个)!因为汉字的字形各不相同,结构非常复杂(比如带偏旁的汉字)如果要将这些字符都比较准确地识别出来,是一件相当具有挑战性的事情。但是,并不是所有应用都需要识别如此庞大的汉字集,比如车牌识别,我们的识别目标仅仅是数十个中国各省和直辖市的简称,难度就大大减少了。当然,在一些文档自动识别的应用是需要识别整个汉字集的,所以要保证识别的整体的识别还是很困难的。

传统OCR一般有 模板匹配的方法(简单的场景 单一数字识别)、特征设计提取分类(传统机器学习方法)

<

  • 34
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
PHP可以通过使用OCR库或API来实现光学字符识别(OCR),来识别图片中的文字。以下是一种使用Tesseract OCR库的示例代码: ```php <?php // 使用Tesseract OCR库需要安装并配置Tesseract OCR引擎 // 可以通过以下命令安装:sudo apt-get install tesseract-ocr // 引入Tesseract OCR库 require_once 'vendor/autoload.php'; use thiagoalessio\TesseractOCR\TesseractOCR; // 图片路径 $imagePath = 'path/to/your/image.jpg'; // 创建一个TesseractOCR对象 $tesseract = new TesseractOCR($imagePath); // 可选:设置语言,默认为英语 $tesseract->setLanguage('eng'); // 可选:设置其他OCR参数,例如图片处理、识别模式等 $tesseract->setWhitelist(range('a', 'z')); // 只识别小写字母 // 运行OCR识别 $text = $tesseract->run(); // 输出识别结果 echo $text; ?> ``` 在上面的示例中,我们使用了第三方的Tesseract OCR库来进行OCR识别。首先,我们需要安装并配置Tesseract OCR引擎。然后,通过引入TesseractOCR类,创建一个TesseractOCR对象,并设置要识别的图片路径。可以使用`setLanguage`方法设置识别语言,默认为英语。还可以使用`setWhitelist`方法设置其他OCR参数,例如只识别小写字母。最后,通过调用`run`方法运行OCR识别,并将识别结果输出。 当然,还有其他的OCR库和API可供选择,如Google Cloud Vision API、Microsoft Azure Cognitive Services等,具体使用方法可以查阅它们的文档。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

EwenWanW

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值