公告版位
我是公告
上次 g0v 黑客松,有 NGO 帶著去監察院申請出來的幾名政治人物的政治獻金的掃描檔,想問問看 g0v 能怎麼做
一共有 94 個檔案,將近 2800 頁,包含馬英九、顏清標、吳育昇、丁守中等人的政治獻金的各種收入、支出登記資料

拿到的第一件事,當然是先把 PDF 轉成圖檔傳到雲端啦~ 於是我寫了一隻程式去把 94 個 PDF 檔一頁一頁換成圖片上傳到相簿中,並且產生一個 list.csv 來記錄每個檔案的位置

完成了第一步之後,再來就是要做影像分析了,因為我要找的是表格中的框線,這時可以用到的是 Hough Transform (霍夫轉換),這是霍夫在 1967 年提出,用來做直線檢測的技術,而 opencv 則有提供現成的 HoughLinesP function 可以抓出一張圖片內所有線段
於是我用 C 寫了一個程式,給他一張圖片位置,他會給我這張圖片內所有線段位置的資訊的 json
於是透過 opencv 處理後,原先的圖如下:
政治獻金原圖

opencv 抓出來的線段位置
opencv 抓出的線段位置

其實已經可以看出 opencv 抓的很準了
不過opencv 抓到的一條框線中其實可能是數十條小線段聚在一起,所以我必需要把這些線段 group 在一起
於是接下來我用 PHP 寫了一個程式,其中的 addLine method 在做的事就是把輸入的線段 (x1, y1) - (x2, y2) ,透過公式 r = x * cos θ + y * sin θ 算出他的 θ 和 r ,然後把 θ 和 r 接近的 group 在一起,這樣子就可以抓出正確的框線了 (小時候學的三角函數在這時候竟然變得很重要 XD),得到了各線段之後,再用 getCrossPoints method 取得各垂直和水平線段之間的交點,這些交點資訊就是每一個欄位的四個座標點了,於是我再把這些資訊匯出到一個 output.csv 檔案(還在持續更新中..目前正用 Amazon t1.micro 機器慢慢處理中),大家就可以拿這個檔案來利用了

我也拿了這個結果做了一個陽春的 demo ,可以點進去看每一份文件的表格欄位切的如何,畫面如下:

demo

也歡迎有人接力把這個處理好的資料做成 captcha 之類的服務,讓群眾可以幫忙來把這份監察院不願意數位化開放的檔案來民間數位化吧!
創作者介紹

Ronny's BLOG

榮尼王 發表在 痞客邦 PIXNET 留言(41) 人氣()

留言列表 (41)

