前言

最近想做一篇爬虫分析给男朋友/女朋友送礼物的博文,但是在某宝上使用“七夕礼物送女友”关键字进行搜索得到的商品的标题很多都是类似这样的《生日礼物女生七夕情人节给闺蜜送女友朋友送给女孩的实用小高级感》,让人仅看标题根本不知道卖的是什么,但是看到很多封面图片上包含的有商品名或者商品说明,于是想到可以识别封面图中的文字进行分析。
虽然可以通过自己训练模型来实现此效果,但暂时又实在是比较懒惰,就使用了现有工具 Tesseract,将安装和使用进行分享。

Windows下Tesseract-OCR的安装与配置

提取、识别图片中的文字也称为光学字符识别 (Optical Character Recognition, OCR),其是指将手写或印刷文本的图像转换为文本,包括来自扫描文档、文档照片、场景照片(例如风景照片中标志和广告牌上的文字)或叠加在图像上的字幕等文字。

Tesseract-OCR简介与版本选择

Tesseract 是一个开源 OCR 引擎,Tesseract 可以直接通过命令行使用,或者通过使用 API 从图像中提取文本。它为多种语言提供了API,其中显然包括 Python。除了可以使用二进制安装包进行安装外,也可以针对各种设备使用源代码进行编译,包括 Android 和 iPhone。Tesseract 支持 unicode (UTF-8),可以识别 100 多种语言。Tesseract 支持各种输出格式,包括纯文本、HTML、PDF、TSV等,5.0.0 alpha 还增加了对 XML 输出的支持。
目前,Tesseract 主要包含三个版本:3.x、4.x和 5.0.0 alpha。最新的 3.x 版本(可用于某些具有特殊需求的项目,如特征回归)为 3.05.02,于 2018 年 6 月 19 日发布;最新的稳定版本(基于 LSTM)是 4.1.1,发布于 2019 年 12 月 26 日;5.0.0 alpha 对代码进行了重构,增加了一些实验性的功能。参考官方意见,由于需要使用 Tesseract API,因此选择使用 4.1.0。
有关 Tesseract 的更多介绍,可以参考官方文档.

tesseract-OCR安装

安装过程主要参考官方文档

  1. 首先,下载根据需要下载安装包,这里选择 tesseract-ocr-w64-setup-v4.1.0.20190314.exe

  2. 双击下载完成的安装包进行安装。
    安装过程

  3. 点击 Next 后,经典同意 (I Agree) 服务条款。
    安装过程

  4. 单击 I Agree 后,选择为所有用户或仅当前用户安装,这里选择默认的为所有用户。
    安装过程

  5. 单击 Next 后,选择附加脚本和语言数据。
    根据需要,选择附加脚本数据:
    安装过程
    根据需要,选择附加语言数据:
    安装过程
    这里选择了中文相关的附加语言包:
    安装步骤

  6. 点击 Next 后,选择软件安装位置,这里使用默认位置。
    安装过程
    Warning: Tesseract 应该安装默认目录或新目录中,否则由于卸载程序会删除整个安装目录,会导致该目录及其所有子目录和文件被删除。

  7. 点击 Next 后,选择是否创建快捷方式,及快捷方式位置。
    由于我只想使用 Tesseract API,因此此处选择不创建快捷方式,勾选 Do not create shortcuts 前复选框,如果需要快捷方式,取消勾选此复选框即可。
    安装过程

  8. 点击 Install 开始安装。
    安装过程

  9. 安装完成后,点击 Next
    安装步骤

  10. 最后点击 Finish 完成安装。
    安装步骤

Tesseract-OCR配置

将 Tesseract 添加进环境变量中。右键单击“此电脑”,选择“属性”,单击“高级系统设置”,然后单击“环境变量”,“编辑”系统环境变量“Path”,选择“新建”将 Tesseract-OCR 的安装目录(此处展示的安装目录为默认位置,如果修改了安装目录需要根据自己的安装位置进行修改)添加到环境变量中。
环境配置
确定”生效后,可以在 shell 中运行以下命令进行验证:

tesseract -v

若成功配置,则会打印版本信息:

tesseract v4.0.0.20190314
 leptonica-1.78.0
  libgif 5.1.4 : libjpeg 8d (libjpeg-turbo 1.5.3) : libpng 1.6.34 : libtiff 4.0.9 : zlib 1.2.11 : libwebp 0.6.1 : libopenjp2 2.2.0
 Found AVX2
 Found AVX
 Found SSE

安装Python调用Tesseract API所需依赖项

  1. 安装 pillow,在命令行 shell 中使用以下命令
    pip install pillow
    
  2. 安装 pytesser3,在命令行 shell 中使用以下命令
    pip install pytesser3
    
  3. 安装 pytesseract,在命令行 shell 中使用以下命令
    pip install pytesseract
    

Tesseract-OCR测试与使用

如果需要提取的文字并非英文,则还需要下载其他语言的数据包,但是,如果在安装过程已经选择了所需的附加语言数据则不需要再次下载;否则需要在下载所需语言包后,将其置于 C:\Program Files\Tesseract-OCR\tessdata 目录下(如果修改了默认安装目录,需要根据自己的安装位置进行修改)。

语言包文件

除了直接使用程序外,还可以使用以下两种方式调用 Tesseract。

命令行模式

命令格式如下:

tesseract 输入图片的文件名 输出文件名 [-l lang][-psm pagesegmode][configfile...]

例如识别 “test.png” 图片中文字,保存至 “result.txt” 文件中。

tesseract test.png result

命令行模式
可以看到识别的准确率非常优秀。

使用 Python 调用 Tesseract API

测试使用 Tesseract 识别中文的准确率。

import pytesseract
from PIL import Image
img = Image.open("test_1.png")
print(pytesseract.image_to_string(img,lang='chi_sim'))

识别图片:

请添加图片描述

识别结果:

通过反射填充(reflection padding)减少块伪影
当我们在卷积层中将填充( padding )应上
	
的图像q
	
导致块伪影。减少这些高频分量的一种方法是在网络训练
于输入张量时,在张量周围填充常数
	
网

1. 首先,通过将|
2. 然后减去原始|

像移动一个像素来计算高频分量,
像以创建一个矩阵。
加添加总变分损失( total variation loss )作为正则化器:

。但是,边界处的值突然下降会产生高频分量,

看到识别的问题问题并不大,但是格式很奇怪,接下来试一下识别商品图片上的文字:

img = Image.open("test_2.webp")
print(pytesseract.image_to_string(img,lang='chi_sim'))

识别图片与识别结果如下所示:

识别图片与识别结果
识别效果,呃,能用只能说。

温馨提示

  1. 为了获得更好的 OCR 结果,需要提高提供给 Tesseract 的图像质量。
  2. 除了官方预先训练好的语言包外,也可以训练 Tesseract 识别其他语言。有关更多信息,请参阅 Tesseract 训练
Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