Python安裝tesserocr遇到的各種問題及解決辦法
Tesseract的安裝及配置
在Python爬蟲過程中,難免遇到各種各樣的驗證碼問題,最簡單的就是
下載地址:https://digi.bib.uni-mannheim.de/tesseract/ 可以選擇下載不帶dev的穩定版本,我下載的是3.05.01版本的,不過這個版本的可能比較早了,識別能力不是很厲害,讀者可以選擇下載最新版本的3.05.02,識別能力應該會好很多。
下載完就是一路雙擊,在最後的Additional Language data(download)選上這個選項,是OCR支援各種語言的包,然後繼續安裝,直到安裝成功。
我的安裝路徑為:G:\Program Files (x86)\Tesseract-OCR
安裝完成後就得需要配置環境變數,開啟環境變數設定,在path中加入如下
tesserocr庫的安裝
剛開始我直接在cmd下輸入 pip install tesserocr 很不幸報錯了,報錯類似於如下。。。因為之前我的報錯,沒有截圖。所以。。
就是類似於這種的截圖,這該怎麼辦,難道要去下載visual C++嗎?我們有更好的解決方法,下載對應的.whl檔案
下載地址:https://github.com/simonflueckiger/tesserocr-windows_build/releases 一定要下載對應版本的
我的是3.5.1,所以我下載的是這個版本的。讀者可以自行選擇。
我的tesserocr-2.2.2-cp36-cp36m-win_amd64.whl檔案下載在G盤根目錄下,然後在cmd裡輸入 pip install G:\tesserocr-2.2.2-cp36-cp36m-win_amd64.whl 開始安裝whl檔案,發現報錯了。提示不能安裝whl檔案。。原來是沒有安裝wheel。
然後我就去安裝了wheel 直接 pip install wheel即可。
安裝成功 在輸入 pip install G:\tesserocr-2.2.2-cp36-cp36m-win_amd64.whl 發現開始安裝了。
哎心累啊,總算弄好了。但是,我在pycharm中呼叫tesserocr 這個庫,他又提示報錯了,這是為什麼呢?百度了一下最終解決。
原來需要在pycharm下的terrminal下輸入如下圖:
如果報錯了還得有一步操作。
將Tesseract-OCR下的tessdata檔案複製到你的Python安裝路徑的scripts下:
這樣
這下應該就徹底安裝成功了。。
這下在pycharm裡總算不會報錯了,我們來試一下識別這兩張圖片的效果
程式碼:
from PIL import Image import tesserocr imag=Image.open('test.jpg') print(tesserocr.image_to_text(imag)) imag1=Image.open('image.png') print(tesserocr.image_to_text(imag1))
輸出結果如下:
以上就是我安裝tesserocr遇到的問題及解決辦法了。其實還可以裝pytesseract這個庫。
安裝pytesseract庫
安裝這個pytesseract庫可比tesserocr方便多了,根本不會報錯,直接pip install pytesseract 完事。。pycharm直接搜尋庫
然後下載就完事,多省事。。。。
看一下識別效果,還是同樣的兩張圖片。
程式碼:
import pytesseract from PIL import Image import tesserocr im=Image.open('test.jpg') print(pytesseract.image_to_string(im)) im1=Image.open('image.png') print(pytesseract.image_to_string(im1))
執行結果:
驗證碼識別問題
我開啟知乎登入介面,下載了一張驗證碼圖片:
程式碼如下:
import pytesseract from PIL import Image import tesserocr #簡單驗證 特別垃圾 image=Image.open('3.jpg') result=tesserocr.image_to_text(image) print(result) #完全驗證 也不咋地。。 image1=Image.open('3.jpg') image1=image1.convert('L') threshold=127 table=[] for i in range(256): if i <threshold: table.append(0) else: table.append(1) image2=image1.point(table,'1') image2.show() #二值化灰度處理圖片顯示 result=pytesseract.image_to_string(image2) print(result)
執行結果:
賊無語,但是灰度化和二值化後的圖片已經很清晰了。。