發表留言
  • JETA890119@GMAIL.COM
  • 上課太無聊來幫忙做文字辨識...

    先說幾個問題吧,就是介面的快速鍵可以多增加一些,盡量只用鍵盤就能操作,這樣效率會比較快。

    然後我發現有人故意都點空白,不知道有何居心...
  • 訪客
  • 不知為何「這是空白」需要獨立設鍵。另外當別人的答案也是空白時無法直接確認。
  • 訪客
  • 我很容易厭煩,如果能加個成就系統(喂

    增添點樂趣那就好了
  • 訪客
  • 統計一下分析數量,用成每日擊殺數更好
  • Kuo YiPeng
  • 要小心刻意把數字寫錯的人...
    既然是公開的就沒辦法避免這種人,希望有對策
  • chodaict
  • 打了差不多10分鐘,覺得可以改善幾點:

    1. 匿名捐贈的出現機率太高了,應該要有快速鍵或文字輸入方塊記錄,可以不用一直重打。
    2. 鍵盤滑鼠間的切換有點麻煩,遇到空白要用滑鼠按「這是空白」,遇到有人輸入過的要按「這答案沒錯」。

    但真的是個很猛的方法,讓人工超準確辨識!
  • Helper
  • [建議功能]
    1. 回上一個:因為打太快筆誤(中英切換)
    2. 累計輸入/驗證次數:成就感是輸入的動力(如四五樓的建議~)
  • John
  • 這個太棒了!有幾點想請問

    1. 不知到能不能用OpenCV 直接辨識全空白?這樣就可以直接由程式做掉,不需要人工在辨識。

    2. 建議添加個人的成就經驗值,就可以讓這個枯燥的輸入更有趣!
  • William
  • 除了個人成就累積之外

    也可以考慮顯示完成百分比(已辨識欄位/已掃描欄位)
    讓大家有一種破關的感覺
    or
    增加校際對抗排名 XDD (喂)
  • William
  • 另外建議快速鍵也能夠有鍵盤輸入方式,目前都用滑鼠點,最好是手可以不用離開鍵盤
  • ctiml
  • #11 William,可以用鍵盤的 tab 鍵移動到需要的快速輸入按鈕,然後再按下空白鍵
  • Mars
  • 您好,現在是4/20 (Sat)的凌晨三點半,但我看到現有資料比數仍以每秒5~10筆的速度快速增加.....可能需要captcha,或同一IP一天最多輸入固定比數 @__@a
  • 只是路過
  • 需要Skip 剛剛遇到不會打的字...
    然後最好有 補上7個* (身分證字號)的 buttom
  • ※【沉默的大多數】※
  • 我需要成就系統,下次回來幫忙key資料最好還要有
    「歡迎,這是您第xxx次進入本網站,您已為本網站貢獻xxxxx筆資料!」
    不然我會沒辦法停止輸入(我大約打了1個小時吧...)
    此外我懷疑有人故意把姓名打錯,例如「王」打成「玉」...。
  • Abby Huang
  • 這真的超強的ㄚㄚㄚㄚㄚㄚ~~~~~~~~~原來三角函數是這樣用的~~~我居然跪著在打字了
  • 訪客
  • 還需要驗證一下答案,今天抓到不少錯誤,有人名但之前填入身分證號的;支出瞑目不同的;日期填錯的;日期卻寫支出名目的....
  • 葉庶均
  • 數字部分格式是否該包含逗點?
    EX:100,000 or 100000
  • 訪客
  • 那個不小心看走眼確認錯誤的,有無辦法返回啊? 還是只能等後面的人去改正... orz
  • Chao-Yuan Wu
  • 不過總覺得都是標楷體應該可以直接辨識?
  • 羅旭辰
  • 我想寫成android版本 請問要怎麼處理API比較好呢??
  • 訪客
  • 請問: 遇到顯示明顯錯字時是否該在輸入時更正?
    例如:南"頭"縣
  • David Pai
  • 對於界面有一個建議
    或許之後可以把操作分成三種
    1. 專門輸入尚未辨識過的欄位,只要專門做OCR就好了
    2. 專門確認錯誤的,把被輸入過,但還沒有確認過的撈出來,只要選兩個按鈕就好,一個正確一個錯誤
    3. 專門修正錯誤的,把被確認過,錯誤數大於正確數的撈出來,讓鄉民來修正

    不知道這樣會不會比較,茸泥大大做起來會不會很困難
  • David Pai
  • 續上
    這樣想的理由是,讓想做輸入的人專門去輸入,愛抓蟲的人專門去抓蟲,又或者輸入煩了膩了,可以改去確認錯誤,這樣應該可以避免人工OCR久了容易厭煩
  • 訪客
  • 請問可以增加<這答案沒錯>的鍵盤快捷鍵嗎? 一直點滑鼠很麻煩
  • Hank Chen
  • 請問 直接輸入文字 跟 確認答案的差異可不可以再更清楚一點。

    例如圖裡面的 09148861
    可以打辨識的文字 或者確認答案
    我是再次輸入 09148861 會比較好
    還是去按下 "這答案沒錯" 會比較好
    假如我是喜歡用快速輸入的使用者,我覺得直接輸入會比較快
    (不用把手移開去點滑鼠),或者確認答案可以考慮用個 CTRL+ENTER的快速鍵

    另外如果可以結合臉書的OPEN ID 可以統計個人成績
    我覺得會讓幫忙的人有成就感 XDD

    還有我剛剛試操作一段時間,部分圖片對同一個使用者有重複的現象(就是同一個人重複看圖片),建議是可以讓多人看這張圖片並確認,降低誤判率
  • 94131
  • 明明只按一下“這答案沒錯”,但它卻跑到下下一個。不知道被漏掉的那一個,是否有被確認到,或者,直接被當成確認過。
  • 訪客
  • 增加一個完成率如何?如果每隔一段時間上去點,發現完成率又微幅提高,會有種成就感啊~
  • yedda
  • 發現努力了三天到今天,很多區塊都已經有3人確認過,想知道要幾個人確認過才會確定是答案? 猜想也許有幾頁已經完成? 是不是其實需要在有些人去監察院印資料了? 如果擴展成一個持續的計劃,相信很快可以數位化完成。(當然需要持續加油)也希望可以向監察院施壓(查一下他們用掉多少預算)督促他們數位化。以上拙見。再次感謝你寫出這個程式!! 此外,建議大家數字有逗點的,請加上逗點。會計上以這樣表示金額的數字。
  • DesertGlacier
  • 到今天為止,還有經過六次確認過卻還是錯誤的答案。
    不知有否其他篩選方式來作核對,比如以已核對次數來做為選項,以登入FB帳號的方式來除錯。
  • Tony Atta Wu
  • 有確切錯誤的話 如何回報? (我有print screen下來)

    有看到一些3次確認的 , 卻沒法match
  • Chris Chan
  • 可以預先載入下一張圖嗎 ? 因為比較多的時間,都是等於下一張圖出來。
  • Chin Shou
  • #29
    那個文字辨識雖然很強大,可是實際用起來很悲劇...
    尤其用在表格類的文件上
  • 訪客
  • 有出現文字或數字只出現一半的情況
    不知是否能有改進方案 或著有跳過的選項
  • 訪客
  • 最新一批也有分割錯誤的現象, 可能要請管理者注意一下?
  • 訪客
  • 請問要在哪邊看到有新文件需要幫忙辦識的?
  • Couscous
  • 請問......資料輸錯怎麼改正? 有人會幫忙double check and 修改嗎?
  • Couscous
  • 請問...可以是縱向的呈現表格資料嗎?
    因為這些表格都是相同的格式....金額、日期、中文...等, 縱向的呈現資料有助於提升資料輸入速度~也可以降低誤打的機率~
  • 吳意義
  • 我記得ABBYY OCR軟體可以辦到,能省下很多時間,甚至可以把整個表格複製起來。
    唯一的缺點是...要錢
【 X 關閉 】

恭喜您是我們挑選到的讀者!希望能了解您的
【痞客邦部落格使用行為】

填問卷將有機會獲得痞客邦獨家好禮喔!(注意:關閉此視窗將不再出現。)

立即填寫取消