iText - OCR 截图识字新版:重写算法,段落识别更精准 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
quietjosen
V2EX    分享创造

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

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

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

    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 的图标。
    ethusdt
        3
    ethusdt  
       2017-12-06 12:49:01 +08:00
    赞。

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

    ethusdt
        4
    ethusdt  
       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     Solana     2611 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 24ms UTC 15:20 PVG 23:20 LAX 08:20 JFK 11:20
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86