5 puntos por GN⁺ 2024-01-04 | 1 comentarios | Compartir por WhatsApp
  • 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

 
GN⁺ 2024-01-04
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.

    • Si es mejor que Tesseract, es realmente impresionante. Me pregunto si se podrían poner a correr varias máquinas macOS para convertirlo en un servicio de API y ganar dinero, y si eso sería legalmente posible.
    • Usar Tesseract solo ya es bastante conocido como algo más o menos mediocre.
      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.
    • Me pregunto si hay algún tutorial para extraer estructuras de tablas de PDF o imágenes con Apple Vision Framework. Probé los dos enlaces del artículo, pero solo extraían texto sin conservar la estructura de las tablas.
      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...

    • Estoy usando AutoHotkey junto con PowerToys para agregar datos de capturas de pantalla a un CSV, y funciona bien con mis propios mapeos de teclas.
  • Creé una herramienta open source que ofrece tanto CLI como una UI decente, y es gratuita.
    https://trex.ameba.co

    • Uso Trex todos los días. Me impresiona lo bien que maneja texto manuscrito y capturas de pantalla desprolijas.
  • 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.

    • La calidad es casi absurdamente buena. Incluso puedes seleccionar texto dentro de un video de YouTube mientras se está reproduciendo, o pausarlo si hace falta.
      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.
    • La app Photos también hace lo mismo. Es realmente útil en conferencias o cuando necesitas digitalizar una cadena larga, por ejemplo la contraseña predeterminada de un router.
      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

    • Igual yo. Para mi uso, me basta con envolver esa utilidad en un macOS Shortcut para poder hacerle clic desde la barra de menú o ejecutarla con Quicksilver.
  • 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.

    • Como referencia, usa VNRecognizeTextRequest, una API más antigua y menos precisa.
      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

    • También puedes hacer que Shortcuts de macOS escriba el texto OCR en un archivo. Para la acción, usa “Append to Text File”.
  • 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.