1. OCR

OCR,即Optical Character Recognition,光学字符识别,是指通过扫描字符,然后通过其形状将其翻译成电子文本的过程。对于图形验证码来说,它们都是一些不规则的字符,这些字符确实是由字符稍加扭曲变换得到的内容。

例如,对于如图1-22和图1-23所示的验证码,我们可以使用OCR技术来将其转化为电子文本,然后爬虫将识别结果提交给服务器,便可以达到自动识别验证码的过程。

图1-22 验证码

图1-23 验证码

tesserocr是Python的一个OCR识别库,但其实是对tesseract做的一层Python API封装,所以它的核心是tesseract。因此,在安装tesserocr之前,我们需要先安装tesseract。

2. 相关链接

3. Windows下的安装

在Windows下,首先需要下载tesseract,它为tesserocr提供了支持。

进入下载页面,可以看到有各种.exe文件的下载列表,这里可以选择下载3.0版本。图1-24所示为3.05版本。

图1-24 下载页面

其中文件名中带有dev的为开发版本,不带dev的为稳定版本,可以选择下载不带dev的版本,例如可以选择下载tesseract-ocr-setup-3.05.01.exe。

下载完成后双击,此时会出现如图1-25所示的页面。

图1-25 安装页面

此时可以勾选Additional language data(download)选项来安装OCR识别支持的语言包,这样OCR便可以识别多国语言。然后一路点击Next按钮即可。

windows下

  1. 配置相应的环境变量

    我们需要配置两个环境变量一个是path环境变量,一个新建环境变量 TESSDATA_PREFIX

    如下图所示:

    加入的值就是上面tesseract安装后所在的目录

  2. 设置完环境变量后,打开cmd窗口看能否识别tesseract,输入命令tesseract -v

接下来,再安装tesserocr即可,此时直接使用pip安装:

1

pip3 install tesserocr pillow

关于坑!!!

安装 Tesserocr (填坑)

2018.07.20 23:19 375浏览

字号

转载请注明出处:https://www.jianshu.com/u/5e6f798c903a

环境:

  • Win10_64

  • Python 3.6.6,安装路径 C:\Python36 (后面会用到该路径)

1. 安装 Tesserocr

tesserocr 是 Python 下的一个 OCR 识别库,该库本质上是对 tesseract 做了一层 Python API 封装。通过 tesserocr 的 PyPI页面,可以找到该项目的 GitHub 仓库 。仓库的 README.rst 中介绍了 Windows 平台的安装方式,原文如下:

The proposed downloads consist of stand-alone packages containing all the Windows libraries needed for execution. This means that no additional installation of tesseract is required on your system.

--snip: 这里跳过了使用 Conda 安装的方式,需要的话可以查看原文档--

pip:Download the wheel file corresponding to your Windows platform and Python installation from simonflueckiger/tesserocr-windows_build/releases and install them via:

> pip install <package_name>.whl

按照文档的意思,由于 stand-alone packages 中包含了 Windows 下所需的所有库。如果使用 stand-alone packages 安装 tesserocr ,便无需再额外安装 tesseract 。

这里一定要通过独立的 .whl 文件安装,不要通过 pip3 install tesserocr 直接安装,因为在 Windows 上会失败——据说这种方式只能用于 Linux,但我没有仔细研究过。

选择安装包时,tesserocr 和 tesseract 的版本要匹配,如 "tesserocr v2.2.2 (tesseract 4.0.0 master)" 释放,表明 "tesserocr-2.2.2" 要配合 "tesseract 4.0.0 master" 使用。如果 tesserocr 与 tesseract 间版本不匹配,识别结果中会出现非预期字符。例如,若是将 "tesserocr-2.2.2" 与 "tesseract 3.5.2" 搭配使用,结果中便会出现非预期字符。

由于,目前 Windows 下 tesseract 的最新稳定版是 3.5.2,于是我试图安装 "tesserocr v2.2.2 (tesseract 3.5.1)" 版本的 .whl 文件,却提示该 .whl 文件不支持当前平台,无法安装。所以,只能安装 "tesserocr v2.2.2 (tesseract 4.0.0 master)" 版本,在后文中需要配合 "tesseract 4.0.0 master" 使用。

1.1. 坑-1

如果依照官方文档,只安装了 tesserocr 的 .whl 文件,并尝试运行如下测试代码:

import tesserocrfrom PIL import Image
image = Image.open('image.jpg') # 可在文末找到image.jpgprint(tesserocr.image_to_text(image))

