1. 程式人生 > 實用技巧 >圖片驗證碼識別技術——Tesseraact

圖片驗證碼識別技術——Tesseraact

將圖片翻譯成文字一般被稱為光學文字識別(Optical Character Recognition),簡稱為OCR。

實現ORC的庫不是很多,特別是開源的,比較優秀的開源影象識別庫——Tesseract。

Tesseract:

tesseract是一個OCR庫。Tesseract是目前公認最優秀、最準確的開源OCR庫。Tesseract具有

很高的識別度,也具有很高的靈活性,可以通過訓練識別任何字型。

安裝:

windows系統:

在以下連結下載可執行檔案,然後一頓點選下一步安裝即可(純英文路徑)。具體安裝方法參考:https://blog.csdn.net/lianxiaobao/article/details/82465010(僅供參考,自行百度)。

https://github.com/tesseract-ocr/

linux系統:

可以在以下連結下載原始碼自行編譯。

https://github.com/tesseract-ocr/tesseract/wiki/Compiling

或者在Ubuntu下通過以下命令進行安裝:

sudo apt install tesseract-acr

Mac系統:

用Homebrew即可方便安裝:

brew install tesseract

設定環境變數:

安裝完成後,如果想要在命令中使用Tesseract,那麼應該設定環境變數。mac和Linux安裝時預設設定好了。

在Windows下把tesseract.exe所在的路徑新增到PATH環境變數中。還需要把訓練的資料檔案路徑放到環境變數中,

在環境變數中,新增一個TESSDATA_PREFIX=C:\path_to_tesseractdata\teseractdata。

在命令列中使用tesseract識別影象:

如果想要cmd下能夠使用tesseract命令,那麼需要把tesseract.exe所在的目錄放到PATH環境變數中。

然後使用命令: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)

import pytesseract
from urllib3 import request
from PIL import Image
import time

def main():
    pytesseract.pytesseract.tesseract_cmd = r'D:\tesseract-master\tesseract.exe'
    # 圖片的地址
    url = ' '
    while True:
        # 下載圖片
        request.urlretrieve(url,'captcha.png')
        image = Image.open('captcha.png')
        # 識別圖片
        text = pytesseract.image_to_string(image)
        print(text)
        time.sleep(2)


if __name__ == '__main__':
    main()
demo