V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
quietjosen
V2EX  ›  分享创造

iText - OCR 截图识字新版:重写算法,段落识别更精准

  •  
  •   quietjosen ·
    atjason · 2017-12-06 12:19:23 +08:00 · 3874 次点击
    这是一个创建于 2569 天前的主题,其中的信息可能已经有所发展或是发生改变。

    在介绍新版前,稍稍解释下背景知识。

    OCR 服务已经识别出文字了,iText 还要做什么?

    iText 发布后,受到很多朋友的欢迎和好评,解决了诸如扫描版 PDF 无法复制等问题。不过,也有一些朋友有些误解,觉得 iText 仅仅是调用了 OCR 服务,是个壳而已。其实,并不尽然

    虽然,我觉得用户并不需要知道这些软件背后的故事,只要软件好用即可。不过看来,既然有误解、有好奇,我还是简单提及一些吧。

    OCR 服务识别 后,得到的是这样的结果:各文字片断及其位置。

    但,如果根据这些信息还原出自然语境下的段落?这是很难的。

    比如,对于下面这张图:

    OCR 识别出来的结果是类似这样的(为了方便示意,我在各行间额外加了空行):

    3.1 新用户引导
    
    这事的矛盾之处在于:新用户和老用户的矛盾。
    
    进一步说,我追求程序的简洁。尤其是在用户对 itext 熟悉之后,并不需要程序有过多的描述。比如,文字按
    
    钮可以被图标按钮取代,用界面上根本看不到的快捷键进行操作,等等。可问题是,熟悉是需要一个过程,新
    
    用户需要多次操作后,才能掌握这些甚至有些晦涩的技巧。没有新用户,又何来老用户?
    
    这二者的矛盾,怎么解决呢?
    

    你可能觉得,这没什么呀,我自己手动把多余的换行符删掉不就可以了?你说的对。不过,这样的体验并不爽。

    为了让你用的爽、少了这步手动操作,我自己试着列出常见的段落分布,分析其中的位置规律,实现相应的识别段落的算法。

    目前来看,效果还是可以的:

    3.1 新用户引导
    
    这事的矛盾之处在于:新用户和老用户的矛盾。
    
    进一步说,我追求程序的简洁。尤其是在用户对 iText 熟悉之后,并不需要程序有过多的描述。比如,文字按钮可以被图标按钮取代,用界面上根本看不到的快捷键进行操作,等等。可问题是,熟悉是需要一个过程,新用户需要多次操作后,才能掌握这些甚至有些晦涩的技巧。没有新用户,又何来老用户?
    
    这二者的矛盾,怎么解决呢?
    

    注:以上是 iText 识别并优化后的结果,未加手工编辑;其中的标点符号也已修正。

    iText 第一版发布后,收到用户反馈的一些图片,一些段落的识别有问题。于是,我花了不知道几个小时,重写了段落识别相关的算法。目前,对于中英文混排,在使用腾讯服务时,段落识别的效果已经很好了。

    不过,并不完美。主要是在一些场景下,除非结合语义识别,否则是无法仅根据位置信息来划分段落的。如果你发现有问题的图,欢迎发给我,我来优化算法。

    下面给出一些典型的含段落的图,大家可以自己试试。

    图 1:https://ws4.sinaimg.cn/large/006tKfTcgy1fm6c8xxge5j30mw0q67i2.jpg

    图 2:https://ws1.sinaimg.cn/large/006tKfTcgy1fm6c99zhzij30te0wuahg.jpg

    识别后的文本优化

    另外,段落识别只是对 OCR 服务优化的一部分,还有文本的优化,比如中英文之间需要增加空格等等。

    如果说段落识别很麻烦,文本优化则更多麻烦,根本的原因在于:需要对内容进行识别。比如:

    • 英文段落首字母大写,这规则没错吧,但对于 "iPhone is a good phone." 这样的情况,iPhone 是特定词汇,i 不应该大写。
    • 中文文字后的 '.' 应该使用全角的 "。",这规则也没错吧,但对于『今天天气真热啊...』,明显又不应该替换;亦或是 JSON 数据『"name": "张飞"』中的 " 也不应该被替换。
    • 以及其他无数多的例子。

    没办法,只能有所取舍。目前,iText 主要完成了这些部分的优化:

    • 中文环境使用全角标点符号
    • 中文与英文字母、数字间增加空格
    • 删除中文字符间、英文字符与标点符号间的多余空格
    • 英文首字母大写

    手动选择 OCR 服务

    目前,如果你在国内使用 iText,默认使用的是腾讯的服务;国外则使用 Google.

    如果你有 Google 信仰、或者需要识别日文等其他语言,可以 右击 iText 菜单栏图标,手动选择使用腾讯或 Google OCR 服务

    不过,从实测和目前优化的情况来看,中文还是建议使用腾讯;大家可以自行测试。

    下载

    目前新版已提交 Mac App Store,还在审核。同时,欢迎大家下载 体验版

    体验版说明:

    • 有效期 7 天
    • 功能不限,可无限次识别
    • 不支持在体验版中订阅高级版(也无必要)

    如果你觉得 iText 还可以改进,欢迎:

    第 1 条附言  ·  2017-12-07 11:14:56 +08:00

    iText 新版重写了算法,段落识别更精准:去 Mac App Store 下载

    高级版继续 6 折,持续至 12.12

    6 条回复    2017-12-07 11:13:27 +08:00
    oott123
        1
    oott123  
       2017-12-06 12:25:02 +08:00 via Android
    赞楼主。iText 给了我很多灵感,特别喜欢~精神上支持一下~

    (不过如果有人和我一样不喜欢后台常驻 menubar 的逻辑,而喜欢更 geek 的 Alfred,并且不在意手动重新排版,也可以试试我的: /t/412228
    quietjosen
        2
    quietjosen  
    OP
       2017-12-06 12:27:00 +08:00
    @oott123 其实,你可以:

    - 用 ⇧⌘1 快捷键截图
    - 用 ⇧⌘R 展示上次识别结果

    进而,使用 Bartender 等工具,隐藏 iText 在 Menubar 的图标。
    FaiChou
        3
    FaiChou  
       2017-12-06 12:49:01 +08:00
    赞👍。

    免费 7 天,7 天过后重装,会不会又可以使用: )

    FaiChou
        4
    FaiChou  
       2017-12-06 12:50:46 +08:00


    的确有优化,起码表情没有被识别了~
    quietjosen
        5
    quietjosen  
    OP
       2017-12-06 13:00:36 +08:00
    @FaiChou 你太坏了…考虑到我是个奸商,自然是不行的 😂
    quietjosen
        6
    quietjosen  
    OP
       2017-12-07 11:13:27 +08:00
    iText 新版重写了算法,段落识别更精准: https://itunes.apple.com/cn/app/id1314980676?ls=1&mt=12&at=1000lv4R&ct=iText_me

    高级版继续 6 折,持续至 12.12
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   4418 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 33ms · UTC 01:03 · PVG 09:03 · LAX 17:03 · JFK 20:03
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.