[問題] OCR實務經驗請益
作業系統: Linux
問題類別: OCR
使用工具: Python 3, Google Vision API
問題內容:
最近正在玩Google Vision API,
目標是透過OCR辨認出一份報告/成績單的內容(格式不限),
並轉存成後續可再利用分析的檔案(e.g. json, csv, txt... 這部分還沒想好)。
想像有以下三種成績單:
--------
XXX高中
姓名:王小明 性別:男
考試日期:2018/01/10
語文能力
科目 分數 班平均
國文 70 75
英文 86 87
自然科學
科目 分數 班平均
物理 40 30
化學 93 60
--------
實事求是 精益求精
姓名:李大同 性別:男
考試日期:2018-01-09
科目 分數 班平均
國文
CHINESE 90 80
數學
MATHEMATICS 89 90
--------
姓名:黃小美
性別:女
學號:970284
試驗日期:2018-01-08
考試科目 全班平均 實得分數
CHINESE 國文 60 84
MATHEMATICS 數學 90 92
--------
這三種照片如果整理成CSV,大概都會希望長得像:
科目,分數,班平均
國文,70,75
英文,86,87
物理,40,30
化學,93,60
即英文科目名稱忽略不計,留下分數及班平均。
至於照片最上面的個人資料都忽略。(如果能留下考試日期當然也不錯)
目前我已經做到透過Google Vision API的text detection讀出照片上的文字資訊,
(document text detection我也試過但效果不好)
(https://cloud.google.com/vision/docs/ocr)
並且把每個文字框內容依像素座標由上到下、由左到右排列。
但緊接著碰到兩個問題:
1. 成績單上同列資料y座標軸可能不同
可能因為成績單紙張不平整或照相時有歪斜,
所以由上到下、由左到右排列完後,
可能會有「75,國文,70」這樣的順序,而非期待的「國文,70,75」。
這部分我想到或許可手動用rule-based的方法,
如任兩個文字框y座標不超過n單位就視為同一列之類的,
但也想請問有沒有更好的做法?
2. 分辨各欄位內容
各家的個人資料排列方式與位置均不同(置中置左置右),
有些的科目名稱只有中文,有些是中英文對照,
中英文對照的又可以有在同一行寫或分兩行寫等變化,
有些把班平均擺前面欄位,有些擺後面......
我曾經想過初步的想法是把每個文字框的x座標做x-means clustering,
再從x座標小的群開始,把每個cluster的內容依y座標排列下來,
原本預期可以避開上述問題1,
但是這方法卻不能排除無用的文字框
(e.g. 「姓名」、「語文能力」、多餘的英文科目列),
導致每個cluster的元素數量不會一樣多,卻又不是每個元素都需要;
另外也不能分辨每一個cluster內表示的究竟是班平均還是個人分數。
想請問板上高手,有沒有人有相關的資源或實務經驗可以分享?謝謝!
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 114.42.158.246
※ 文章網址: https://www.ptt.cc/bbs/DataScience/M.1522937906.A.2C5.html
※ 編輯: parcequetoi (114.42.158.246), 04/05/2018 22:35:23
推
04/06 00:26,
6年前
, 1F
04/06 00:26, 1F
→
04/06 00:26,
6年前
, 2F
04/06 00:26, 2F
→
04/06 00:26,
6年前
, 3F
04/06 00:26, 3F
→
04/06 01:17,
6年前
, 4F
04/06 01:17, 4F
推
04/06 01:22,
6年前
, 5F
04/06 01:22, 5F
→
04/06 11:15,
6年前
, 6F
04/06 11:15, 6F
→
04/06 11:15,
6年前
, 7F
04/06 11:15, 7F
→
04/06 11:15,
6年前
, 8F
04/06 11:15, 8F
→
04/06 11:18,
6年前
, 9F
04/06 11:18, 9F
→
04/06 11:18,
6年前
, 10F
04/06 11:18, 10F
→
04/06 11:18,
6年前
, 11F
04/06 11:18, 11F
推
04/06 11:52,
6年前
, 12F
04/06 11:52, 12F
→
04/06 13:49,
6年前
, 13F
04/06 13:49, 13F
→
04/06 13:50,
6年前
, 14F
04/06 13:50, 14F
→
04/06 13:52,
6年前
, 15F
04/06 13:52, 15F
→
04/06 13:53,
6年前
, 16F
04/06 13:53, 16F
→
04/06 13:56,
6年前
, 17F
04/06 13:56, 17F
推
04/06 13:58,
6年前
, 18F
04/06 13:58, 18F
→
04/06 13:59,
6年前
, 19F
04/06 13:59, 19F
推
04/06 14:37,
6年前
, 20F
04/06 14:37, 20F
→
04/06 14:37,
6年前
, 21F
04/06 14:37, 21F
→
04/06 14:37,
6年前
, 22F
04/06 14:37, 22F
→
04/07 10:25,
6年前
, 23F
04/07 10:25, 23F
→
04/07 10:26,
6年前
, 24F
04/07 10:26, 24F
※ 編輯: parcequetoi (114.42.158.246), 04/07/2018 13:11:56
推
04/08 02:46,
6年前
, 25F
04/08 02:46, 25F
→
04/08 17:53,
6年前
, 26F
04/08 17:53, 26F
討論串 (同標題文章)
DataScience 近期熱門文章
PTT數位生活區 即時熱門文章