飞道的博客

python实现OCR识别

515人阅读  评论(0)


摘要:在日常生活工作中,我们难免会遇到一些问题,比如自己辛辛苦苦写完的资料,好不容易打印出来却发现源文件丢了;收集了一些名片,却要一个一个地录入信息,很麻烦;快递公司的业务越来越好,但每天需要花费很多时间登记录入运单,效率非常的低。

那么,有没有什么技术能帮助我们解决这些难题呢?有的,那就是OCR文字识别技术。
前面显示:让你把这个世界看得清清楚楚,真真切切

什么是OCR?

OCR英文全称是Optical Character Recognition,中文叫做光学字符识别。它是是实时高效的定位与识别图片中的所有文字信息,返回文字框位置与文字内容。支持多场景、任意版面下整图文字的识别,以及中英文、字母、数字的识别。简单来说,就是将图片上的文字内容,智能识别成为可编辑的文本,例如:

OCR的技术原理是什么?

OCR本质是图像识别。其原理也和其他的图像识别问题基本一样。包含两大关键技术:文本检测和文字识别。先将图像中的特征进行提取并检测目标区域,之后对目标区域的字符进行分割和分类。

以深度学习兴起的时间为分割点,直至近五年之前,业界最为广泛使用的仍然是传统的OCR识别技术框架,而随着深度学习的崛起,基于这一技术的OCR识别框架以另外一种新的思路迅速突破了原有的技术瓶颈(如文字定位、二值化和文字分割等),并已在工业界得到广泛应用。

首先文本定位,接着进行倾斜文本矫正,之后分割出单字后,并对单字识别,最后基于统计模型(如隐马尔科夫链,HMM)进行语义纠错。

OCR技术的难点是什么?

复杂背景、艺术字体、低分辨率、非均匀光照、图像退化、字符形变、多语言混合、文本复杂版式、检测框字符残缺,等等。

如何克服这些难点?

从几个方面入手。一是使用场景,另一方面是从技术上进行改进。腾讯优图实验室在文本检测技术方进行了深度优化,提出了Compact Inception,通过设计合理的网络结构来提升各尺度的文字检测/提取能力。同时引入RNN多层自适应网络和Refinement结构来提升检测完整性和准确性。

OCR目前支持什么功能?

  • 身份证识别
  • 银行卡识别
  • 名片识别
  • 营业执照识别
  • 行驶证驾驶证识别
  • 车牌号识别
  • 通用印刷体识别
  • 手写体识别

通用印刷体的技术难点,使用场景

我们知道身份证识别可广泛应用在金融行业中,在身份认证中,可以减少用户的信息输入,提升效率,提高用户体验,营业执照的识别完全省去了手工录入的繁琐,还可以为企业省去大量的人力资源成本,这些场景大家都已经比较熟悉。

对于通用印刷体,腾讯优图实验室自主设计一整套全方位多尺度文字识别引擎,可攻破模糊,散焦,透视,文字部分遮挡的问题,识别准确率高达90%以上,处于业界领先水平。使用场景广泛,例如对任意版面上图像的文字识别,可广泛应用在印刷文档、广告图、医疗、物流等行业中的识别。

code(python)

下面调用百度API进行识别:

from aip import AipOcr

APP_ID = "10739584"
API_KEY = "RQTE6EpB6y4OXUA2iNKyPMhR"
SECRET_KEY = "ibD0O15GOC949V2V16nwOkZZcVdwObcw"

client = AipOcr(APP_ID, API_KEY, SECRET_KEY)
""" 读取图片 """
def get_file_content(filePath):
    with open(filePath, 'rb') as fp:
        return fp.read()

def scrope(pic_path):
    image = get_file_content(pic_path)
    """ 如果有可选参数 """
    options = {}
    options["language_type"] = "CHN_ENG"
    options["detect_direction"] = "true"
    options["detect_language"] = "true"
    options["probability"] = "true"
    print("正在识别图片信息......")
    """ 带参数调用通用文字识别, 图片参数为本地图片 """
    result=client.basicGeneral(image, options)
    src=result['words_result']
    print(len(src))
    dicfile=open('file.txt','a+',encoding='utf-8')
    for key in range(len(src)):
        dicfile.write(src[key]['words'])
        dicfile.write('\n')
        print(src[key]['words'])
    dicfile.close()

pic_path='ocr_test.png'
scrope(pic_path)

对比一下识别效果


参考:腾讯云技术


转载:https://blog.csdn.net/weixin_42788078/article/details/107617235
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场