OCR技术是光学字符识别的缩写(Optical Character Recognition),是通过扫描等光学输入方式将各种票据、报刊、书籍、文稿及其它印刷品的文字转化为图像信息,再利用文字识别技术将图像信息转化为可以使用的计算机输入技术。可应用于银行票据、大量文字资料、档案卷宗、文案的录入和处理领域。(以上信息来源于百度百科OCR技术)
前几天刚好接到公司两个相关需求需求,一个是资产管理,由于信息化管理的需求,需要识别我们的物料标签;另一个是我们的会员系统,通过图片给的识别码到系统中查找是否存在相应红包、会员信息,从而避免黄牛扰乱我们的红包、会员系统,以前的做法是购买一个外部公司开发的接口(据说是1000元10万次)。基于公司的业务需求,同时也为了实践用技术解决业务上的问题的态度,把实际开发中遇到的问题记录下来,供读者们少走弯路。

一、环境准备
首先我们的操作环境是Windows操作系统(Linux系统可以通过libtesseract方式访问),我们采用的OCR识别软件是Tesseract-OCR,下载并安装Tesseract-OCR软件,安装完成之后需要配置环境变量,配置完成之后通过CMD命令行验证是否配置成功,执行tesseract -v命令查看相应版本,下面是一个CMD控制台下的识别实例。

OCR下载地址:https://digi.bib.uni-mannheim.de/tesseract/

OCR中文下载地址:https://download.csdn.net/download/qq_30273575/81897469

OCR全部语言下载地址:https://download.csdn.net/download/qq_30273575/81898150

如果用代码实现,环境变量一定要配置成C:\Program Files\Tesseract-OCR\tessdata,而不是C:\Program Files\Tesseract-OCR

配置中文语言包
默认情况下Tesseract-OCR是不能识别中文的,需要加载相应的中文语言包,简体中文语言包叫chi_sim.traineddata下载下来之后需要放置到${TESSERACT_HOME}/tessdata目录下,同时把语言包目录路径配置到环境变量当中,新增变量名称为“TESSDATA_PREFIX”。

下图中文件夹添加了英文和中文简体两种包,

语言包下载地址

至此前期的环境准备工作已经完成,读者可以通过CMD命令行的模式使用OCR的基本功能了,接下来是通过Python语言集成进来,毕竟手工操作的效率和扩展性不如程序化实现。

使用命令行转换:tesseract YINWEN.png output -l eng 

环境变量要配置成C:\Program Files\Tesseract-OCR\才可以执行,与代码实现不同

YINWEN.png 为图片名,在当前文件夹下C:\Users\jeff.xie\Desktop>

output为文字输出的文件名,如下图所示,默认txt文件,

-l表示Language,这里设置的为 eng,表示为英文

下图所示,可以正常转换文本

中文转换出现乱码,待研究。。。

Python实现

安装依赖包

接下来我们主要实现Python与Tesseract-OCR交互实现程序化图片识别功能。首先我们需要安装Python 图片依赖包,本文中Python涉及到的依赖包主要有两个,一个是PIL(Python Imaging Library),另外一个就是与Tesseract-OCR交互的依赖包pytesseract,通过pip install pytesseract安装相应的包。

安装tesseract orc

下载地址:https://github.com/UB-Mannheim/tesseract/wiki 
点击“tesseract-ocr-w64-setup-v4.0.0-beta.1.20180414.exe”

下载安装。注意:安装的时候选中中文包(安装时把所有选项都勾上)。本人安装目录:C:\Program Files\Tesseract-OCR\tessdata

使用命令,查看版本号和支持语言:
cd C:\Program Files\Tesseract-OCR  
 tesseract -v tesseract --list-langs -v tesseract --list-langs  #查看Tesseract-OCR支持语言

配置tesseract运行文件

...\Lib\site-packages\pytesseract\pytesseract.py 

找到文件:tesseract_cmd = 'tesseract'
修改为:tesseract_cmd = 'C:\\Program Files\\Tesseract-OCR\\tesseract.exe'

编写相应代码获取图片字符,首先是加载依赖包,读取图片,最终把从图片上读取出的字符写入一个文件保存起来,具体代码如下,两种方式实现:

from PIL import Image
import pytesseractimport os,sys
sys.path.append(os.getcwd())def read_text(text_path):"""传入文本(jpg、png)的绝对路径,读取文本:param text_path::return: 文本内容"""# 验证码图片转字符串im = Image.open(text_path)# 转化为8bit的黑白图片imgry = im.convert('L')# 二值化,采用阈值分割算法,threshold为分割点threshold = 140table = []for j in range(256):if j < threshold:table.append(0)else:table.append(1)out = imgry.point(table, '1')# 识别文本
    testdata_dir_config = '--tessdata-dir "C:\\Program Files\\Tesseract-OCR\\tessdata"'text = pytesseract.image_to_string(out, lang="chi_sim", config=testdata_dir_config)# text = pytesseract.image_to_string(out, lang="chi_sim")return textdef read_pic(text_path):im = Image.open(text_path)text = pytesseract.image_to_string(im, lang="eng")return textif __name__ == '__main__':print(read_text("d://a2//test.png"))print(read_pic("C:/Users/jeff.xie/Desktop/YINWEN.png"))

最后的效果如下:


问题及解决:

读取中文字符的时候有异常输出,如下

Python程序不能对中文进行编码,执行程序前,需要配置中文的环境,如下:

解决pytesseract.pytesseract.TesseractError: (1, ‘Error opening data file C:\Program Files\Tesseract-OCR\tessdata/chi_sim.traineddata Please make sure the TESSDATA_PREFIX environment variable is set to your “tessdata” directory. Failed loading language ‘chi_sim’ Tesseract couldn’t load any languages! Could not initialize tesseract.’)
参考链接: https://www.pythonf.cn/read/167081

