CommunityImagegithub.com

macOS Vision 本地 OCR

利用 macOS Vision 框架的本地 OCR 技能。触发词:OCR, 识别图片文字, 提取截图内容, 扫描件转文字, 图片转文字, 扫描版PDF转文字, read text from image/screenshot/photo/scanned PDF。本地优先、离线可用;数据敏感或机器离线时优先于云端 OCR。

Qu'est-ce que macOS Vision 本地 OCR ?

这是一个面向 macOS 平台的 AI Agent 技能,专门用于将图片或扫描版 PDF 中的文字提取为纯文本。它完全依赖 macOS 系统内置的 Vision 框架(通过 `macocr` 命令)在本地完成 OCR 识别,无需上传数据,因此非常适合处理敏感信息或在离线环境下工作。该技能支持多种图片格式(PNG、JPG、JPEG、HEIC、TIFF)以及扫描版 PDF,并提供了丰富的参数调整选项,如语言设置、区域裁剪、图像放大、旋转校正等,以应对不同场景下的识别挑战。对于识别率低的情况,技能还给出了从简单到复杂的逐步优化策略,包括图像预处理(使用 Python PIL)和多版本投票校验,特别强调了表格数据识别后的数字二次确认。平台支持方面,该技能仅适用于 macOS 13+,并且可以通过 `install.sh` 脚本自动编译或使用预编译的二进制文件进行安装,安装后可通过 `selftest.sh` 进行端到端验证。

Compatible avec~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/GreenWich-art/agent-skills/tree/HEAD/skills/macos-vision-ocr

Installed? Explore more Image skills: steipete/songsee, affaan-m/frontend-design, mattpocock/improve-codebase-architecture · View all 6 →

Demander à votre IA préférée

Ouvre une nouvelle conversation avec cette compétence d'agent déjà préchargée.

Documentation

Que fait macOS Vision 本地 OCR ?

本 Skill 指导你把用户提供的图片/PDF 转成文字:用 macOS 系统自带的 Vision 引擎 (macocr 命令)在本地完成识别,不上传任何数据。

环境检查(必须先做)

在调用任何 OCR 命令之前,先执行以下检查,任一不满足即停止并按说明响应:

[ "$(uname -s)" = "Darwin" ] && echo OK-macOS
command -v macocr || ls "$HOME/.local/bin/macocr"
  • uname 不是 Darwin:本工具仅支持 macOS。不要尝试安装或编译,直接告知用户 该 Skill 只在 macOS 上可用,并建议改用其他 OCR 方案。
  • macocr 不存在:引导用户在本包目录运行 ./install.sh(编译需 Xcode Command Line Tools;Apple Silicon 无编译环境时自动回退到随附的预编译二进制)。安装完成后用 sh scripts/selftest.sh 做一次端到端自检,通过后再继续。

安装与自检都完成后,每次会话无需重复执行。

执行任务的标准流程

按以下步骤处理用户的 OCR 请求,不要跳步:

  1. 确认输入类型。用户给的是图片(png/jpg/jpeg/heic/tiff)直接进第 3 步; 是扫描版 PDF(无文字层)先进第 2 步转图。

  2. PDF 转图(仅扫描版 PDF 需要)。用系统自带的 sips 渲染,144dpi 起步:

    sips -s format png -s dpiHeight 144 -s dpiWidth 144 输入.pdf --out /tmp/p1.png
    

    注意 sips 只处理单页;多页 PDF 需逐页指定或有 pymupdf 时用 4 倍矩阵渲染 (小字号课件效果显著更好,见「扫描版 PDF 怎么用」)。

  3. 运行识别。默认命令即可覆盖绝大多数场景:

    macocr <图片路径>            # 多图可依次列出,输出用 === 分隔
    

    按场景追加参数(参数表见下)。识别结果是纯文本,已按视觉行序排好。

  4. 结果交付。直接向用户展示识别文本;表格/数字密集的结果必须提醒用户 关键数字需二次确认(见「表格数据的特殊注意」)。

参数速查

参数用途
--fast关闭语言纠错。表格与数字场景推荐,避免数字被"纠错"成奇怪的值
--lang zh-Hans+en-US默认中英混排。纯英文设 en-US 提速;繁体用 zh-Hant
--rect x,y,w,h只识别矩形区域(左上原点,像素)。大图里只提某个表格时使用
--upscale N模糊小图(宽 <1000px 的转发图、旧扫描件)先 Lanczos 放大 N 倍(1.0–4.0)。只在普通模式识别率差时逐级试 2 → 3,清晰大图盲目放大会引入笔画粘连
--orientation up|left|right|180照片旋转/倒置时手动转正。Vision 不按 EXIF 自动转正,侧拍图必须用这个
--list-langs列出本机支持的识别语言(用于安装自检,输出应含 zh-Hans)

识别率低时的处理顺序

按成本从低到高尝试,不要一上来就上复杂方案:

  1. 找原图:聊天转发图识别率极低,先请用户提供原始文件
  2. --rect 圈出目标区域,减少噪声
  3. --upscale 2(模糊小图)
  4. --fast(表格数字场景)
  5. 图像预处理(裁剪 + 灰度 + 自动对比度 + 锐化 + 二值化),示例见下
from PIL import Image, ImageOps, ImageEnhance
im = Image.open("src.JPG")
im.crop((x0, y0, x1, y1)).resize((w*2, h*2), Image.LANCZOS)   # 裁剪 + 放大
ImageOps.autocontrast(im.convert("L"))                         # 灰度 + 自动对比度
ImageEnhance.Sharpness(im).enhance(2.0)                        # 锐化
im.convert("L").point(lambda p: 255 if p > 128 else 0)         # 二值化

