OCR (Optical Character Recognition,光学字符识别)就是将图片中的文字识别出来,让你可以编辑,复制等,免去了自己手动输入的麻烦。印象笔记OneNoteDEVONthink Pro Office 等笔记类软件或服务都将其作为一大亮点功能,让用户可以搜索或复制图片中文字内容。

近日,GitHub 上有用户创造出一种 在 macOS 中「搜索图片中文字」的方法 。其效果是:某张截图或其它图片中含有文字,在经过处理后,可以由 Spotlight 或 Alfred 直接搜索图片中的文字,从而定位并打开图片。你也可以在右键菜单中打开图片文件的简介,复制识别的文字。

过程演示
过程演示

该方法是利用 Tesseract 实现的。Tesseract 是开源的 OCR 引擎,已有 33 年的历史,最早由惠普实验室开发,经过一翻波折后开源,现由 Google 赞助、开发、维护,支持 100 余种语言。相比目前流行的云识别,其识别质量稍显不足,但是基本满足一般的搜索需要。

需要安装的工具:

  1. Homebrew。如果不了解 Homebrew,可以先看下专题 Homebrew,Mac 应用管家
  2. Tesseract。安装命令:

     brew install tesseract
    
     # 添加中文语言识别数据包
     wget -O /usr/local/share/tessdata/chi_sim.traineddata https://raw.githubusercontent.com/tesseract-ocr/tessdata/3.04.00/chi_sim.traineddata
    

    注:brew install tesseract --with-all-languages 可以在安装 tesseract 的同时安装所有语言识别数据包(100余种)。

  3. ImageMagick。安装命令:brew install ImageMagick,这是为了对图片进行预处理,以改善识别效果。

GitHub 上的脚本经我改进后如下,这也是下文中所有方案的核心部分:

imgFile=$1

# 预处理并识别文字
# sed 是为了转义识别结果中的英文双引号,会引起错误
CONTENTS=$(/usr/local/bin/convert "$imgFile" -magnify -alpha remove - | /usr/local/bin/tesseract -c language_model_penalty_non_dict_word=0.8 stdin stdout -l eng+chi_sim  | sed "s/\"/\\\\\"/g" )

# 将识别结果设置为图片的注释
cmd1="set theComment to \"$CONTENTS\""
cmd2="tell application \"Finder\" to set comment of (POSIX file \"$imgFile\" as alias) to theComment"
/usr/bin/osascript -e "$cmd1" -e "$cmd2"

手动处理指定图片

下载 OCR Process.workflow.zip ,解压后将 OCR Process.workflow 放入~/Library/Services/中,在图片文件的右键菜单中,点击服务中的 OCR process 就会开始处理 —— 识别图片中文字,并添加为图片文件的注释。之后可通过 Spotlight 和 Alfred 搜索。

服务
服务

对指定文件夹中的图片自动处理:

实现手动方法后,我想更省事怎么办?那就对拖入指定文件夹中的图片自动处理。也就是说,假如有文件夹 A,经设置后,只要你将图片拖入该文件夹,就自动进行识别处理。
实现的途径有三种可选:macOS 自带功能,HazelKeyboard Maestro。这三种方法实现的效果是完全一样的,选择一种你喜欢或已购买的软件。

1. macOS 自带的文件夹操作设置(Folder Actions Setup)

下载 Image - OCR Process.workflow.zip ,解压后将 Image - OCR Process.workflow 放入 ~/Library/Workflows/Applications/Folder Actions/ 中。然后,在系统偏好设置 → 键盘 → 快捷键 → 服务中勾选文件夹操作设置

启用文件夹操作设置
启用文件夹操作设置

选中你想要设置的文件夹,右键菜单中选择服务 → 文件夹操作设置,然后在弹出的窗口中进行设置:

  1. 下面左图左上方,勾选两处以橙色下划线标注的选项。
  2. 点击左图下方的 ,打开如右图所示的菜单。
  3. 选择 OCR Process,点击附加。
  4. 关闭该窗口,设置完毕。

将一个含有文字的图片文件拖入该文件夹,稍等十来秒即可,试一试吧。

文件夹操作设置
文件夹操作设置

2. Hazel

下载 OCR Process.hazelrules后,双击导入,设置目标监控文件夹,勾选启用它。

Hazel
Hazel

3. Keyboard Maestro

下载 OCR Process.kmmacros 后,双击导入,修改文件夹路径为你需要的文件夹,然后点击右上方 以启用。

Keyboard Maestro
Keyboard Maestro

对附有特定标签的图片自动处理

上面实现了对拖入指定文件夹中的图片自动处理,但是我需要处理的图片不可能都在一个文件夹中,而且一个文件夹中的图片也不一定都需要处理。那么我们可以利用 macOS 自带的标记(Tag) 与 Hazel 软件实现:只要一个图片被加上了 toOCR 的标签,无论它在什么位置,都会自动被处理,并改为 OCRed 标签。

首先,建立智能文件夹:

  1. 在访达(Finder)中按照下面左图所示设置搜索条件。
  2. 点击左图中的存储,保存为智能文件夹。默认是保存到 ~/Library/Saved Searches 文件夹中,你可以自选位置。

这样,在任何时候打开该文件夹,都会看到目前所有的附有 toOCR 标记的图片。

智能文件夹
智能文件夹

然后,下载 OCR Process for toOCR.hazelrules后,双击导入,选择上面保存的智能文件夹,勾选启用它。

搜索

使用上面的方法,对图片文件处理后,就可以利用 Spotlight 和 Alfred 搜索——输入你印象中图片上的文字,即可找到该图片。具体的搜索方法和技巧,可以看我的前一篇文章 快捷添加注释,灵活使用搜索,帮你迅速找到软件和文件

附注

对一张图片进行文字识别,可能需要十几秒的时间。而且,时间会随着图片体积和其中文字数量的增长而增长,不建议一次性批量处理过多的图片。

这个方法的核心就是识别文字、添加为图片的注释。还可以用于解决其它问题,搜索只是一项,期待你将自己的用法留言写下来。

> 想用好命令行、成为 Mac 高手,欢迎访问专题 轻松玩转 Mac 命令 💻

> 下载 少数派 iOS 客户端、关注 少数派公众号,让智能设备更好用 ⚡️