阻礙我們爬蟲的有時候正是在登錄或者請求一些數據時候的圖形驗證碼
塘辅,因此這里我們講解一種能將圖片翻譯成文字
的技術榛泛。將圖片翻譯成文字一般被成為光學文字識別(Optical Character Recognition)脚囊,簡寫為OCR
共缕。實現OCR
的庫不是很多徐紧,特別是開源的。因為這塊存在一定的技術壁壘(需要大量的數據宽档、算法尉姨、機器學習、深度學習知識等)吗冤,并且如果做好了具有很高的商業(yè)價值又厉。因此開源的比較少九府。這里介紹一個比較優(yōu)秀的圖像識別開源庫:Tesseract
Tesseract:
Tesseract
是一個OCR庫,目前由谷歌贊助覆致。Tesseract是目前公認最優(yōu)秀侄旬、最準確的開源OCR庫。Tesseract具有很高的識別度煌妈,也具有很高的靈活性勾怒,他可以通過訓練識別任何字體。
安裝:
Windows系統(tǒng):
在以下鏈接下載可執(zhí)行文件声旺,然后一頓點擊下一步安裝即可(放在不需要權限的純英文路徑下):
https://github.com/tesseract-ocr/
Linux系統(tǒng):
可以在以下鏈接下載源碼自行編譯。
https://github.com/tesseract-ocr/tesseract/wiki/Compiling
或者在ubuntu
下通過以下命令進行安裝:
sudo apt install tesseract-ocr
Mac系統(tǒng):
用Homebrew
即可方便安裝:
brew install tesseract
設置環(huán)境變量:
安裝完成后段只,如果想要在命令行中使用Tesseract
腮猖,那么應該設置環(huán)境變量。Mac
和Linux
在安裝的時候就默認已經設置好了赞枕。在Windows
下把tesseract.exe
所在的路徑添加到PATH
環(huán)境變量中澈缺。
還有一個環(huán)境變量需要設置的是,要把訓練的數據文件路徑也放到環(huán)境變量中炕婶。
在環(huán)境變量中姐赡,添加一個TESSDATA_PREFIX=C:\path_to_tesseractdata\teseractdata
。
在命令行中使用tesseract識別圖像:
如果想要在cmd
下能夠使用tesseract
命令柠掂,那么需要把tesseract.exe
所在的目錄放到PATH
環(huán)境變量中项滑。然后使用命令:tesseract 圖片路徑 文件路徑
。
示例:
tesseract a.png a
那么就會識別出a.png
中的圖片涯贞,并且把文字寫入到a.txt
中枪狂。如果不想寫入文件直接想顯示在終端,那么不要加文件名就可以了宋渔。
在代碼中使用tesseract識別圖像:
在Python
代碼中操作tesseract
州疾。需要安裝一個庫,叫做pytesseract
皇拣。通過pip
的方式即可安裝:
pip install pytesseract
并且严蓖,需要讀取圖片,需要借助一個第三方庫叫做PIL
氧急。通過pip list
看下是否安裝颗胡。如果沒有安裝,通過pip
的方式安裝:
pip install PIL
使用pytesseract
將圖片上的文字轉換為文本文字的示例代碼如下:
# 導入pytesseract庫
import pytesseract
# 導入Image庫
from PIL import Image
# 指定tesseract.exe所在的路徑
pytesseract.pytesseract.tesseract_cmd = r'D:\ProgramApp\TesseractOCR\tesseract.exe'
# 打開圖片
image = Image.open("a.png")
# 調用image_to_string將圖片轉換為文字
text = pytesseract.image_to_string(image)
print(text)
用pytesseract
處理拉勾網圖形驗證碼:
import pytesseract
from urllib import request
from PIL import Image
import time
pytesseract.pytesseract.tesseract_cmd = r"D:\ProgramApp\TesseractOCR\tesseract.exe"
while True:
captchaUrl = "https://passport.lagou.com/vcode/create?from=register&refresh=1513081451891"
request.urlretrieve(captchaUrl,'captcha.png')
image = Image.open('captcha.png')
text = pytesseract.image_to_string(image,lang='eng')
print(text)
time.sleep(2)