Python OCR识别图片

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

Python OCR识别图片_第1张图片


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

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

语言包下载地址

Python OCR识别图片_第2张图片

至此前期的环境准备工作已经完成,读者可以通过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 OCR识别图片_第3张图片

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

Python OCR识别图片_第4张图片

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'

Python OCR识别图片_第5张图片


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

from PIL import Image
import pytesseract

import 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 = 140
    table = []
    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 text


def read_pic(text_path):
    im = Image.open(text_path)
    text = pytesseract.image_to_string(im, lang="eng")
    return text

if __name__ == '__main__':
    print(read_text("d://a2//test.png"))
    print(read_pic("C:/Users/jeff.xie/Desktop/YINWEN.png"))

最后的效果如下:

Python OCR识别图片_第6张图片
问题及解决:

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

Python OCR识别图片_第7张图片

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

Python OCR识别图片_第8张图片

 
解决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,python)