使用Rails构建名片扫描程序的OCR验证

时间:2017-02-09 13:02:37

标签: ruby-on-rails ruby ocr

我的目标是为Rails编写一个验证类,它能够使用名片中的OCR识别文本,并能够检测字符串片段并将它们分配给正确的属性。我知道这可能不是100%完美,但我希望尽可能接近。到目前为止,这是我的方法:

  1. 我通过jquery' navigator.mediaDevices
  2. 扫描名片
  3. 我将扫描的图像发送到第三方API服务,称为OCRSpace(这里有一个gem:https://github.com/suyesh/ocr_space
  4. 然后我得到一个未格式化的已识别文本片段数组,例如:
  5. result = [['John Doe'], ['+49 160 123456'], ['Mainstr. 45a'], ['12345 Berlin'], ['CEO'], ['johndoe@business-website.de'], ['www.business-website.de']]

    • 然后我遍历数组并进行一些检查,例如

    • 使用people库(https://github.com/mericson/people) 将名称拆分为firstname和lastname(另外还有标题 或中间名)使用phonelib库 (https://github.com/daddyz/phonelib)查找有效的电话号码 并将其格式化为国际字符串

    • 对电子邮件地址进行基本的正则表达式检查并存储

    我现在想念的是:

    1. 如何找出名称字符串可能是什么?现在我让用户选择它(在我的例子中,他定义" John Doe"作为名称,然后库完成其余的工作)。我确定在将正则表达式用作" Main Street"等字符串时会遇到冲突。那么还会被认为是名字吗?
    2. 如何正则表达ZIP-Code和City名称的组合?我不是正则表达式专家,你知道任何有用的好消息来源吗?到目前为止,除了一些正则表达式检查员之外,找不到任何东西。
    3. 一般来说:你喜欢我的方法还是这样太复杂了?你知道一些看起来更好的最佳实践吗?

1 个答案:

答案 0 :(得分:0)

不要认为这是一个完整的答案,但要做出评论太过分了。 你的工作方式似乎还可以,但我不会使用OCR服务,因为还有其他方法,Tesseract是最知名的。

如果你这样做并且所有结果都是可比较的,那么它似乎并不太难,因为每一条信息都有它自己的特点。

您可以识别名称部分,因为它不会包含数字,其余部分也是如此,您也可以将其包含在“Mr.”中或“太太”或者这样而不是“Str。”,“street”等。您也可以使用Google地图检查正确的地址,有Ruby宝石,但没有经验。

您的人物宝石也可以提供帮助。

您可以猜测所有这些,在您的网页上显示结果并让用户确认或调整。

你也可以通过查看任意顺序的数字和字符串组合来RegExpr后城市组合,但你也可以使用像ZipCodes这样的宝石帮助。

对不起,现在没时间测试一些正则表达式而且我没有测试就发布代码。

希望这是一些帮助,成功!