path = "img\\text-img.png"
testdata_dir_config = '--tessdata-dir "C:\\Program Files\\Tesseract-OCR\\tessdata"'
textCode = pytesseract.image_to_string(Image.open(path), config=testdata_dir_config, lang='chi_sim')

相关的学习资料:

编程:Python实现图片识别_xiaxianba的博客-CSDN博客_python图片识别

python3 图片文字识别 - shaomine - 博客园

Python OCR识别图片相关推荐

  1. Python OCR识别图片验证码(二)

    操作系统:Windows Python:3.5 欢迎加入学习交流QQ群:657341423 上节讲到验证码的简单识别 但对于一些复杂的验证码,我们需要做一些简单的图片处理才能识别. 例如,我要识别这些 ...

  2. Python之ocr识别图片并转为excel文件

    环境准备 1.开通腾讯文字识别服务         按照官网步骤进行开通:https://cloud.tencent.com/product/generalocr/getting-started 开通 ...

  3. python—简单数据抓取四(利用超级鹰的ocr识别图片验证码模拟登录超级鹰网站、利用百度云的ocr识别自如租房网价格图片获取到自如网的价格)

    学习目标: python学习二十四 -简单数据抓取四 学习内容: 1.利用超级鹰的ocr识别图片验证码模拟登录超级鹰网站 2.利用百度云的ocr识别自如租房网的价格图片,获取到自如网的价格数据 1.利 ...

  4. python 制定识别图片的某些区域_python批量识别图片指定区域文字内容

    Python批量识别图片指定区域文字内容,供大家参考,具体内容如下 简介 对于一张图片,需求识别指定区域的内容 1.截取原始图上的指定图片当做模板 2.根据模板相似度去再原始图片上识别准确坐标 3.根 ...

  5. 百度云 OCR 识别图片验证码

    操作系统:Mac OS Python版本:3.7.2 OCR:百度云 遇到的问题: API测试过程中,遇到API Resopnse 为图片验证码的情况,需要对图片进行识别得到text code,进行断 ...

  6. Python+Tesseract-OCR识别图片文字并保存到word文档

    目录 使用Python+Tesseract-OCR识别图片文字并保存到word文档 安装Tesseract-OCR 配置Tesseract-OCR 通过CMD验证Tesseract-OCR工作 安装p ...

  7. 在ubuntu20.10系统下实现一键OCR识别图片截图中的内容使之转换为文本可以复制粘贴

    目的:因为最近主要使用ubuntu系统,想要将视频中的文字提取出来,实现一键OCR识别图片截图中的内容使之转换为文本可以复制粘贴. 主要思路 利用截图软件gnome-screenshot 进行截取需要 ...

  8. python人工智能文字识别软件_怎么用Python人工智能识别图片-百度AI文字识别使用方法分享 - Iefans...

    如果你是个Python初学者,那么你可以试着做做看这个教程,毕竟编程技能都是在实战中成长的,这篇教程是教你如何用Python来进行人工智能识别图片,可以帮助你解决日常办公时遇到的图片转换文字的问题. ...

  9. python实现OCR识别图片验证码

    用cv2模块读取和显示模块 #导包cv2拓展模块 import cv2#先给窗体起名字 cv2.namedWindow("ShowImage1") cv2.namedWindow( ...

  10. python ocr识别身份证_不告诉你我用了它配合Python简简单单开发OCR识别,带你识别手写体、印刷体、身份证等N种,附代码!...

    一.你心目中的OCR二.成果展示(一)手写体成果展示(一)印刷体成果展示(三)名片识别成果展示(四)身份证(同样是模板)成果展示(五)表格识别成果展示:(六)整题识别成果展示:三.前期准备四.开发过程 ...

最新文章

  1. spring 数组中随机取几个_别给孩子取这三种名字!截止年末,名字中的这几个字已经烂大街了...
  2. python初学者代码-Python-为什么Python是初学者的完美选择?
  3. 决策树和随机森林(上)
  4. 影驰名人堂送的机器人_玩转GTX 1080Ti名人堂显示屏 影驰全新魔盘使用教程
  5. 爱奇艺体验Serverless极致扩缩容,资源利用率提升40%
  6. 从1.5k到18k, 一个程序员的5年成长之路(分享)
  7. 2019世界大学排名全新出炉!清华北大排名大幅下滑?
  8. windows下常见php集成环境安装包介绍
  9. linux关闭防火墙后要重启网络吗,linux 下关闭防火墙方法和单向ping通问题之解决...
  10. vbr,cbr,abr区别
  11. win7、win10磁盘分区
  12. 基于python的证件照_利用python自动生成证件照
  13. 5G基站君的进化之路 — CU和DU分离
  14. HTML5作业:实现小米官网静态首页
  15. 四级英语图表作文真题计算机,英语四级作文真题
  16. 全网最后一个免费版本,永久可用
  17. 利用python如何抓取微博评论?
  18. 移动应用测试与PC端测试区别
  19. 函数的递归调用(C++)
  20. 经颅磁刺激后EEG神经网络的大规模变化

热门文章

  1. Facial Expression Recognition
  2. 如何打开RAR文件?
  3. Towards a Theory of Accountability and Audit
  4. 测试结果OK、NG、NT、POK的意思
  5. 中国科学家完全破解世界级百年数学难题庞加莱猜想
  6. JavaTutorials之Operators
  7. DeepSORT的改进
  8. Partitioning big graph with respect to arbitrary proportions in a streaming manner 菜鸟解读
  9. mac系统Airtest环境安装教程
  10. PPP PDP 及GPRS