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


配置中文语言包
默认情况下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 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程序不能对中文进行编码,执行程序前,需要配置中文的环境,如下:

 
解决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 - 博客园

  • 1
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python OCR识别可以使用多种库和工具进行,比如Tesseract和PaddleOCR。其中,Tesseract是一个开源的OCR引擎,可以识别多种语言的文字。使用Tesseract进行识别需要安装pytesseract和PIL库,并通过调用image_to_string方法实现。另外,Tesseract支持英文、中文和中英文混合模式的识别。 PaddleOCR是基于PaddlePaddle深度学习框架的OCR工具,可以实现准确的文字识别。使用PaddleOCR需要先安装paddlepaddle、shapely和paddleocr库,并通过调用ocr方法实现。PaddleOCR支持中文识别,并且可以输出识别结果的坐标信息。 以下是使用Tesseract和PaddleOCR进行OCR识别的代码示例: 使用Tesseract进行OCR识别: ```python import pytesseract from PIL import Image # 英文识别 text1 = pytesseract.image_to_string(Image.open(r"C:\Users\1.png"), lang='eng') print("英文模式识别结果:", text1) # 简体中文识别 text2 = pytesseract.image_to_string(Image.open(r"C:\Users\1.png"), lang='chi_sim') print("中文模式识别结果:", text2) # 中英文混合识别 text3 = pytesseract.image_to_string(Image.open(r"C:\Users\1.png"), lang='chi_sim eng') print("中英文混合模式识别结果:", text3) ``` 使用PaddleOCR进行OCR识别: ```python from paddleocr import PaddleOCR ocr = PaddleOCR(use_angle_cls=True, lang="ch") img_path = r"C:\\Users\\3.png" result = ocr.ocr(img_path, cls=True) for line in result[0]: print(line) ``` 请问你还有其他相关问题吗? 相关问题: 1. 如何安装Tesseract和PaddleOCR库? 2. Tesseract和PaddleOCR哪个更准确? 3. Tesseract能识别哪些语言?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值