article_image

自 macOS 12 以降,OCR(Optical character recognition,光学字符识别)已经成为 macOS 系统级功能。然而,距离随时随地抓取文字,还有一段路需要走。

首先是抓取文字的范围,系统仅支持网页、图片和 PDF,相较之下,截图可以说是一剂兜底方案,对所有 App 都来者不拒;其次,语种也是个问题,识别一种语言并非难事,但是在多语言环境下,要把 OCR 做得考究并不轻松。OCR 工具通常要求预设一个主要语言,比如中文(包括中英混排),可一旦遇到小语种,就要去设置里调整语言参数,用完还得记着改回中文。我曾经识别过一张日本插画的落款,随后识别其他内容总是出乱码,才想起来忘了改回中文,丢三落四。

理想的截图 OCR 工具,应当本身支持几乎所有语种,同时又可以指定常用语言,让人驰骋多语言的网络环境。本文介绍一套基于 Keyboard Maestro 的截图 OCR 动作,满足前述需求,免去屡改参数之苦。

Alt text
截图 OCR 识别文字

Keyboard Maestro 动作下载(GitHub)

本组动作快捷键为 ⇧Shift-⌘Command-0,按下后将出现 Palette 菜单,汇集常用语言,选择其一即可开始工作;等你截好图后,Keyboard Maestro 会主动识别其中的文字并存入剪贴板。

Keyboard Maestro 中的 OCR 引擎:tesseract

可靠的 OCR 引擎是截图 OCR 基础。Keyboard Maestro 内置 tesseract,该离线 OCR 引擎有三十多年的开发历史,目前开源并由 Google 赞助开发(所以你不需要“内购解锁”)。我们最在意的是,第一,tesseract 支持简体中文,同时也能识别上百个小语种,正中多语言环境之下怀。

Alt text
tesseract 支持上百种语言

免费、离线、多语言,万事俱备,只欠东风。tesseract 自称开箱即用(out of the box),但终归需要一些代码知识,而且每次升级,往往要重新调整脚本;经过 Keyboard Maestro 的打包优化,内置其中的 tesseract 才算得上开箱即用:不需要编写任何代码或输入任何命令行,Keyboard Maestro 将一个命令行工具彻底图形化,点几次鼠标选取目标语言(需要联网下载语言包),就完成了 OCR 引擎的配置。你可以从前文提供的动作中随意复制一个1,试着更改其预设语言。

Alt text
Keyboard Maestro 将 tesseract 命令行做成了图形选单

大致了解 tesseract 后,先将 Keyboard Maestro 动作的其余步骤搁置一旁,直奔核心问题:多语言环境。在技术上,几乎很难自动识别图中文字的语种(有上百个语种,计算量可想而知),一般要求预先指定。为了照顾日文、韩文、法语等小语种,需要一种方便的交互方式,以供随时选择语言。这时候,就轮到 Palette 粉墨登场,这相当于一个悬浮工具栏,可以把常用功能搁在一个地方,方便取用(不熟悉 Palette 的读者可以阅读我之前的 文章)。

Alt text
多种语言可选

前文提供的 Keyboard Maestro 动作共享了同一个快捷键 ⇧Shift-⌘Command-02,按下之后即可显示所有配备这一键位的动作。随后可以手动点选语言,也可以按下目标语种的前一两个字母(Keyboard Maestro 已将这些字母高亮显示)。后续增加的动作建议延续同一快捷键,这样无论增添多少语种,都不会加重背诵快捷键的负担。

串联截图和 OCR

Keyboard Maestro 内置 OCR 引擎可以读取多个渠道的图片,包括图片文件或者系统剪贴板。前者是最朴素的思路,置截图于桌面,用完再删除,貌似简捷,实则操作复杂,需要层层设计、避免误删桌面文件3;从系统剪贴板获取图片会更简单漂亮,也让“截图 OCR”名副其实。

Keyboard Maestro 动作由一系列步骤组成,每一步执行完毕即进入下一步,但是截图操作有点特殊,我们总要比划一下、框出合适的区域,而在默认情况下,还没来得及比划,就直接进到了 OCR 阶段,此时当然识别不到屏幕上的文字。对此,需要用上“Pause”(等待)模块,等待截图操作完成,完整流程如下图紫色部分所示:

  1. 模拟截图并保存到剪贴板的快捷键 ⌃Control-⇧Shift-⌘Command-4
  2. 先等待按下光标,再等待抬起光标,这一落一起之间就是整个框选屏幕区域的过程,你可以自己试一试,这两个小动作正好是截图操作的起点与终点;
  3. 稍微等待一秒,因为截图的分辨率可能很高,需要一些时间写入剪贴板,如果电脑较新或许不需要这段时间,可自行调整;
  4. 进入 OCR 环节。
Alt text
获取截图的步骤

OCR 识别引擎贡献九分蛮力,Keyboard Maestro 步骤串联提供一分巧劲,整个截图 OCR 动作至此完成。

Keyboard Maestro 刚刚引入 OCR 功能时,不少用户奔走相告,试着制作截图 OCR 动作,但是都不如意,最大的坎儿就是连不上截图和 OCR 两个步骤,其实抓住光标起落这种标志性动作,就能让截图 OCR 动作顺利运作起来。这种对日常工作流的观察也是一种乐趣,一旦找到了关键环节,往往不需要写代码就能做出流畅的自动化动作。

小结

OCR 在不少工作流程中都是核心环节:将图片 PDF 转换为可复制的文档,需要 OCR;Evernote 搜索图中文字的功能,基于 OCR;就连最简单的“抓取屏幕文字”,也离不开 OCR。

支持 OCR 的工具日新月异,本身是一件好事,但是林子大了,难免出现各自为政的情况,识别质量参差不齐、支持语言范围各不相同……这时候,亟需一个统一的、跨应用的解决方案。macOS 原生支持居功厥伟,一般浏览图片和 PDF 时,很少需要其他工具;不过,在多语种和截图识别两个方向上,可能还是要 Keyboard Maestro 这类第三方工具帮一把。

本文是 Keyboard Maestro & OCR 的一个案例,打通了获取截图和 OCR 处理这两大关键步骤。在文本流程上可添砖加瓦,例如配合文字格式清理动作,在识别屏幕文字后删除多余空格和换行符;或者,截图后旋即翻译,等等(读者可以和我交流这类功能)。总之,借助 Keyboard Maestro 这样的自动化工具,可以让 OCR 成为一个“组件”而为我所用,融入不同的工作流。


  1. 即“Duplicate”,选中动作后按下快捷键 ⌘Command-D
  2. 没有硬性要求,只是方便和系统截图快捷键 ⇧Shift-⌘Command-3⇧Shift-⌘Command-4 组成一套姊妹快捷键。
  3. 具体言之,需要保证生成的截图文件命名唯一,通常是打时间戳,总之需要修修补补,正所谓“把简单的事情弄复杂很简单,把复杂的事情做简单很复杂”。

author_avatar

Lawyer, macOS/iOS Automation Amateur