CommunityImagengithub.com

GreenWich-art/agent-skills

OCR local usando el framework Vision de macOS. Disparadores: OCR, 识别图片文字, 提取截图内容, 扫描件转文字, 图片转文字, 扫描版PDF转文字, read text from image/screenshot/photo/scanned PDF. Prioriza lo local y offline; prefierelo sobre OCR en la nube cuando los datos sean sensibles o la máquina esté sin conexión.

¿Qué es agent-skills?

Este skill permite convertir imágenes y PDFs escaneados a texto utilizando el framework Vision de macOS de forma completamente local, sin enviar datos a ningún servidor externo. Está diseñado para entornos donde la privacidad de los datos es crítica o cuando se trabaja sin conexión a internet. Compatible con macOS 13+, el skill automatiza la verificación del entorno, la instalación de la herramienta `macocr` y el flujo completo de OCR: desde la confirmación del tipo de entrada (imagen o PDF escaneado), pasando por la conversión de PDF a imagen con `sips`, hasta la ejecución del reconocimiento con parámetros ajustables por escenario (idioma, área de interés, escala, orientación). Incluye estrategias para mejorar la precisión en casos difíciles, como el uso de `--rect`, `--upscale` y preprocesamiento de imagen con Python, así como recomendaciones para validar resultados en tablas (votación múltiple, verificación cruzada). El skill también documenta cuándo no usar esta herramienta (por ejemplo, si el modelo de IA ya soporta lectura de imágenes o se necesita reconstrucción compleja de diseño) y proporciona scripts de instalación y autoverificación.

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

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

Preguntar en tu IA favorita

Abre un nuevo chat con esta habilidad de agente ya precargada.

Documentación

macOS Vision OCR Local

Este skill te guía para convertir imágenes/PDFs proporcionados por el usuario a texto: utiliza el motor Vision nativo de macOS (el comando macocr) para realizar el reconocimiento localmente, sin subir ningún dato.

Verificación del entorno (imprescindible)

Antes de ejecutar cualquier comando OCR, primero realiza la siguiente comprobación. Si alguna falla, detente y responde según se indica:

[ "$(uname -s)" = "Darwin" ] && echo OK-macOS
command -v macocr || ls "$HOME/.local/bin/macocr"
  • Si uname no es Darwin: esta herramienta solo es compatible con macOS. No intentes instalarla ni compilarla, simplemente informa al usuario que este Skill solo está disponible en macOS y sugiere usar otra solución OCR.
  • Si macocr no existe: guía al usuario para que ejecute ./install.sh en el directorio del paquete (la compilación requiere Xcode Command Line Tools; en Apple Silicon sin entorno de compilación, retrocede automáticamente al binario precompilado incluido). Una vez instalado, ejecuta sh scripts/selftest.sh para una verificación integral de extremo a extremo, y solo continúa si pasa.

Una vez completadas la instalación y la autoverificación, no es necesario repetirlas en cada sesión.

Flujo estándar para ejecutar tareas

Sigue estos pasos para procesar las solicitudes OCR del usuario, sin saltarte ninguno:

  1. Confirma el tipo de entrada. Si el usuario proporciona una imagen (png/jpg/jpeg/heic/tiff), ve directamente al paso 3. Si es un PDF escaneado (sin capa de texto), ve primero al paso 2 para convertirlo a imagen.

  2. Convierte PDF a imagen (solo para PDFs escaneados). Usa el sips del sistema, comenzando con 144 ppp:

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

    Ten en cuenta que sips solo procesa una página; para PDFs de varias páginas, especifícalas una por una o, si tienes pymupdf, usa una matriz de 4x para renderizar (mejora notablemente en documentos con letra pequeña; consulta «Cómo usar con PDFs escaneados»).

  3. Ejecuta el reconocimiento. El comando predeterminado cubre la mayoría de los casos:

    macocr <ruta_de_imagen>            # Se pueden listar varias imágenes; las salidas se separan con ===
    

    Agrega parámetros según el escenario (consulta la tabla de parámetros a continuación). El resultado es texto plano, ya ordenado por líneas visuales.

  4. Entrega el resultado. Muestra el texto reconocido directamente al usuario; para resultados con tablas o números densos, advierte al usuario que debe verificar los números clave (consulta «Atención especial a datos tabulares»).

Referencia rápida de parámetros

ParámetroUso
--fastDesactiva la corrección lingüística. Recomendado para tablas y números, evita que los números se «corrijan» a valores extraños
--lang zh-Hans+en-USPredeterminado para mezcla chino-inglés. Para solo inglés, usa en-US para mayor velocidad; para chino tradicional, usa zh-Hant
--rect x,y,w,hReconoce solo un área rectangular (origen en esquina superior izquierda, en píxeles). Úsalo cuando solo quieras extraer una tabla de una imagen grande
--upscale NPara imágenes pequeñas y borrosas (imágenes reenviadas con ancho <1000px, escaneos antiguos), primero amplía con Lanczos N veces (1.0–4.0). Solo pruébalo gradualmente 2 → 3 cuando la tasa de reconocimiento normal sea baja; ampliar imágenes nítidas y grandes sin necesidad puede causar trazos pegados
--orientation up|left|right|180Corrige la orientación manualmente si la foto está girada o al revés. Vision no corrige automáticamente según EXIF; las fotos tomadas de lado deben usar esto
--list-langsLista los idiomas de reconocimiento compatibles con la máquina (útil para verificar la instalación; la salida debe incluir zh-Hans)

