- Con la app Shortcuts de macOS, puedes crear un atajo de OCR local sin servicios pagos adicionales y ejecutar la extracción de texto de imágenes desde la terminal/CLI/Python
- La configuración clave consiste en conectar Shortcut Input a la acción Extract Text from Image y luego copiar el resultado al portapapeles
- Conviene usar un nombre de atajo en minúsculas y sin espacios, como
ocr-text o extract-text, para llamarlo fácilmente desde la CLI; después de escribir el nombre hay que presionar Enter para guardarlo
- En la terminal se ejecuta con
shortcuts run ocr-text -i , y el resultado extraído se copia al portapapeles para comprobarlo con Command-V
- En Python, se puede reutilizar el mismo atajo de OCR llamando al comando
shortcuts run con subprocess.check_output()
Crear un atajo de OCR en Shortcuts
- Abre la app Shortcuts de macOS y crea un atajo nuevo con el botón
+
- En la barra lateral derecha, busca
extract text y arrastra la acción Extract Text from Image al área de trabajo de la izquierda
- Haz clic en la entrada azul Image de la acción
Extract text from ... y selecciona Shortcut Input
- Aparecerá arriba la acción Receive; puedes dejarla tal como está
- En la barra lateral derecha, busca
copy y coloca la acción Copy to Clipboard debajo de Extract Text from Image
- En la última acción, verifica que lo que aparece después de
Copy sea Text from Image
- El proceso de arrastrar la acción
Copy to Clipboard hacia abajo puede resultar algo incómodo
- Para el nombre del atajo, conviene usar algo simple, en minúsculas y sin espacios, como
extract-text u ocr-text
- Después de escribir el nombre, debes presionar Enter para que se guarde
Ejecutarlo desde la CLI y Python
- El comando para ejecutar el atajo desde la terminal es el siguiente
shortcuts run ocr-text -i
- Si después de ejecutarlo ves el texto extraído al pegar con Command-V, la configuración quedó correcta
- En Python, puedes ejecutar el mismo comando con
subprocess.check_output()
import subprocess
file_path = '... some file path ...'
ocr_out = subprocess.check_output(
f'shortcuts run ocr-text -i "{file_path}"', shell=True
)
print(ocr_out)
- Como el uso compartido de Shortcuts puede comportarse de forma extraña, es necesario configurarlo manualmente; la mayor parte del proceso solo hay que hacerla una vez
1 comentarios
Opiniones en Hacker News
Me gustó la publicación del OP. El framework Vision de Apple me pareció bastante impresionante, y lo usé en un proyecto personal para leer con OCR decenas de miles de capturas de pantalla de hojas de cálculo y meterlas en una base de datos PostgreSQL.
Como macOS y Nvidia todavía no se llevan muy bien, también probé OCR basado en CPU como Tesseract, pero los resultados se equivocaban demasiado seguido. El framework Vision tuvo la mejor calidad de salida de todo lo que vi, y además usó la menor cantidad de cómputo.
Fue bastante inestable, aunque también es posible que haya sido por errores de mi implementación. Para la implementación real usé vision.py de RHetTbull https://gist.github.com/RhetTbull/1c34fc07c95733642cffcd1ac5... y, para experimentar, ocrmac https://github.com/straussmaximilian/ocrmac; incluso en un hackintosh con i7 6700k el rendimiento fue sorprendentemente bueno.
No me llamaría programador, pero con suficiente tiempo por lo general pude resolver los problemas; eso sí, me tomó bastante tiempo.
Basta ver los frameworks de RAG: muchos usan o soportan varias implementaciones, y Tesseract casi siempre está soportado, pero normalmente no es la opción ideal. Se suelen preferir proyectos como Unstructured https://github.com/Unstructured-IO/unstructured-inference o DocTR https://github.com/mindee/doctr.
En general aprovechan modelos de visión de nivel moderno https://github.com/mindee/doctr#models-architectures https://github.com/Unstructured-IO/unstructured-inference#mo..., y superan por mucho a Tesseract.
No los comparé directamente con el framework Apple Vision, pero sin duda son mejores que Tesseract y potencialmente podrían ser mejores que Apple Vision. También existe el enfoque de combinar varios métodos, aunque se vuelve bastante complejo.
AWS Textract ofrece código de ejemplo en Python para extraer tablas a CSV, y eso funciona bien.
Estaba intentando hacer algo parecido en Windows y descubrí que PowerToys, un proyecto de Microsoft que ya tenía instalado, incluye una herramienta de OCR bastante buena.
Presionas Win+Shift+T, seleccionas el área a escanear y el texto se copia al portapapeles.
https://learn.microsoft.com/en-us/windows/powertoys/
https://learn.microsoft.com/en-us/windows/powertoys/text-ext...
Creé una herramienta open source que ofrece tanto CLI como una UI decente, y es gratuita.
https://trex.ameba.co
Descubrí que muchas apps de Mac, incluidas Safari, Preview y Notes, hacen OCR automáticamente sobre las imágenes. Es bastante bueno poder seleccionar fácilmente texto dentro de una imagen y copiarlo y pegarlo en otro lado.
Si es una URL, texto de un dominio o un código QR, incluso en una foto de un póster o dentro de un video puedes mantener presionado o hacer clic prolongado para abrir el enlace directamente desde la imagen.
Puedes seleccionarla y copiarla desde una foto, y luego pegarla en tu teléfono o Mac mediante Handoff.
Me gusta mucho una pequeña herramienta de OCR que instalé con brew en mi MacBook: https://github.com/schappim/macOCR
En Windows recomiendo Text Extractor de PowerToys.
https://learn.microsoft.com/en-us/windows/powertoys/text-ext...
Mi solución, para aportar una más, es esta: https://skaplanofficial.github.io/PyXA/tutorial/images.html#...
PyXA usa el framework Vision para extraer texto de una o más imágenes. Es una parte pequeña del paquete, así que puede ser demasiado para una tarea puntual, pero es una opción.
ImageAnalyzer es más nuevo y mucho mejor. Es muy probable que el shortcut del OP también use internamente la API anterior.
En macOS Ventura y versiones posteriores, la interfaz de Image Capture en realidad ya trae integrada una función básica de OCR.
Al escanear un PDF con un escáner compatible con AirPrint, aparece una casilla “OCR” en el panel derecho.
Para guardar el contenido en un archivo, se puede hacer así. No digo que sea lo más eficiente, pero funciona:
OCRTHISFILE="ocr-test.jpg"
shortcuts run ocr-text -i "${OCRTHISFILE}"
pbpaste > ${OCRTHISFILE}.txt
O, si quieres ver la salida y también guardarla en un archivo:
OCRTHISFILE="ocr-test.jpg"
shortcuts run ocr-text -i "${OCRTHISFILE}"
pbpaste | tee ${OCRTHISFILE}.txt
Me pregunto si hay una técnica parecida para la función Copy Subject de Apple Vision. Empecé a depender bastante de esta función, pero el acceso se siente demasiado limitado.
Probablemente baste con cambiar la acción “Extract text” por “Remove background”. Al ejecutar el shortcut, puedes especificar el nombre del archivo de imagen de salida con “-o”:
shortcuts run remove-background -i ~/Downloads/portrait-beard.avif -o beard.jpg