使用PIL和幾種分類演算法對標準數字圖片進行識別
阿新 • • 發佈:2018-11-05
詳細程式碼見GitHub: https://github.com/nickliqian/simple_number_recognition
simple_number_recognition
使用PIL和幾種分類演算法對標準數字圖片進行識別。
背景
在採集某個免費代理網站的時候,遇到比較複雜的html程式碼。
考慮到我需要採集的是 數字+點號+冒號,並且都是同一種標準字型。
就試著使用ocr來識別。
如何實現
- 使用selenium+phantomjs採集web頁面,並且截圖儲存到本地。
- 使用Photoshop分析頁面尺寸,用PIL裁剪需要識別的位置為若干張小圖到本地。
- 使用tesseract或者空間向量演算法識別影象。
識別方法詳解
Tesseract
- 安裝Tesseract-OCR–影象識別引擎
- 安裝jTessBoxEditorFX–訓練影象識別資料的工具
pip install pytesseract
–python與互動Tesseract-OCR的包- 使用
image_to_string
識別圖片,lang='num'
是自己根據目標圖片訓練的資料名稱
import pytesseract
from PIL import Image
im = Image.open(image_name)
text = pytesseract.image_to_string(im, lang='num' )
空間向量演算法
- 原理:首先有一組單個字元圖片集,並已標註數值
- 將此圖片集轉換為空間向量集形式
- 對於需要識別的圖片,先進行圖片分割,分割成若干個單個字元圖片
- 把未知圖片轉為空間向量形式
- 計算未知圖片向量與訓練集中每個圖片向量的cos夾角,cos值越大說明圖片重合度越高。
使用此專案
1. catchCropImg
是從某個網站採集web頁面,並且分割為標準大小的例子
2. get_useragent
每次訪問使用隨機瀏覽器代理
3. tessCheckFunc
呼叫tesseract識別圖片 ip_list = ocr_ip_http(filename_list)
4. vectCheckFunc
生成訓練集,設定訓練集的目標圖片開始識別圖片
1. 生成圖片訓練集
origin_img_dir = 標註好的素材圖片資料夾 'markImage'
trained_img_dir = 輸出的分類父資料夾訓練集 'trainedImage'
get_img_train_set(origin_img_dir, trained_img_dir)
2. 已有圖片訓練集,識別目標圖片
trained_img_dir = 訓練集圖片資料夾 'trainedImage'
sample_name = 目標圖片檔名稱
text = check_sample(sample_name, trained_img_dir)
5. main
包含使用以上函式的例子
注意
- 圖片分割演算法目前較為簡陋,對於有粘黏和有干擾的字元暫不可用。
- 如果字型變化多樣,則需要擴充套件更大的訓練集。