1. 程式人生 > >使用PIL和幾種分類演算法對標準數字圖片進行識別

使用PIL和幾種分類演算法對標準數字圖片進行識別

詳細程式碼見GitHub: https://github.com/nickliqian/simple_number_recognition

simple_number_recognition

使用PIL和幾種分類演算法對標準數字圖片進行識別。

背景

在採集某個免費代理網站的時候,遇到比較複雜的html程式碼。
考慮到我需要採集的是 數字+點號+冒號,並且都是同一種標準字型。
就試著使用ocr來識別。

如何實現

  1. 使用selenium+phantomjs採集web頁面,並且截圖儲存到本地。
  2. 使用Photoshop分析頁面尺寸,用PIL裁剪需要識別的位置為若干張小圖到本地。
  3. 使用tesseract或者空間向量演算法識別影象。

識別方法詳解

Tesseract
  1. 安裝Tesseract-OCR–影象識別引擎
  2. 安裝jTessBoxEditorFX–訓練影象識別資料的工具
  3. pip install pytesseract–python與互動Tesseract-OCR的包
  4. 使用image_to_string識別圖片,lang='num'是自己根據目標圖片訓練的資料名稱
import pytesseract  
from PIL import Image
im = Image.open(image_name)
text = pytesseract.image_to_string(im, lang='num'
)
空間向量演算法
  1. 原理:首先有一組單個字元圖片集,並已標註數值
  2. 將此圖片集轉換為空間向量集形式
  3. 對於需要識別的圖片,先進行圖片分割,分割成若干個單個字元圖片
  4. 把未知圖片轉為空間向量形式
  5. 計算未知圖片向量與訓練集中每個圖片向量的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

包含使用以上函式的例子

注意

  1. 圖片分割演算法目前較為簡陋,對於有粘黏和有干擾的字元暫不可用。
  2. 如果字型變化多樣,則需要擴充套件更大的訓練集。