多版本投票:对同一个表格跑 2–3 种预处理,取一致部分,不一致的数字单独复核。 交叉验证:整行/整列求和能对上基本可信;对不上说明某个数字错了。

为什么「照片」App 的实况文本看起来比裸调 API 准?

同一个 Vision 引擎,差距来自前后处理,不是模型本身:

  1. 方向:「照片」按 EXIF 转正再识别;裸调 API 默认按 .up 处理 → 用 --orientation 补上
  2. 分辨率:「照片」用全分辨率原图;工作流里流转的常是压缩预览图 → 永远优先用原始文件
  3. 隐式降采样:NSImage 按「点」出图,@2x/@3x 截图与部分 HEIC 会被砍掉一半像素 → 本工具遍历 rep 取最大像素位图
  4. 竖排文本:实况文本能处理竖排;裸调用会把竖排切成碎行 → 本工具自动检测并做置信度仲裁
  5. 交互红利(无法完全复制):实况文本允许点选局部,感知上"错得少";命令行一次吐全文,任何错字都显眼

结论:引擎相同,管线决定上限。

表格数据的特殊注意

OCR 在表格上最容易出错:小数点被吞(. → ,)、相邻列并成一串、行混淆。 关键数字必须二次确认:有 PDF 原件就抽文字层对照;只有照片就靠多版本投票 + 行列逻辑校验。

何时不用本工具

场景更合适的选择
所用 AI 模型本身支持读图直接让它看图,不必绕 OCR
需要复杂版面还原(多栏、公式、表格框线结构)MinerU 等版面级解析服务(数据会上云)
整份扫描 PDF 批量转文字且可上云云端 OCR 服务的批量接口

规则:本地优先,数据不外发;确实需要更高精度再上云,且先确认数据可以外发。

验证与排错

  • 安装后自检:sh scripts/selftest.sh(用包内测试图端到端验证,输出 PASS/FAIL)
  • 语言列表不含 zh-Hans:系统语言数据不完整,极少见;检查 macOS 版本是否 ≥ 13
  • 输出为空或全错:先确认图片本身可读(sips -g pixelWidth -g pixelHeight 图片), 再按「识别率低时的处理顺序」逐级尝试

系统要求

  • macOS 13+(automaticallyDetectsLanguage 需要 13.0)
  • 编译需要 Xcode Command Line Tools(xcode-select --install); 或使用随附的 Apple Silicon 预编译二进制(scripts/macocr-arm64,ad-hoc 签名)

包内文件说明

文件用途何时需要
install.sh安装 macocr(编译优先,预编译兜底)环境检查发现 macocr 不存在时
scripts/selftest.sh + scripts/selftest.png端到端自检(脚本 + 自带测试图)安装后验证;排查"识别异常"时先跑它确认工具本身正常
scripts/vision_ocr.swift源代码(约 200 行,可审计)需要自行编译或审计时
scripts/macocr-arm64Apple Silicon 预编译二进制无 swiftc 的 Apple Silicon 机器,由 install.sh 自动使用

Individual skills in this repo

This repo contains 4 individual skills — each has its own dedicated page.

GreenWich-art/agent-skills

桌面 GUI 操作的统一编排入口。当用户要求操作一个只有图形界面的应用(改设置、点按钮、填表单、操作无 CLI/连接器的软件)时使用此 skill。提供四级能力:①路由决策——判断任务该走连接器、浏览器控制、Office 技能、命令行还是 computer use 桌面接管;②授权引导——检测并引导用户完成 macOS 辅助功能/屏幕录制权限授权,处理授权不生效等常见坑;③任务派发与验证——按目标/边界/失败处理三段式描述派发 GUI 任务,并以最终截图为准确认结果;④AX 兜底层——内置 axctl 工具做元素级无障碍读写(AXPress 语义点击,不碰鼠标不抢焦点),适用于 computer use 不可用或轻量场景。台前调度全场景实测(macOS 15 + 27.0.1 复检)。触发词:操控电脑、操作某个软件、点某个按钮、GUI 操作、电脑设置。

GreenWich-art/agent-skills

按学术论文规范(小三黑体一级标题/四号黑体二级/小四正文宋体1.5倍行距/三线表/中西文混排Times New Roman/统计量斜体) 批量重整 Markdown 或已有 docx 的格式。用户说"按学术格式排版""三线表""小三号黑体标题""1.5倍行距" "数字英文用Times New Roman""P值斜体"时使用。基于 python-docx 直接生成 docx,不走逐段插入。 不适用:高校课程论文/作业的字体字号约定(标准不同);党政机关公文国标 GB/T 9704 (又是另一套标准)。三套标准不可混用。

GreenWich-art/agent-skills

参考文献的 GB/T 7714-2015 著录规范化,以及 URL / DOI / PMID / PMC 链接的 可访问性批量核验与"假失效"识别。 触发场景: - 论文 / 综述 / 作业要交,需要核对参考文献格式 - "帮我按国标改一下参考文献" - 要交付一份文献清单,需要确认链接没死 - 已经有一堆 links,要批量验证哪些还能打开 含一个可复用脚本 `scripts/check_refs.py`,能自动判别 URL / DOI / PMID / PMC 并并发核验,且能区分「真死」与「被反爬」——后者不该判为失效。 不适用:从零生成一份带引文的正文(那是写作任务); Zotero 样式定制(见正文第六节,按需手工改 CSL)。

GreenWich-art/agent-skills

Download open-access biomedical article PDFs from PMC with offline Proof-of-Work solving. Triggers: 下载文献PDF, PMC PDF, 403/404 on PDF link, Preparing to download, reCAPTCHA page, OA full text, supplementary files, download paper PDF.

Skills associés