🔍给 Bob 写了个本地 OCR 插件
问题
升级 macOS 27 之后,
Bob 的离线 OCR 经常要等几十秒才出结果,有时候直接报错:有时候又是秒出,很不稳定。
原因
Bob 的离线 OCR 用的是系统的
Vision,Vision 第一次用某个模型的时候要在 ANE 上编译,一个模型 20~50 秒,编译好缓存在 ~/Library/Caches/<程序名>/com.apple.e5rt.e5bundlecache/。问题是这个缓存会被系统删掉。磁盘可用空间低于 15G 左右的时候,系统的
deleted 进程会自动清缓存,这个目录也会被清空,日志里能看到:缓存被删了之后,已经加载过模型的进程会一直报上面那个 13 的错,新进程则要重新编译,所以就出现了有时候报错、有时候等很久。
我一开始以为是沙盒的问题(Bob 是 App Store 版),后来自己写的服务也报了同样的错,才查到是磁盘空间不够,当时只剩 11G。
Bob 1.21.1 加了一个子进程来识别,但是空闲 10 分钟就会退出,下次又要重新编译。在 Bob 里还翻到一个隐藏开关
AppleOCRChannelTidyDisabled,试了没用。最简单的解决办法:磁盘留 20G 以上的空间。
插件
写了一个本地服务加 Bob 插件:
- 服务用 Swift 写的,常驻后台,模型加载一次一直用
- 每分钟检查一次缓存,被系统清掉了就自动重启,重新编译
- 插件带了文字坐标,Bob 的图片翻译也能用
速度一般在 0.1~0.3 秒,4000x4000 的满屏文字 1 秒左右,服务占 90M 左右内存。图片只在本机传,不联网。
安装
- 装命令行工具,装过 Xcode 的可以跳过:
xcode-select --install
- 装本地服务:
- 到 Releases 下载
.bobplugin,双击安装
- Bob 偏好设置 → 服务 → 文本识别,添加「本地 OCR」拖到第一位,点「验证」
第一次安装要编译模型,大概 1~2 分钟,可以看日志,出现
预热完成 就可以用了:
效果

出现的问题
第一次截图还是很慢
Vision 的模型是按文字分的,中英日韩俄泰不用额外编译,阿拉伯文、印地文要各自单独编译一个,我这台机器上一共 5 个。一开始预热只跑了一张中文图,结果在 Bob 里截的第一张图又等了 28 秒。现在启动的时候会把这几种文字都跑一遍。
升级系统之后
缓存目录是按系统版本分的(比如
26A434),升级 macOS 之后服务会自己重新编译一遍,1~2 分钟,这段时间截图会慢。项目地址:https://github.com/kikohz/bob-plugin-local-ocr,有问题可以提 issue。
Loading...