python下以api形式調用tesseract識別圖片驗證碼,

來源:互聯網
上載者:User

python下以api形式調用tesseract識別圖片驗證碼,
一、背景

之前在博文中介紹在python中如何調用tesseract ocr引擎,當時主要介紹了shell模式,shell模式需要安裝tesseract程式,並且效率相對略低。

今天介紹api形式的調用方式,因為博主主要是基於windows環境進行開發,所以這裡的api調用主要是指dll調用(linux之類是.so調用)

 

二、tesseract dll下載網址

https://github.com/charlesw/tesseract 這個網址中包含了編譯好的exe及dll檔案,而且x86,x64兩種架構都有。

(特別說明:選擇x86還是x64版本dll,只依賴於你的python架構,而不是作業系統的架構,即便是在64位作業系統,假如你的python是32位版本,這裡也要選用x86版本dll)。

博主使用的64位Python,所以進入  tesseract/src/lib/TesseractOcr/x64/目錄,分別下載 liblept172.dll、libtesseract304.dll 兩個dll。(若是你想用shell形式調用,也可以下載tesseract.exe,與之前的博文改善的地方,就是免去安裝tesseract。)

 

三、語言套件 下載網址(tessdata)

注意說明裡有這一段話,You will also need to download the language data files for tesseract 3.04 from tesseract-ocr. 

網址:https://github.com/tesseract-ocr/tesseract ,下載其中的tessdata目錄即可,跟dll放到同一目錄。

 

 四、vc 2015++發行包下載

注意說明裡這一段話:

Since tesseract and leptonica binaries are compiled with Visual Studio 2015 you'll need to ensure you have the Visual Studio 2015 Runtime installed.

意思就是,這個tesseract 的dll是使用vs 2015編譯的,所以必須安裝其發行包,同樣分X64,X86兩個版本,還是依賴於你的開發環境,不依賴於作業系統。

  

 五、安裝pyocr for python 包

用pip就可以安裝: pip install pyocr,也可以到官網下載源碼,手動安裝: https://github.com/jflesch/pyocr

最新的pyocr是0.4.1,其源碼還是基於tesseract 3.0.2 ,而前文下載的tesseract 已經是3.0.4版本了,所以需要改下pyocr源碼。 (需要說明的是pyocr包,比起以前博文提的pytesseract包要更複雜一些,同時支援shell、api 、Cuneiform 三種形式。)

修改源碼檔案 :C:\Python27\Lib\site-packages\pyocr\libtesseract\libtesseract_raw.py檔案。

如下所示: 紅色字型行,把302dll改成304dll

 

TESSDATA_PREFIX = os.getenv('TESSDATA_PREFIX', None)if sys.platform[:3] == "win":    libnames = [        # Jflesch> Don't they have the equivalent of LD_LIBRARY_PATH on        # Windows ?        "../vs2010/DLL_Release/libtesseract302.dll",        "libtesseract304.dll", #libtesseract302.dll    ]else:    libnames = [        "libtesseract.so.3",    ]

 

  

 

六、編寫測試程式

直接放源碼 pyocr-test.py :

#coding=utf-8 '''目前的目錄必須有tessdata ,libtesseract304.dll ,liblept172.dll'''import os ,systessdir = os.getenv('TESSDATA_PREFIX', None)if tessdir is None  :    tessdir = os.path.split(os.path.realpath(__file__))[0]     os.environ['TESSDATA_PREFIX'] = tessdirif tessdir not in os.environ['PATH']:    os.environ['PATH']= tessdir+';' +os.environ['PATH']    #sys.path.append(tessdir)print os.environ['PATH']print os.environ['TESSDATA_PREFIX']from pyocr import libtesseractfrom pyocr.builders import TextBuilderfrom PIL import Imagefilename ='1.png'img = Image.open(filename)#不設定成單行模式,沒有輸出bu = TextBuilder(tesseract_layout=7)#lang為語言,預設使用engprint libtesseract.image_to_string(img,lang='fontet',builder=bu)

幾個注意點:

1、前文下載的dll 與tessdata語言套件檔案夾,預設放到 pyocr-test.py 的同一目錄下;

2、必須安裝vc++ 2015 發行包(vc_redist.x86.exe 或vc_redist.x64.exe),否則會ctypes.cdll.LoadLibrary(libname)會調用dll失敗。

3、源碼裡的第一段,主要就是用來解決python找不到dll的問題,這段代碼主要功能:把目前的目錄加到系統PATH環境變數裡,以確保dll能被搜到。

這個地方容易出問題,主要是os.path.realpath 、__file__這幾個內建函式和常量,貌似在不同的開發環境,甚至不同的開發工具下都會有不同的結果,跟pyocr無關,主要是python的問題。

import ostessdir = os.getenv('TESSDATA_PREFIX', None)if tessdir is None  :    tessdir = os.path.split(os.path.realpath(__file__))[0]     os.environ['TESSDATA_PREFIX'] = tessdirif tessdir not in os.environ['PATH']:    os.environ['PATH']= tessdir+';' +os.environ['PATH']

4、實測時發現,bu = TextBuilder(tesseract_layout=7) 這一段不寫,會導致識別出錯,這個等於以前博文提到-psm 7函數,也就是單行模式。

  

以上

 

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.