參考博客:
1.https://www.cnblogs.com/Jimc/p/9772930.html
2.https://www.cnblogs.com/qqandfqr/p/7866650.html
1.普通圖形驗(yàn)證碼
普通圖形驗(yàn)證碼一般由四位純數(shù)字、純字母或者字母數(shù)字組合構(gòu)成,是最常見(jiàn)的驗(yàn)證碼氛魁,也是最簡(jiǎn)單的驗(yàn)證碼硕噩,利用 tesserocr 或者 pytesseract 庫(kù)即可識(shí)別此類(lèi)驗(yàn)證碼,前提是已經(jīng)安裝好 Tesseract-OCR 軟件
Tesserocr
tesserocr 是 Python 的一個(gè) OCR 識(shí)別庫(kù) 窍荧,但其實(shí)是對(duì) tesseract 做的一 層 Python API 封裝恨憎,所以它的核心是 tesseract。 因此瓤荔,在安裝 tesserocr 之前,我們需要先安裝 tesseract 输硝。
Tesseract安裝
要安裝tesserocr,首先要下載tesseract,它是給tesserocr提供支持的愉粤。下載地址為:https://digi.bib.uni-mannheim.de/tesseract/拿撩。
打開(kāi)之后可以看到有很多文件,帶dev的為開(kāi)發(fā)版本压恒,不帶dev的為穩(wěn)定版本,我們選擇下載不帶dev的版本型宙,比如最新的這個(gè):tesseract-ocr-w64-setup-v4.1.0.20190314.exe伦吠。下載完成之后運(yùn)行安裝,一直點(diǎn)擊next搁嗓,直到出現(xiàn)如下頁(yè)面
在Additional language data中包含了OCR支持識(shí)別的各國(guó)語(yǔ)言包箱靴,可以根據(jù)情況選擇,我這里就選擇了中文的:
添加系統(tǒng)環(huán)境變量:把剛才的安裝路徑“C:\Program Files (x86)\Tesseract-OCR”添加到紅線劃的PATH和Path棍矛,注意狈癞,添加時(shí)候開(kāi)頭用“;”跟之前的變量隔開(kāi),結(jié)尾以“;”結(jié)尾慨绳。下面是我的配置信息樣本:
1.1 Tesserocr安裝
相關(guān)鏈接
tesserocr GitHub: https://github.com/sirfz/tesserocr
tesserocr PyPI: https://pypi.python.org/pypi/tesserocr
tesseract 下載地址: http://digi.bib.uni-mannheim.de/tesseract
tesseract GitHub: https://github.com/tesseract-ocr/tesseract
tesseract 語(yǔ)言包: http://github.com/tesseract-ocr/tessdata
tesseract 文檔: https://github.com/tesseract-ocr/tesseract/wiki/Documentation
常見(jiàn)Python包的安裝方式有三種:
1. pip 安裝
pip install tesserocr pillow
2. conda 安裝
conda install tesserocr
#一條可行的命令:
conda install -c simonflueckiger tesserocr
3. whl包 安裝
這種方法一般不會(huì)報(bào)錯(cuò)
C:\Users\dell\Downloads
$ pip install tesserocr-2.4.0-cp36-cp36m-win_amd64.whl
Processing c:\users\dell\downloads\tesserocr-2.4.0-cp36-cp36m-win_amd64.whl
Installing collected packages: tesserocr
Successfully installed tesserocr-2.4.0
1.2 Tesserocr應(yīng)用
簡(jiǎn)單示例:
import tesserocr
from PIL import Image
image = Image.open('code.png')
result = tesserocr.image_to_text(image)
print(result)
新建一個(gè) Image 對(duì)象脐雪,調(diào)用 tesserocr 的 image_to_text() 方法,傳入 Image 對(duì)象即可完成識(shí)別战秋,另一種方法:
import tesserocr
print(tesserocr.file_to_text('code.png'))
1.3 pytesseract
pytesseract 庫(kù)識(shí)別驗(yàn)證碼
簡(jiǎn)單示例:
import pytesseract
from PIL import Image
img = Image.open('code.png')
img = img.convert('RGB')
img.show()
print(pytesseract.image_to_string(img))
pytesseract 的各種方法:
- get_tesseract_version:返回 Tesseract 的版本信息脂信;
- image_to_string:將圖像上的 Tesseract OCR 運(yùn)行結(jié)果返回到字符串;
- image_to_boxes:返回包含已識(shí)別字符及其框邊界的結(jié)果狰闪;
- image_to_data:返回包含框邊界,置信度和其他信息的結(jié)果幔欧。需要 Tesseract 3.05+丽声;
- image_to_osd:返回包含有關(guān)方向和腳本檢測(cè)的信息的結(jié)果。
有關(guān)參數(shù):
image_to_data(image, lang='', config='', nice=0, output_type=Output.STRING)
- image:圖像對(duì)象浴井;
- lang:Tesseract 語(yǔ)言代碼字符串霉撵;
- config:任何其他配置為字符串,例如:config=’–psm 6’喊巍;
- nice:修改 Tesseract 運(yùn)行的處理器優(yōu)先級(jí)。Windows不支持呵曹。尼斯調(diào)整了類(lèi)似 unix 的流程的優(yōu)點(diǎn)何暮;
- output_type:類(lèi)屬性,指定輸出的類(lèi)型海洼,默認(rèn)為string。
lang 參數(shù)域帐,常見(jiàn)語(yǔ)言代碼如下:
- chi_sim:簡(jiǎn)體中文
- chi_tra:繁體中文
- eng:英文
- rus:俄羅斯語(yǔ)
- fra:法語(yǔ)
- deu:德語(yǔ)
- jpn:日語(yǔ)
1.4 驗(yàn)證碼處理
利用 Image 對(duì)象的 convert() 方法傳入不同參數(shù)可以對(duì)驗(yàn)證碼做一些額外的處理,如轉(zhuǎn)灰度民假、二值化等操作龙优,經(jīng)過(guò)處理過(guò)后的驗(yàn)證碼會(huì)更加容易被識(shí)別,識(shí)別準(zhǔn)確度更高彤断,各種參數(shù)及含義:
- 1:1位像素,黑白筒愚,每字節(jié)一個(gè)像素存儲(chǔ)菩浙;
- L:8位像素句伶,黑白;
- P:8位像素先嬉,使用調(diào)色板映射到任何其他模式楚堤;
- RGB:3x8位像素,真彩色身冬;
- RGBA:4x8位像素,帶透明度掩模的真彩色滚躯;
- CMYK:4x8位像素嘿歌,分色;
- YCbCr:3x8位像素宙帝,彩色視頻格式;
- I:32位有符號(hào)整數(shù)像素愿待;
- F:32位浮點(diǎn)像素。
# 示例
import pytesseract
from PIL import Image
image = Image.open('code.png')
image = image.convert('L')
image.show()
result = pytesseract.image_to_string(image)
print(result)
Image 對(duì)象的 convert() 方法參數(shù)傳入 L年扩,即可將圖片轉(zhuǎn)化為灰度圖像访圃,轉(zhuǎn)換前后對(duì)比:
import pytesseract
from PIL import Image
image = Image.open('code.png')
image = image.convert('1')
image.show()
result = pytesseract.image_to_string(image)
print(result)
Image 對(duì)象的 convert() 方法參數(shù)傳入 1,即可將圖片進(jìn)行二值化處理况脆,處理前后對(duì)比:
2. 漢字驗(yàn)證碼:
圖片文字識(shí)別
import requests
from aip import AipOcr
image = requests.get('https://static.pandateacher.com/7b5d6d8d9dea5691705d04fef2306b52.png').content
APP_ID = '11756541'
API_KEY = '2YhkLuyQGljPUYnmi1CFgxOP'
SECRET_KEY = '4rrHe2BF828bI8bQy6bLlx1MelXqa8Z7'
client = AipOcr(APP_ID, API_KEY, SECRET_KEY)
res = client.basicAccurate(image)
if 'words_result' in res.keys():
for item in res['words_result']:
print(item['words'])
#---------------------------------------------------------------------
優(yōu)美勝于丑陋
明了勝于晦澀
簡(jiǎn)潔勝于復(fù)雜
復(fù)雜勝于凌亂
扁平勝于嵌套
間隔勝于緊湊