2017-02-09 36 views
1

我的目標是寫Rails的驗證類,它是能夠使用從名片的OCR識別文本,並能夠檢測串片段,並將它們分配到正確的屬性。我知道這不可能100%完美,但我希望儘可能接近。下面是我的做法至今: OCR驗證使用Rails構建一個名片掃描儀

  • 我:

    1. 我通過jQuery的navigator.mediaDevices
    2. 我掃描的圖像發送到第三方API服務,稱爲OCRSpace(https://github.com/suyesh/ocr_space寶石可以在這裏)掃描名片然後得到識別的文本片段的格式化陣列後面,例如:

    result = [['John Doe'], ['+49 160 123456'], ['Mainstr. 45a'], ['12345 Berlin'], ['CEO'], ['[email protected]'], ['www.business-website.de']]

    • 我然後通過陣列迭代並做一些檢查,例如

    • 使用people庫(https://github.com/mericson/people) 分裂在名字和姓氏(附加標題 或middlenames)名稱使用phonelib庫 (https://github.com/daddyz/phonelib)查找有效的電話號碼 和國際化字符串

    • 格式化做上的電子郵件地址的正則表達式的基本檢查,並將其存儲

    我現在懷念的是:

    1. 我怎麼能找出什麼名字字符串將可能是什麼?現在我讓用戶選擇它(在我的例子中,他將「John Doe」定義爲名稱,然後該庫執行其餘的部分)。我確定當使用正則表達式的時候會遇到衝突,像「Main Street」這樣的字符串也會被識別爲一個名字?
    2. 怎樣的正則表達式的郵政編碼和城市名稱的組合?我不是正則表達式專家,你知道任何有用的好消息嗎?目前找不到任何東西,除了一般的正則表達式檢查器。

    一般:你喜歡我的做法還是這樣太複雜?你知道一些看起來更好的最佳做法嗎?

  • 回答

    0

    不要認爲這是一個完整的答案,但它是太多了,使之成爲註釋。 您的工作方式似乎好了,但因爲有其他的方式,我不會使用OCR服務,Tesseract是最有名的。

    如果你這樣做,並且所有的結果都是可比較的,似乎並不難,因爲每一條信息都有它自己的特徵。

    您可以識別名稱部分,因爲它不會包含數字,其他部分可以,也可以期望包含它「Mr.」或「夫人」或者這樣而不是「大街」,「街道」等等。你也可以使用谷歌地圖來檢查正確的地址,有Ruby的寶石,但沒有經驗。

    你的員工寶石也可以幫助。

    您可以猜出所有這些,將結果呈現在您的網頁中並讓用戶確認或調整。

    您也可以通過以任意順序查找數字和字符串組合來RegExpr後城市組合,但您也可以使用像ZipCodes這樣的寶石來提供幫助。

    對不起,現在沒有時間現在測試一些正則表達式,我不發佈沒有測試的代碼。

    希望這是一些幫助,成功!

    +0

    謝謝。我已經寫了一些正則表達式,例如'''[0-9] {5}(\ s)[A-Za-zäüö\ s。] {3,20}'''對於zip + city組合來說是個不錯的選擇。但tesseract我不會推薦。我已經嘗試過了,它不是很堅固。我寧願使用新的谷歌雲服務。 – DonMB

    +0

    好的,很久以前我測試過tesseract,我建議它是因爲它是本地的而不是你依賴的服務(並且不是免費的)? – peter