Community影像github.com

macOS Vision 本機 OCR

利用 macOS 內建 Vision 引擎在本地執行 OCR,從圖片、螢幕截圖、照片或掃描版 PDF 中提取文字。離線可用,資料不外洩,適合敏感資料處理。

macOS Vision 本機 OCR 是什麼?

這項技能利用 macOS 系統自帶的 Vision 框架(透過 `macocr` 命令)在本地執行光學字元辨識(OCR),完全離線,不上傳任何資料。它支援常見圖片格式(PNG、JPG、HEIC、TIFF)以及掃描版 PDF(需先轉為圖片)。使用者只需提供檔案路徑,技能會自動判斷輸入類型,並依序執行:若為掃描版 PDF,則使用系統 `sips` 工具轉為圖片;接著執行 `macocr` 命令進行辨識;最後將純文字結果傳回給使用者。支援多種參數調整,如語言(繁體/簡體中文、英文)、辨識區域、放大模糊影像、旋轉方向等。內建優化流程:當辨識率低時,團隊會逐步嘗試更清晰的原始檔案、限定辨識區域、放大影像、關閉語言校正、甚至進行影像前處理(裁剪、灰階、對比度、銳化、二值化)。技能也提供多版本投票與數值交叉驗證機制,確保表格與數字辨識的可靠性。此技能與 macOS「照片」App 使用相同引擎,實作上補足了前後處理差異,例如自動旋轉(--orientation)、使用全解析度原圖、處理豎排文字等,因此能獲得與系統內建「原況文字」相近的辨識準確度。總之,這是一個資料不離開本機、適合離線或隱私敏感場景的本地 OCR 解決方案。支援的平台為 macOS 13 以上。

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

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

在你喜歡的 AI 中提問

開啟一個已預先載入此 Agent Skill 的新對話。

說明文件

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.

相關技能