python3 tesserocr 安裝 來解決部分爬蟲遇到的字符識別問題

1. OCR

OCR,即Optical Character Recognition,光學字符識別,是指經過掃描字符,而後經過其形狀將其翻譯成電子文本的過程。對於圖形驗證碼來講,它們都是一些不規則的字符,這些字符確實是由字符稍加扭曲變換獲得的內容。html

例如,對於如圖1-22和圖1-23所示的驗證碼,咱們可使用OCR技術來將其轉化爲電子文本,而後爬蟲將識別結果提交給服務器,即可以達到自動識別驗證碼的過程。python

圖1-22 驗證碼git

圖1-23 驗證碼github

tesserocr是Python的一個OCR識別庫,但實際上是對tesseract作的一層Python API封裝,因此它的核心是tesseract。所以,在安裝tesserocr以前,咱們須要先安裝tesseract。windows

2. 相關連接

3. Windows下的安裝

在Windows下,首先須要下載tesseract,它爲tesserocr提供了支持。服務器

進入下載頁面,能夠看到有各類.exe文件的下載列表,這裏能夠選擇下載3.0版本。圖1-24所示爲3.05版本。app

圖1-24 下載頁面ide

其中文件名中帶有dev的爲開發版本,不帶dev的爲穩定版本,能夠選擇下載不帶dev的版本,例如能夠選擇下載tesseract-ocr-setup-3.05.01.exe。測試

下載完成後雙擊,此時會出現如圖1-25所示的頁面。ui

圖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

相關文章
相關標籤/搜索