OCR (Optical Character Recognition,光学字符识别)就是将图片中的文字识别出来,让你可以编辑,复制等,免去了自己手动输入的麻烦。印象笔记、OneNote、DEVONthink Pro Office 等笔记类软件或服务都将其作为一大亮点功能,让用户可以搜索或复制图片中文字内容。
近日,GitHub 上有用户创造出一种 在 macOS 中「搜索图片中文字」的方法 。其效果是:某张截图或其它图片中含有文字,在经过处理后,可以由 Spotlight 或 Alfred 直接搜索图片中的文字,从而定位并打开图片。你也可以在右键菜单中打开图片文件的简介,复制识别的文字。
该方法是利用 Tesseract 实现的。Tesseract 是开源的 OCR 引擎,已有 33 年的历史,最早由惠普实验室开发,经过一翻波折后开源,现由 Google 赞助、开发、维护,支持 100 余种语言。相比目前流行的云识别,其识别质量稍显不足,但是基本满足一般的搜索需要。
需要安装的工具:
- Homebrew。如果不了解 Homebrew,可以先看下专题 Homebrew,Mac 应用管家
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余种)。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 自带功能,Hazel,Keyboard Maestro。这三种方法实现的效果是完全一样的,选择一种你喜欢或已购买的软件。
1. macOS 自带的文件夹操作设置(Folder Actions Setup)
下载 Image - OCR Process.workflow.zip ,解压后将 Image - OCR Process.workflow 放入 ~/Library/Workflows/Applications/Folder Actions/
中。然后,在系统偏好设置 → 键盘 → 快捷键 → 服务中勾选文件夹操作设置。
选中你想要设置的文件夹,右键菜单中选择服务 → 文件夹操作设置,然后在弹出的窗口中进行设置:
- 下面左图左上方,勾选两处以橙色下划线标注的选项。
- 点击左图下方的 +,打开如右图所示的菜单。
- 选择 OCR Process,点击附加。
- 关闭该窗口,设置完毕。
将一个含有文字的图片文件拖入该文件夹,稍等十来秒即可,试一试吧。
2. Hazel
下载 OCR Process.hazelrules后,双击导入,设置目标监控文件夹,勾选启用它。
3. Keyboard Maestro
下载 OCR Process.kmmacros 后,双击导入,修改文件夹路径为你需要的文件夹,然后点击右上方 ☓ 以启用。
对附有特定标签的图片自动处理
上面实现了对拖入指定文件夹中的图片自动处理,但是我需要处理的图片不可能都在一个文件夹中,而且一个文件夹中的图片也不一定都需要处理。那么我们可以利用 macOS 自带的标记(Tag) 与 Hazel 软件实现:只要一个图片被加上了 toOCR 的标签,无论它在什么位置,都会自动被处理,并改为 OCRed 标签。
首先,建立智能文件夹:
- 在访达(Finder)中按照下面左图所示设置搜索条件。
- 点击左图中的存储,保存为智能文件夹。默认是保存到
~/Library/Saved Searches
文件夹中,你可以自选位置。
这样,在任何时候打开该文件夹,都会看到目前所有的附有 toOCR 标记的图片。
然后,下载 OCR Process for toOCR.hazelrules后,双击导入,选择上面保存的智能文件夹,勾选启用它。
搜索
使用上面的方法,对图片文件处理后,就可以利用 Spotlight 和 Alfred 搜索——输入你印象中图片上的文字,即可找到该图片。具体的搜索方法和技巧,可以看我的前一篇文章 快捷添加注释,灵活使用搜索,帮你迅速找到软件和文件
附注
对一张图片进行文字识别,可能需要十几秒的时间。而且,时间会随着图片体积和其中文字数量的增长而增长,不建议一次性批量处理过多的图片。
这个方法的核心就是识别文字、添加为图片的注释。还可以用于解决其它问题,搜索只是一项,期待你将自己的用法留言写下来。
> 想用好命令行、成为 Mac 高手,欢迎访问专题 轻松玩转 Mac 命令 💻
> 下载 少数派 iOS 客户端、关注 少数派公众号,让智能设备更好用 ⚡️