便会得到如下错误提示:

Traceback (most recent call last):
  File "c:/Users/iwhal/Documents/GitHub/python_notes/notes_of_crawler/code_of_learn_is_ignored/test_of_tesserocr .py", line 4, in <module>
    print(tesserocr.image_to_text(image))
  File "tesserocr.pyx", line 2401, in tesserocr._tesserocr.image_to_textRuntimeError: Failed to init API, possibly an invalid tessdata path: C:\\

Traceback 告诉我们:tessdata 路径无效,无法初始化 API。

错误的原因是:stand-alone packages 虽然包含了 Windows 下所需的所有库,但并是不包含语言数据文件(language data files)。并且数据文件需要被统一放置在 tessdata\ 文件夹中,并置于 C:\Python36 内。

获得数据文件有如下两种方式:

  • 方法一:按照下一节的方法安装 "tesseract-ocr-w64-setup-v4.0.0-beta.1.20180608.exe"(因为要与 tesserocr-2.2.2 匹配)。然后,将 C:\Program Files (x86)\Tesseract-OCR\ 下的 tessdata\ 文件夹复制到 C:\Python36\ 下即可 。

  • 方法二:无需安装 tesseract ,只需克隆 tesseract 仓库的主分支,然后将其中的 tessdata\ 文件夹复制到 C:\Python36\中。接下来,通过 tessdata_fast 仓库下载 eng.traineddata 语言文件,并放置于 C:\Python36\tessdata\ 内即可。

可见,解决此问题的关键在于获得 tesseract 的 tessdata\ 文件夹,并不一定要安装 tesseract ,但 tesseract 的版本一定要正确。

接下来尝试运行之前的代码:

import tesserocrfrom PIL import Image
image = Image.open('image.jpg') # 可在文末找到image.jpgprint(tesserocr.image_to_text(image))

便会输出:

4VC7

1.2. 坑-2

为什么要使用 tessdata_fast 仓库 中的语言数据文件,而不使用 tessdata_best 仓库 或 tessdata 仓库 中的文件喃?

因为,我使用了三个仓库各自的 eng.traineddata 文件,来识别了文末的验证码,发现只有 tessdata_fast 仓库 的识别结果与预期相同,另外两个都没有输出。 但对于更加简单的内容,tessdata 仓库 和 tessdata_best 仓库 都有输出,但前者表现更好。 另外,"tesseract-ocr-w64-setup-v4.0.0-beta.1.20180608.exe" 安装包中同样使用的是 tessdata_fast 仓库 中的 eng.traineddata 文件。

2. 安装 tesseract

通过查看 tesseract 的 GitHub 仓库 的 Wiki 主页,可得知 Windows 下的安装方法 ,原文如下:

Installer for Windows for Tesseract 3.05-02 and Tesseract 4.00-beta are available from Tesseract at UB Mannheim. These include the training tools. Both 32-bit and 64-bit installers are available.

An installer for the OLD version 3.02 is available for Windows from our download page. This includes the English training data. If you want to use another language, download the appropriate training data, unpack it using 7-zip, and copy the .traineddata file into the 'tessdata' directory, probably C:\Program Files\Tesseract-OCR\tessdata.

To access tesseract-OCR from any location you may have to add the directory where the tesseract-OCR binaries are located to the Path variables, probably C:\Program Files\Tesseract-OCR.

大意是在 Tesseract at UB Mannheim,可获得 Windows 安装包。 转到 UB-Mannheim/tesseract/wiki 后可见到下载链接,如下:

The latest installers can be downloaded here: tesseract-ocr-setup-3.05.02-20180621.exetesseract-ocr-w32-setup-v4.0.0-beta.1.20180608.exe and tesseract-ocr-w64-setup-v4.0.0-beta.1.20180608.exe (new, 64 bit, experimental). There are also older versions available.

如果需要  older versions 可以去到 https://digi.bib.uni-mannheim.de/tesseract/ 下载。 这里需要安装 "tesseract-ocr-w64-setup-v4.0.0-beta.1.20180608.exe",因为要与 tesserocr-2.2.2 匹配。

另外,tesseract 的文档位于 https://github.com/tesseract-ocr/tesseract/wiki/Documentation

2.1 语言包

通过 wiki 的 Data Files 部分,我们可以下载经过训练的语言包。将下载后的语言包,直接放到C:\Program Files (x86)\Tesseract-OCR\tessdata 即可使用。

注意语言包有三个分支:

