CommunityBildgithub.com

macOS Vision 本地 OCR

Nutzt das lokale macOS Vision Framework zur Texterkennung aus Bildern, Screenshots, Fotos und gescannten PDFs – datenschutzfreundlich und offline nutzbar.

Was ist macOS Vision 本地 OCR?

Dieses Skill ermöglicht die lokale Texterkennung (OCR) auf macOS, ohne Daten an externe Dienste zu senden. Es verwendet den systemeigenen Vision-Framework über das Kommandozeilentool `macocr`, das entweder kompiliert oder als vorgefertigtes Binary für Apple Silicon bereitgestellt wird. Das Skill unterstützt verschiedene Auslöser wie "OCR", "Bildtext lesen", "Screenshot-Inhalt extrahieren" oder "gescanntes PDF in Text umwandeln". Es führt zunächst eine Umgebungsprüfung durch (Betriebssystem, Verfügbarkeit von `macocr`), führt dann je nach Eingabetyp (Bild oder gescanntes PDF) eine gezielte Erkennung durch und gibt den erkannten Text aus. Bei schlechten Erkennungsraten bietet das Skill eine abgestufte Fehlerbehandlung mit Optionen wie `--rect`, `--upscale`, `--fast` und Bildvorverarbeitung mit Python/Pillow. Besondere Aufmerksamkeit gilt Tabellen: Hier wird auf mögliche Fehler durch fehlende Dezimaltrennzeichen oder Spaltenverwechslungen hingewiesen. Das Skill ist für macOS 13+ optimiert und bevorzugt den lokalen, datenschutzfreundlichen Ansatz – nur bei unzureichender Genauigkeit oder komplexen Layouts wird empfohlen, auf Cloud-Dienste umzusteigen, nachdem die Datenfreigabe geklärt ist.

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

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

In Ihrer bevorzugten KI fragen

Öffnet einen neuen Chat, in dem dieser Agent-Skill bereits geladen ist.

Dokumentation

macOS Vision Lokale OCR

Dieses Skill führt dich durch die Umwandlung von vom Benutzer bereitgestellten Bildern/PDFs in Text: Es verwendet die systemeigene Vision-Engine von macOS (macocr Befehl) zur lokalen Erkennung, ohne Daten hochzuladen.

Umgebungsprüfung (muss zuerst ausgeführt werden)

Führe vor jedem OCR-Aufruf die folgenden Prüfungen durch. Wenn eine davon nicht erfüllt ist, brich ab und antworte entsprechend:

[ "$(uname -s)" = "Darwin" ] && echo OK-macOS
command -v macocr || ls "$HOME/.local/bin/macocr"
  • uname ist nicht Darwin: Dieses Tool funktioniert nur unter macOS. Versuche nicht es zu installieren oder zu kompilieren. Teile dem Benutzer mit, dass dieses Skill nur unter macOS verfügbar ist, und empfehle eine andere OCR-Lösung.
  • macocr existiert nicht: Führe den Benutzer durch die Installation mit ./install.sh im Skill-Verzeichnis (Kompilierung benötigt Xcode Command Line Tools; auf Apple Silicon ohne Kompilierungsumgebung wird automatisch auf das mitgelieferte vorkompilierte Binary zurückgegriffen). Nach der Installation führe sh scripts/selftest.sh für einen End-to-End-Selbsttest durch. Danach kann fortgefahren werden.

Nach abgeschlossener Installation und Selbsttest muss dieser Schritt nicht pro Sitzung wiederholt werden.

Standardablauf für Aufgaben

