小科普
光學字符識別(OCR,Optical Character Recognition)是指對文本資料進行掃描,而後對圖像文件進行分析處理,獲取文字及版面信息.
Tesseract的OCR引擎最早由HP實驗室於1985年研發,2005年,交由Google對Tesseract進行改進、優化工做。
準備工做
1.PIL 、Pytesseractsegmentfault
from PIL import Image from pytesseract import image_to_string
2.安裝引擎 Tesseract-OCRapp
from PIL import Image from pytesseract import image_to_string img = Image.open("vm3.png"); text = image_to_string(img) print(text)
別走,留步,真的只有那麼多,不信看結果工具
but,Tesseract是老外開發的,默認不支持中文,須要咱們加個中文語言包
將文件chi_sim.traineddata (密碼:3mzq) 放到安裝目錄:Tesseract-OCR\tessdata文件夾內,再整張圖優化
代碼騷做修改(,lang='chi_sim')便可spa
from PIL import Image from pytesseract import image_to_string img = Image.open("vm3.png"); text = image_to_string(img,lang='chi_sim') print(text)
沒毛病.net
其實,複雜圖片的來不了,須要處理一下,好比這張圖片:
3d
這樣處理:code
img = Image.open("vm.png"); imgry = img.convert("L") threshold = 140 table = [] for i in range(256): if i < threshold: table.append(0) else: table.append(1) out = imgry.point(table, '1') out.show()
show()一下處理後的結果:blog
最後,整合一下:圖片
img = Image.open("vm.png"); imgry = img.convert("L") threshold = 140 table = [] for i in range(256): if i < threshold: table.append(0) else: table.append(1) out = imgry.point(table, '1') text = image_to_string(out) print(text)
我就知道你會回來,若是你在運行中遇到如下問題:
tesseract is not installed or it's not in your path
一圖解萬愁
Please make sure the TESSDATA_PREFIX environment variable is set to the parent directory of your "tessdata" directory.
Failed loading language 'eng'
Tesseract couldn't load any languages!
添加環境變量:
變量名:TESSDATA_PREFIX 變量值:testdata的路徑
若是加了還不行,重啓電腦!
若是還不行,試試 百度OCR的吧
若是你用來做爲驗證碼識別。可能會用到 截屏和裁剪