去发现生活中的美好,记录生活中的点点滴滴

图像识别-通过OCR-tesserocr识别库识别图像电子文本

人工智能 admin 526℃

图像识别应用很广泛,比如识别验证吗、人脸识别等等,python用到的识别技术主要有两种,分别是opencv和tesseract,opencv专注机器视觉,tesseract专注字符识别,所以从领域来说,opencv更广,opencv有时间再介绍,这里主要介绍tesseract。

介绍tesseract之前,先来了解下什么是OCR?
OCR,即Optical Character Recognition,光学字符识别,是指通过扫描字符,然后通过其形状将其翻译成电子文本的过程,对应图形验证码来说,它们都是一些不规则的字符,这些字符是由字符稍加扭曲变换得到的内容,我们可以使用OCR技术来讲其转化为电子文本,然后将结果提取交给服务器,便可以达到自动识别验证码的过程。

tesserocr是Python的一个OCR识别库,但其实是对tesseract做了一层Python Api的封装,核心还是tesseract,所以在安装tesserocr之前,需要先安装tesseract;

而tesseract是google开源的OCR。

Windows:
安装tesserocr:

https://digi.bib.uni-mannheim.de/tesseract/

因为是window10 64位,所以这里下载的是最新的版本tesseract-ocr-w64-setup-v5.0.0.20190623.exe

安装好之后,还需要设置环境:
我的电脑-高级系统设置-环境变量
1、找到用户path变量,新增一个,把Teseract-OCR安装路径贴入:

微信截图_20211129142109

2、找到系统变量,新建一个,把Teseseract-OCR的tessdata路径贴入:

微信截图_20211129142139

设置完成后,打开CMD,验证是否生效:

微信截图_20211129142443

3、如果读取中文文本图片,还需要加载中文语言包(点此直接下载中文包):

https://github.com/tesseract-ocr/tessdata

下载后,放到tessdata目录:

D:\Program Files\Tesseract-OCR\tessdata

 

Mac安装

brew install tesseract

或者指定安装:

brew install --with-training-tools tesseract //安装tesseract, 同时安装训练工具
brew install --all-languages tesseract //安装tesseract,同时它还会安装所有语言
brew install --all-languages --with-training-tools tesseract //安装附加组件
brew install tesseract //安装tesseract,但是不安装训练工具,这里选择这种方式进行安装

 

Linux CentOS安装:

yum install  tesseract

 

完成以上Tesseract-OCR安装后,接下来安装python扩展库:

pip3 install Pillow
pip3 install pytesseract

python加载Window的Tesser-OCR应用,要修改pytesseract三方库的pytesseract.py脚本,找到pytesseract.py,加入Tesseract-OCR应用程序路径,这里我的Python3目录是:

D:\Python3\Lib\site-packages\pytesseract\pytesseract.py

微信截图_20211129142736

新建一个python脚本:

# coding=utf8

import pytesseract
from PIL import Image

im = Image.open('1.png')
string = pytesseract.image_to_string(im)
print(string)

 

微信截图_20211129150956

 

虽然简单的图形验证码可以识别出来,但是复杂的可能输出为空或者识别不准确,可能受图片复杂度、像素等因素干扰,这个时候就需要对图片进行处理,比如图像降噪、锐化、二值化处理,甚至模型学习(如TensorFlow )等等,用以提高识别度,这部分后面有时间再整理,当然也可以使用第三方识别库,比如百度智能云服务

比如下面这个验证码,直接识别是【5248】,经过一番处理后,得到【5218】

3微信截图_20211129154629

代码如下:

# coding=utf8
import pytesseract
from PIL import Image

im = Image.open('1.png')
im = im.convert('L')
# 这个是二值化阈值
threshold = 150
table = []
for i in range(256):
    if i < threshold:
        table.append(0)
    else:
        table.append(1)
# 通过表格转换成二进制图片,1的作用是白色,不然就全部黑色了
im = im.point(table, "1")

im.show()
string = pytesseract.image_to_string(im)
#string = pytesseract.image_to_string(im, lang="chi_sim", config='--psm 6') #如果是识别中文,且导入了中文语言包,则可以用这个识别中文。
print(string)

 

 

 

 

 

转载请注明:永盟博客 » 图像识别-通过OCR-tesserocr识别库识别图像电子文本

喜欢 (3)