在使用语言数据时要注意区分 Tesseract 的版本,3.04 或 3.05 的语言数据需要从 3.04 tree 获取。在 Data Files 中可以了解到更多语言包的分支,及其区别。

3. 附件

4. Linux下的安装

对于Linux来说,不同系统已经有了不同的发行包了,它可能叫作tesseract-ocr或者tesseract,直接用对应的命令安装即可。

Ubuntu、Debian和Deepin

在Ubuntu、Debian和Deepin系统下,安装命令如下:

1

sudo apt-get install -y tesseract-ocr libtesseract-dev libleptonica-dev

CentOS、Red Hat

在CentOS和Red Hat系统下,安装命令如下:

1

yum install -y tesseract

在不同发行版本运行如上命令,即可完成tesseract的安装。

安装完成后,便可以调用tesseract命令了。

接着,我们查看一下其支持的语言:

1

tesseract --list-langs

运行结果示例:

1

2

3

4

List of available languages (3):

eng

osd

equ

结果显示它只支持几种语言,如果想要安装多国语言,还需要安装语言包,官方叫作tessdata(其下载链接为:https://github.com/tesseract-ocr/tessdata)。

利用Git命令将其下载下来并迁移到相关目录即可,不同版本的迁移命令如下所示。

在Ubuntu、Debian和Deepin系统下的迁移命令如下:

1

2

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

sudo mv tessdata/* /usr/share/tesseract-ocr/tessdata

在CentOS和Red Hat系统下的迁移命令如下:

1

2

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

sudo mv tessdata/* /usr/share/tesseract/tessdata

这样就可以将下载下来的语言包全部安装了。

这时我们重新运行列出所有语言的命令:

1

tesseract --list-langs

结果如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

List of available languages (107):

afr

amh

ara

asm

aze

aze_cyrl

bel

ben

bod

bos

bul

cat

ceb

ces

chi_sim

chi_tra

...

可以发现,这里列出的语言就多了很多,比如chi_sim就代表简体中文,这就证明语言包安装成功了。

接下来再安装tesserocr即可,这里直接使用pip安装:

1

pip3 install tesserocr pillow

5. Mac下的安装

在Mac下,我们首先使用Homebrew安装ImageMagick和tesseract库:

1

2

brew install imagemagick

brew install tesseract --all-languages

接下来再安装tesserocr即可:

1

pip3 install tesserocr pillow

这样我们便完成了tesserocr的安装。

6. 验证安装

接下来,我们可以使用tesseract和tesserocr来分别进行测试。

下面我们以如图1-26所示的图片为样例进行测试。

图1-26 测试样例

该图片的链接为https://raw.githubusercontent.com/Python3WebSpider/TestTess/master/image.png,可以直接保存或下载。

首先用命令行进行测试,将图片下载下来并保存为image.png,然后用tesseract命令测试:

1

tesseract image.png result -l eng && cat result.txt

运行结果如下:

1

2

Tesseract Open Source OCR Engine v3.05.01 with Leptonica

Python3WebSpider

这里我们调用了tesseract命令,其中第一个参数为图片名称,第二个参数result为结果保存的目标文件名称,-l指定使用的语言包,在此使用英文(eng)。然后,再用cat命令将结果输出。

运行结果便是图片的识别结果:Python3WebSpider。可以看到,这时已经成功将图片文字转为电子文本了。

然后还可以利用Python代码来测试,这里就需要借助于tesserocr库了,测试代码如下:

1

2

3

4

import tesserocr

from PIL import Image

image = Image.open('image.png')

print(tesserocr.image_to_text(image))

我们首先利用Image读取了图片文件,然后调用了tesserocrimage_to_text()方法,再将其识别结果输出。

运行结果如下:

1

Python3WebSpider

另外,我们还可以直接调用file_to_text()方法,这可以达到同样的效果:

1

2

import tesserocr

print(tesserocr.file_to_text('image.png'))

运行结果:

1

Python3WebSpider

如果成功输出结果,则证明tesseract和tesserocr都已经安装成功。

转载自:https://cuiqingcai.com/5189.html

python3 tesserocr 安装 来解决部分爬虫遇到的字符识别问题的更多相关文章

  1. python3.7安装, 解决pip is configured with locations that require TLS/SSL问题

    python3.7安装, 解决pip is configured with locations that require TLS/SSL问题1.安装相关依赖 yum install gcc libff ...

  2. Python3.7安装(解决ssl问题)

    摘自:https://blog.csdn.net/love_cjiajia/article/details/82254371 python3.7安装(解决ssl的问题) 1) 安装准备 yum -y ...

  3. python3.5安装pyHook,解决【TypeError: MouseSwitch() missing 8 required positional arguments: 'msg', 'x', 'y', 'data', 'time', 'hwnd', and 'window_name'】这个错误!

    为什么安装 pyHook包:为Windows中的全局鼠标和键盘事件提供回调. Python应用程序为用户输入事件注册事件处理程序,例如鼠标左键,鼠标左键,键盘键等 先要实时获取系统的鼠标位置或者键盘输 ...

  4. Win10下python3和python2同时安装并解决pip共存问题

    特别说明,本文是在Windows64位系统下进行的,32位系统请下载相应版本的安装包,安装方法类似. 使用python开发,环境有Python2和 python3 两种,有时候需要两种环境切换使用,下 ...

  5. 【转】Win10下 python3和python2同时安装并解决pip共存问题

    1.下载python3和python2 进入python官网,链接https://www.python.org/ 选择Downloads--->Windows,点击进入就可以看到寻找想要的pyt ...

  6. 【转】Win10下python3和python2多版本同时安装并解决pip共存问题

    [转]Win10下python3和python2多版本同时安装并解决pip共存问题 特别说明,本文是在Windows64位系统下进行的,32位系统请下载相应版本的安装包,安装方法类似. 使用pytho ...

  7. windows python3.7安装numpy问题的解决方法

    我的是win7的系统,去python官网下载python3.7安装 CMD  #打开命令窗口 pip install numpy #在cmd中输入 提示 需要c++14.0, 解决办法: 1, 进入h ...

  8. 64位win7中使用vs2013为python3.4安装pycrypto-2.6.1插件报Unable to find vcvarsall.bat异常解决方式

    问题描写叙述: 64位win7中使用vs2013为python3.4.2安装pycrypto-2.6.1插件报Unable to find vcvarsall.bat. 问题分析: 1.源代码分析,查 ...

  9. 在Win10下,python3和python2同时安装并解决pip共存问题

    前提 本文是在Windows64位系统下进行的,32位系统请下载相应版本的安装包,安装方法类似. 在Win10下,python3和python2同时安装并解决pip共存问题解决: 1.下载python ...

随机推荐

  1. netty3---传统IO,NIO,nettyIO

    传统: NIO: nettyIO: 每个服务生负责一个区域,每个服务生是一个线程.

  2. [LeetCode] 139 Word Break(BFS统计层数的方法)

    原题地址: https://leetcode.com/problems/word-break/description/ 题目: Given a non-empty string s and a dic ...

  3. 20145219 《Java程序设计》第02周学习总结

    20145219 <Java程序设计>第02周学习总结 教材学习内容总结 类型:基本类型.类类型(参考类型) 基本类型: 整数:short占2字节,int占4字节,long占8字节 字节: ...

  4. OpenGL核心技术之Gamma校正

    笔者介绍:姜雪伟,IT公司技术合伙人,IT高级讲师,CSDN社区专家,特邀编辑,畅销书作者,国家专利发明人;已出版书籍:<手把手教你/2.2次幂.Gamma校正后的暗红色就会成为(0.5,0.0 ...

  5. 差看windows上进程及线程

    转自:http://blog.csdn.net/swgsunhj/article/details/29552027 下载process exlporer: http://technet.microso ...

  6. linux新手学习之Arch Linux入门经验分享

    我一直是以Ubuntu与Fedora作为新手入门的系统,但是其实我真正想推荐的是Arch,经过前面的学习,或许你对Linux已经有了一个大致的了解,现在如果你想加速你的步伐,也许可以看看本文.如果要问 ...

  7. spring3: schema的aop与Aspectj的aop的区别

    schema的aop如下: 接口: package chapter6.service; public interface IHelloAroundService { public void sayAr ...

  8. spring: spittr实例 构建简单的web应用

    我的环境是: jdk8, spirng4 之前照者书上说的做了,不得成功,于是网上百度,不得其然. 后来看到一篇文章,甚是所感.https://segmentfault.com/q/101000000 ...

  9. Ubuntu 配置静态ip的方法

    1. 配置静态ip地址 $sudo vi /etc/network/interfaces 原有内容只有如下两行: auto lo iface lo inet loopback 向末尾追加以下内容: a ...

  10. angular指令详解--自定义指令

    自定义指令 directive()这个方法是用来定义指令的: angular.module('myApp', []) .directive('myDirective', function ($time ...