Orden de actuación cuando la tasa de reconocimiento es baja

Intenta desde lo más simple a lo más complejo, sin saltar directamente a soluciones complicadas:

  1. Busca la imagen original: las imágenes reenviadas por chat suelen tener muy baja resolución; pide al usuario el archivo original
  2. --rect para delimitar el área objetivo, reduciendo ruido
  3. --upscale 2 (para imágenes pequeñas y borrosas)
  4. --fast (para escenarios con tablas y números)
  5. Preprocesamiento de imagen (recorte + escala de grises + contraste automático + enfoque + binarización), ejemplo a continuación
from PIL import Image, ImageOps, ImageEnhance
im = Image.open("src.JPG")
im.crop((x0, y0, x1, y1)).resize((w*2, h*2), Image.LANCZOS)   # Recorte + ampliación
ImageOps.autocontrast(im.convert("L"))                         # Escala de grises + contraste automático
ImageEnhance.Sharpness(im).enhance(2.0)                        # Enfoque
im.convert("L").point(lambda p: 255 if p > 128 else 0)         # Binarización

Votación múltiple: para una misma tabla, ejecuta 2–3 preprocesamientos diferentes, toma las partes consistentes y revisa por separado los números inconsistentes. Verificación cruzada: si sumas filas/columnas enteras y coinciden, es confiable; si no, algún número está mal.

¿Por qué el «Texto en vivo» de la app Fotos parece más preciso que llamar a la API directamente?

Es el mismo motor Vision. La diferencia está en el pre y postprocesamiento, no en el modelo:

  1. Orientación: «Fotos» corrige según EXIF antes de reconocer; la API directa procesa por defecto como .up → usa --orientation
  2. Resolución: «Fotos» usa la imagen original a resolución completa; las que circulan en flujos de trabajo suelen ser vistas previas comprimidas → prioriza siempre el archivo original
  3. Submuestreo implícito: NSImage genera según «puntos»; las capturas @2x/@3x y algunos HEIC pierden la mitad de los píxeles → esta herramienta recorre los rep para obtener el mapa de bits de mayor resolución
  4. Texto vertical: «Texto en vivo» maneja texto vertical; la API directa lo fragmenta en líneas sueltas → esta herramienta detecta automáticamente y arbitra con confianza
  5. Ventaja interactiva (no replicable completamente): «Texto en vivo» permite seleccionar partes, dando la sensación de «menos errores»; la línea de comandos muestra todo el texto de una vez, y cualquier error tipográfico resalta

Conclusión: mismo motor, el pipeline determina el límite.

Atención especial a datos tabulares

El OCR es más propenso a errores en tablas: puntos decimales que se pierden (. → ,), columnas adyacentes que se fusionan en una sola cadena, filas mezcladas. Los números clave deben verificarse dos veces: si hay un PDF original, extrae la capa de texto para comparar; si solo hay fotos, recurre a votación múltiple + validación lógica de filas y columnas.

Cuándo no usar esta herramienta

EscenarioMejor alternativa
El modelo de IA usado ya soporta lectura de imágenesDeja que la IA vea la imagen directamente, no pases por OCR
Se necesita reconstrucción compleja del diseño (múltiples columnas, fórmulas, estructura de tablas con líneas)Servicios de análisis a nivel de diseño como MinerU (los datos subirán a la nube)
Convertir un lote completo de PDFs escaneados a texto y se puede usar la nubeInterfaces por lotes de servicios OCR en la nube

Regla: priorizar local, datos no se envían al exterior; si realmente se necesita mayor precisión, sube a la nube solo después de confirmar que los datos pueden enviarse.

Verificación y resolución de problemas

  • Autoverificación post-instalación: sh scripts/selftest.sh (usa la imagen de prueba incluida para una verificación integral; muestra PASS/FAIL)
  • La lista de idiomas no contiene zh-Hans: los datos de idioma del sistema están incompletos, es muy raro; comprueba si la versión de macOS es ≥ 13
  • La salida está vacía o completamente errónea: primero confirma que la imagen sea legible (sips -g pixelWidth -g pixelHeight imagen), luego sigue el «Orden de actuación cuando la tasa de reconocimiento es baja» paso a paso

Requisitos del sistema

  • macOS 13+ (automaticallyDetectsLanguage requiere 13.0)
  • La compilación requiere Xcode Command Line Tools (xcode-select --install); o usa el binario precompilado incluido para Apple Silicon (scripts/macocr-arm64, firma ad-hoc)

Descripción de archivos en el paquete

ArchivoUsoCuándo es necesario
install.shInstala macocr (prioriza compilación, retrocede a precompilado)Cuando la verificación del entorno detecta que macocr no existe
scripts/selftest.sh + scripts/selftest.pngAutoverificación integral (script + imagen de prueba incluida)Validación post-instalación; cuando se detectan anomalías en el reconocimiento, ejecútalo primero para confirmar que la herramienta funciona correctamente
scripts/vision_ocr.swiftCódigo fuente (~200 líneas, auditable)Cuando se necesita compilar uno mismo o auditar
scripts/macocr-arm64Binario precompilado para Apple SiliconEn máquinas Apple Silicon sin swiftc; install.sh lo usa automáticamente

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 relacionados