Community画像github.com

macOS Vision 本地 OCR

macOS Vision フレームワークを使用したローカルOCR。画像・スクリーンショット・スキャンPDFからテキストを抽出します。完全オフライン対応で、機密データの処理に最適です。

macOS Vision 本地 OCR とは?

このスキルは、macOS の Vision フレームワークを利用して、画像やPDFからテキストをローカルで抽出するためのものです。 `macocr` コマンドを介して動作し、データを外部に送信しないため、機密情報の処理やオフライン環境での利用に最適です。OCRの精度向上のための前処理テクニック(拡大、コントラスト調整、2値化など)や、表データの誤認識をチェックするためのクロスバリデーション方法もサポートしています。macOS 13+とXcode Command Line Toolsが必要ですが、Apple Silicon向けのプリコンパイルバイナリも付属しています。このスキールは、画像、スクリーンショット、スキャンPDFからテキストを読み取るすべてのシナリオをカバーし、クラウドOCRを使う前にローカルで試すべき最初の選択肢です。

対応~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に質問する

このエージェントスキルを事前に読み込んだ状態で新しいチャットを開きます。

ドキュメント

macOS Vision ローカル OCR

このスキルは、ユーザーが提供する画像/PDFをテキストに変換します。macOS 標準の Vision エンジン(macocr コマンド)をローカルで使用し、データを一切アップロードしません。

環境チェック(必須)

OCR コマンドを呼び出す前に、必ず以下のチェックを実行してください。いずれかが満たされない場合は停止し、指示に従って応答します。

[ "$(uname -s)" = "Darwin" ] && echo OK-macOS
command -v macocr || ls "$HOME/.local/bin/macocr"
  • uname が Darwin でない場合:このツールは macOS のみで動作します。インストールやコンパイルを試みず、ユーザーにこのスキルは 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. 画像の前処理(トリミング + グレースケール + 自動コントラスト + シャープ化 + 2値化)。例は下記を参照
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値化

マルチバージョン投票:同じ表に対して2~3種類の前処理を実行し、一致する部分を採用。異なる数字は個別に再確認します。 クロスバリデーション:行全体/列全体の合計が合えばおおよそ信頼できます。合わない場合は、どこかの数字が間違っています。

なぜ「写真」アプリのライブテキストは、生の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.shmacocr のインストール(コンパイル優先、プリコンパイルバイナリでフォールバック)環境チェックで 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.

関連スキル