Bearbeite die OCR-Anfrage des Benutzers schrittweise, ohne Schritte zu überspringen:

  1. Eingabetyp bestätigen. Handelt es sich um ein Bild (png/jpg/jpeg/heic/tiff), gehe direkt zu Schritt 3. Handelt es sich um ein gescanntes PDF (ohne Textschicht), gehe zu Schritt 2 für die Bildkonvertierung.

  2. PDF in Bild umwandeln (nur für gescannte PDFs nötig). Verwende das systemeigene sips für die Rasterung, beginnend mit 144 dpi:

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

    Hinweis: sips verarbeitet nur einzelne Seiten. Bei mehrseitigen PDFs muss jede Seite einzeln angegeben werden, oder wenn pymupdf verfügbar ist, verwende eine 4-fache Matrix-Rasterung (bessere Ergebnisse bei kleinem Schriftgrad, siehe "Verwendung mit gescannten PDFs").

  3. Erkennung ausführen. Der Standardbefehl deckt die meisten Szenarien ab:

    macocr <Bildpfad>            # Mehrere Bilder können nacheinander aufgelistet werden, Ausgabe getrennt durch ===
    

    Füge je nach Szenario Parameter hinzu (siehe Parametertabelle unten). Die Erkennung gibt reinen Text aus, bereits visuell zeilenweise sortiert.

  4. Ergebnis ausliefern. Zeige dem Benutzer den erkannten Text direkt an. Bei tabellarischen oder zahlenreichen Ergebnissen muss der Benutzer darauf hingewiesen werden, wichtige Zahlen doppelt zu prüfen (siehe "Besondere Hinweise zu Tabellendaten").

Parameterübersicht

ParameterVerwendung
--fastDeaktiviert Sprachkorrektur. Empfohlen für Tabellen und Zahlen, um zu verhindern, dass Zahlen in merkwürdige Werte "korrigiert" werden
--lang zh-Hans+en-USStandard für gemischt Chinesisch/Englisch. Nur Englisch auf en-US setzen für Geschwindigkeit; Traditionell Chinesisch mit zh-Hant
--rect x,y,w,hErkennt nur einen rechteckigen Bereich (Ursprung oben links, in Pixeln). Verwende dies, um in großen Bildern nur eine bestimmte Tabelle zu extrahieren
--upscale NVergrößert unscharfe kleine Bilder (Breite < 1000px bei weitergeleiteten Bildern, alten Scans) zuerst mit Lanczos um Faktor N (1.0–4.0). Nur wenn die normale Erkennungsrate schlecht ist, schrittweise 2 → 3 versuchen. Bei klaren, großen Bildern führt blindes Hochskalieren zu verschmierten Strichen
--orientation up|left|right|180Dreht das Bild manuell bei schrägen Fotos oder gedrehten Bildern. Vision korrigiert nicht automatisch anhand von EXIF, daher bei seitlich aufgenommenen Fotos zwingend erforderlich
--list-langsListet die vom System unterstützten Erkennungssprachen auf (für Installations-Selbsttest, Ausgabe sollte zh-Hans enthalten)

Vorgehen bei niedriger Erkennungsrate

Probiere die Schritte in aufsteigender Kostenordnung, ohne sofort komplexe Methoden zu verwenden:

  1. Originalbild besorgen: Bei extrem niedriger Erkennungsrate von weitergeleiteten Bildern bitte den Benutzer um die Originaldatei
  2. --rect Zielbereich eingrenzen, um Störungen zu reduzieren
  3. --upscale 2 (bei unscharfen kleinen Bildern)
  4. --fast (bei Tabellen/Zahlen)
  5. Bildvorverarbeitung (Zuschneiden + Graustufen + Automatischer Kontrast + Schärfen + Binarisierung), Beispiel unten:
from PIL import Image, ImageOps, ImageEnhance
im = Image.open("src.JPG")
im.crop((x0, y0, x1, y1)).resize((w*2, h*2), Image.LANCZOS)   # Zuschneiden + Vergrößern
ImageOps.autocontrast(im.convert("L"))                         # Graustufen + Automatischer Kontrast
ImageEnhance.Sharpness(im).enhance(2.0)                        # Schärfen
im.convert("L").point(lambda p: 255 if p > 128 else 0)         # Binarisierung

Mehrere Versionen zur Abstimmung: Führe für dieselbe Tabelle 2–3 Vorverarbeitungen durch, nimm die übereinstimmenden Teile, prüfe abweichende Zahlen einzeln. Kreuzvalidierung: Wenn sich ganze Zeilen/Spalten aufsummieren lassen, ist das Ergebnis glaubwürdig; wenn nicht, ist eine Zahl falsch.

Warum sieht der Live-Text der Fotos-App genauer aus als die reine API?

