![f00afdc0bafdc38a6f78cc8bff407cd5.png](https://i-blog.csdnimg.cn/blog_migrate/884d9c2f889d1ecd26f55627b9e9bf71.jpeg)
Keyboard Maestro(以下简称 KM)是 Mac 上一款非常强大的自动化软件,只要是操作上具有一定重复性的操作,理论上都可以通过在 KM 中多个动作(Action)的组合重现,可以大大提升工作效率,减少在重复性任务上花费时间。
相信你在使用 Mac 的时候也碰到过需要将一张图片中的中文提取的时候,不过不像 iOS 上丰富的 OCR App(如白描、WPS for iOS、讯飞输入法等等),Mac 并没有太多的选择,唯一的 iText 却有着每月 20 次识别的限制,20 次的限制足以让我失去下载的动力,好在通过 KM 便可以免费解决我对于中文 OCR 的需求。
什么是 OCR?
提取图片中文字背后的技术就是 OCR。OCR 全称为 Optical Character Recognition,中文翻译为光学字符识别。
直接上完整动作(Macro)截图,并接下来将对每一个动作做分步解析:
![04b4c9910321d8853f08a8c2b82e98c9.png](https://i-blog.csdnimg.cn/blog_migrate/5b2a62b0b5c1049525c76433b1a5f766.jpeg)
分步解析:
0. TRIGGER
以快捷键触发整个动作。
1. TYPE A KEYSTROKE
使用截图快捷键调取截图功能捕捉要识别的“文字”,如暂未安装第三方截图 App,系统默认的截图快捷键如下:
Command + Control + Shift + 4
截取部分屏幕保存至系统剪贴板Command + Control + Shift + 3
截取整个屏幕保存至系统剪贴板Command + Shift + 4
截取部分屏幕保存至桌面Command + Shift + 3
截取整个屏幕保存至桌面
2. PAUSE UNTIL
由于截图的快捷键动作一旦被执行,KM 将直接跳转至下一个动作,所以我们需要让 KM 等待我们执行完整个截图动作,等待的条件是剪贴板内容变为图片时继续。
这个动作有一个个小小的 bug。为了图方面,等待的条件简单地设置为了剪贴板内容变为图片时继续,但是如果剪贴板中内容原来就是图片那么这个 Macro 就无法正常执行,不过鉴于剪贴板中是图片的概率较小,所以该 Macro 在大多数情况下都可以正常使用。如果当前剪贴板真的是图片,那么就临时复制一段文字。
当然也欢迎各位提出优化的建议 XD
3. WRITE TO A FILE
将剪贴板的图片保存至本地文件夹。文件保存路径及名称自行设定即可,但是下个动作就会用到这个你设定的这个完整路径。
4. EXECUTE A SHELL SCRIPT
运行一段代码。这个动作是整个 Macro 最关键的一部分,代码部分选用 Python,OCR 识别服务器选用百度 OCR。选择百度的理由很简单,因为免费的额度非常之高,高达每日 5 万次调用的免费额度,对比前面提到的 iText,知道 20 次/月的次数是多么少了吧 ♂️
具体代码如下:
#!/usr/local/bin/python3
# -*- coding: utf-8 -*-
# encoding=utf8
from aip import AipOcr
import sys,io
sys.stdout=io.TextIOWrapper(sys.stdout.buffer,encoding='utf8')
""" 你的 APPID AK SK """
APP_ID = 'xxxxxxxxx'
API_KEY = 'xxxxxxxxx'
SECRET_KEY = 'xxxxxxxxx'
client = AipOcr(APP_ID, API_KEY, SECRET_KEY)
def get_file_content(file):
with open(file, 'rb') as fp:
return fp.read()
def img_to_str(image_path):
image = get_file_content(image_path)
result = client.basicGeneral(image)
if 'words_result' in result:
return u'n'.join([w['words'] for w in result['words_result']])
print(img_to_str(image_path='填入第3步中的完整路径'))
注意:
- 该代码基于 Python 3,请确保电脑上已经安装 Python 3,安装方式跟普通 pkg 安装软件没有区别,不难
- Python 3 安装完毕之后,在终端 Terminal 中输入
pip3 install baidu-aip
安装百度 API - 代码中
App_ID
、API_KEY
以及SECRET_KEY
可以使用自己注册的百度云账号生成的信息替换,不过鉴于本文的阅读量,我就直接将我的信息放上了,应该额度完全是够用的 - 所以,作为读者的你需要做的就是将最后一行代码单引号内的内容替换为第三步的完整路径即可
如何注册百度云并生成秘钥
注册百度云,并获取关键的 App_ID
、API_KEY
以及SECRET_KEY
网络上已经有了现成的教程文章,请参考下方链接:
![80a1ac3b9f49af122e91b6a6b90b7bc8.png](https://i-blog.csdnimg.cn/blog_migrate/5203adb0b550b6200c2be349a51ac163.png)
5. NOTIFICATION
OCR 识别成功之后发送通知消息。
6. DELETE A FILE
将之前临时在磁盘上保存的截图文件给删去,所以此处的路径及文件名称需要与第 3 步动作中的内容一致。
尾巴
至此,我们已经可以非常方便且迅速地在 Mac 上实现中文 OCR 识别了,本文完整动作可以于下方链接下载:
http://qr18.cn/AOuvri
对于 Keyboard Maestro,你有什么需求或者想法吗?欢迎一起讨论。