Beide verwenden die gleiche Vision-Engine, der Unterschied liegt in der Vor- und Nachverarbeitung, nicht im Modell selbst:

  1. Ausrichtung: Die Fotos-App korrigiert nach EXIF, bevor sie erkennt; die reine API verarbeitet standardmäßig als .up → mit --orientation nachhelfen
  2. Auflösung: Die Fotos-App verwendet das Original in voller Auflösung; im Workflow laufen oft komprimierte Vorschaubilder um → immer die Originaldatei bevorzugen
  3. Implizites Downsampling: NSImage gibt Bilder in "Punkten" aus, @2x/@3x Screenshots und manche HEIC verlieren die Hälfte der Pixel → dieses Tool iteriert über Repräsentationen, um die Bitmap mit der höchsten Auflösung zu verwenden
  4. Vertikaler Text: Live-Text kann vertikalen Text verarbeiten; die reine API zerbricht ihn in kurze Fragmente → dieses Tool erkennt dies automatisch und führt eine Konfidenzabstimmung durch
  5. Interaktionsvorteil (nicht vollständig replizierbar): Live-Text erlaubt punktuelles Auswählen, was subjektiv "weniger Fehler" bedeutet; die CLI gibt den gesamten Text auf einmal aus, sodass jeder Fehler auffällt

Fazit: Gleiche Engine, die Pipeline bestimmt die Obergrenze.

Besondere Hinweise zu Tabellendaten

OCR macht bei Tabellen am häufigsten Fehler: Dezimaltrennzeichen werden verschluckt (. → ,), benachbarte Spalten verschmelzen, Zeilen werden verwechselt. Wichtige Zahlen müssen doppelt geprüft werden: Wenn ein PDF-Original vorhanden ist, extrahiere die Textschicht zum Vergleich; bei nur einem Foto hilft die Abstimmung mehrerer Versionen + logische Zeilen-/Spaltenprüfung.

Wann dieses Tool nicht verwendet werden sollte

SzenarioBessere Wahl
Das verwendete KI-Modell kann selbst Bilder lesenLass es direkt auf das Bild schauen, ohne OCR
Komplexe Layout-Wiederherstellung erforderlich (mehrspaltig, Formeln, Tabellenrahmen)MinerU oder andere Layout-Parser (Daten gehen in die Cloud)
Stapelverarbeitung ganzer gescannter PDFs in Text, Cloud erlaubtBatch-Schnittstellen von Cloud-OCR-Diensten

Regel: Lokal zuerst, keine Daten nach außen; erst bei höherer Genauigkeit in die Cloud gehen, und nur wenn die Datenweitergabe geklärt ist.

Validierung & Fehlerbehebung

  • Selbsttest nach Installation: sh scripts/selftest.sh (End-to-End-Prüfung mit mitgelieferten Testbildern, Ausgabe PASS/FAIL)
  • Sprachliste enthält kein zh-Hans: Systemsprachdaten unvollständig, sehr selten; prüfe, ob macOS-Version ≥ 13 ist
  • Ausgabe leer oder komplett falsch: Zuerst prüfen, ob das Bild selbst lesbar ist (sips -g pixelWidth -g pixelHeight bild), dann schrittweise das "Vorgehen bei niedriger Erkennungsrate" durchgehen

Systemanforderungen

  • macOS 13+ (automaticallyDetectsLanguage benötigt 13.0)
  • Kompilierung benötigt Xcode Command Line Tools (xcode-select --install); oder verwende das mitgelieferte vorkompilierte Binary für Apple Silicon (scripts/macocr-arm64, ad-hoc signiert)

Dateibeschreibungen im Paket

DateiVerwendungWann nötig
install.shInstalliert macocr (Kompilierung bevorzugt, vorkompiliertes Binary als Fallback)Wenn die Umgebungsprüfung ergibt, dass macocr nicht existiert
scripts/selftest.sh + scripts/selftest.pngEnd-to-End-Selbsttest (Skript + eigenes Testbild)Nach Installation zur Validierung; bei "Erkennungsanomalien" zuerst ausführen, um sicherzustellen, dass das Tool selbst funktioniert
scripts/vision_ocr.swiftQuellcode (ca. 200 Zeilen, prüfbar)Wenn eine eigene Kompilierung oder Prüfung erforderlich ist
scripts/macocr-arm64Vorkompiliertes Binary für Apple SiliconAuf Apple Silicon-Maschinen ohne swiftc; wird automatisch von install.sh verwendet

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.

Verwandte Skills