3 puntos por GN⁺ 2024-03-17 | 1 comentarios | Compartir por WhatsApp
  • TextSnatcher es una app de OCR para copiar rápidamente texto dentro de imágenes en Linux: permite arrastrar sobre una imagen para reconocer caracteres y pegar el resultado
  • Sus funciones principales son soporte multilingüe, copiar texto desde imágenes, arrastrar sobre cualquier imagen y luego pegar, y una experiencia de uso rápida y sencilla
  • Para el reconocimiento de caracteres usa Tesseract OCR 4.x, y proporciona enlaces a la documentación de Tesseract y al proyecto Tesseract
  • La distribución se ofrece a través de Flathub y AppCenter de elementary OS; para compilarla directamente se usa un procedimiento de instalación basado en Meson y Ninja
  • Para ejecutarla se requieren scrot, tesseract-ocr y datos de idioma de Tesseract; el proyecto informa que volverá el mes próximo con actualizaciones y correcciones

Qué hace TextSnatcher

  • TextSnatcher es una app para Linux que copia texto desde imágenes y realiza tareas de OCR en cuestión de segundos
  • El usuario puede arrastrar sobre una imagen para copiar y pegar texto
  • Funciones disponibles:
    • Soporte multilingüe

      • Copiar texto desde imágenes arrastrando
      • Arrastrar sobre cualquier imagen y luego pegar
      • Uso rápido y sencillo

Motor OCR y proyectos relacionados

Instalación y canales de distribución

  • La app se puede obtener en Flathub
  • Los usuarios de elementary OS pueden obtenerla mediante AppCenter

Dependencias y compilación

  • Dependencias de runtime necesarias para ejecutarla:
    • scrot
    • tesseract-ocr
    • Datos de idioma de Tesseract
      • Se proporcionan enlaces a los repositorios de Arch y Debian
  • Dependencias de build-time necesarias para compilar:
    • granite
    • gtk+-3.0
    • gobject-2.0
    • gdk-pixbuf-2.0
    • libhandy-1
    • libportal-0.5
  • Para compilarla y ejecutarla directamente, el flujo consiste en clonar el repositorio, crear un directorio de build con Meson, instalar con Ninja y luego ejecutar com.github.rajsolai.textsnatcher

Estado de desarrollo y fuentes

  • El proyecto incluye una insignia que indica que fue creado con Vala
  • El README dice que actualmente se están reuniendo fondos para comprar una PC Linux, y que el proyecto volverá pronto, el mes próximo, con actualizaciones y correcciones
  • Las fuentes de inspiración citadas son el README de Planner, la estructura de aplicación de Develop y la app para macOS TextSniper

1 comentarios

 
GN⁺ 2024-03-17
Opiniones de Hacker News
  • Uso un script como el de Dibby053; lo tomé de Stack Overflow, lo modifiqué un poco para que funcione en KDE/GNOME y Wayland/X11, y para que muestre el estado actual mediante una notificación.
    Todavía no probé personalmente la detección de X11/Wayland, pero estaría bien que lo prueben y cuenten los resultados.

    • Cambié un poco el script para que la limpieza se haga correctamente y para ejecutar spectacle en modo de segundo plano, de modo que no aparezca una ventana después de la captura.
    • El manejo de errores está bueno, pero se pueden omitir los archivos temporales y pasar todo por pipes.
      La idea es encadenar grim, slurp, mogrify, tesseract y wl-copy, y elegir el idioma del OCR con fuzzel.
    • Yo también usaba el mismo script hasta que descubrí este método en HN.
      Elijo el idioma con dmenu y lo proceso con algo como maim -us | tesseract --dpi 145 -l eng+${lang} - - | xsel -bi.
      https://news.ycombinator.com/item?id=33704483#33705272
    • A veces ShellCheck da un falso positivo con trap "cleanup '$SCR_IMG'" EXIT, pero en este caso no está del todo equivocado.
      El comando pasado a trap normalmente se evalúa, por lo que se produce la expansión de variables, y trap 'cleanup "$SCR_IMG"' EXIT funciona de forma más segura.
      Si usas una versión reciente de Bash, trap "cleanup ${SCR_IMG@Q}" EXIT también es una opción.
    • Lo uso vinculando este comando a un atajo: bash -c 'flameshot gui -s -r | tesseract - - | gxmessage -title "Decoded Data" -fn "Consolas 12" -wrap -geometry 640x480 -file -'.
      Presiono Super+O, arrastro el área para hacer OCR y el texto capturado aparece de inmediato en un cuadro de diálogo emergente.
  • Un script que copié de algún lado hace tiempo hace esto bastante bien.
    Captura un área con scrot, hace preprocesamiento en blanco y negro y ampliación con mogrify, extrae el texto con tesseract, lo coloca en el portapapeles con xsel y además muestra una notificación.

    • Como aporte, prefiero maim sobre scrot.
      Gracias a la opción --nodrag, al seleccionar un área con el trackpad basta con hacer clic una vez, mover el cursor y volver a hacer clic, lo que resulta más cómodo.
      En maim -s --nodrag --quality=10 $IMG.png, 10 equivale a 100 en scrot.
    • Usé algo así durante un tiempo, pero Tesseract estuvo por debajo de lo esperado con bastante frecuencia.
      Tampoco noté gran diferencia con el preprocesamiento de ampliación, y no sé bien qué tipo de preprocesamiento lo mejoraría.
      Me pregunto si TextSnatcher mejora algo respecto a esto, pero la página de GitHub no es clara.
    • También tenía un script parecido en PowerShell, pero desapareció con el tiempo junto con varios scripts pequeños de mi trabajo anterior.
      Mis disculpas a los colegas que viven entre Unix y Windows.
    • Para trap "rm $IMG*" EXIT, conviene consultar https://www.shellcheck.net/wiki/SC2064.
      Es mejor usar mktemp -d y eliminar el directorio de forma recursiva.
    • Para mí, este método es justo lo que necesito.
      Es mucho mejor vincular un script a un atajo de teclado que tener que hacer clic en una ventana con botones.
  • Para los colegas simples mortales que usan Windows: la extensión oficial Microsoft PowerToys también tiene esta función.
    También se incorporó en la herramienta de captura predeterminada, pero personalmente me resulta más práctico el atajo de teclado único de PowerToys.
    https://github.com/microsoft/PowerToys

    • El OCR de la herramienta de recorte integrada funciona en varios idiomas, como inglés, ruso, chino y japonés, sin necesidad de instalar paquetes OCR de idioma por separado.
    • La herramienta de recorte predeterminada también ofrece esta función.
      Solo hay que presionar WIN+SHIFT+S; si no aparece el ícono de “Text actions”, actualízala a la versión más reciente desde Windows Store.
  • Me lo pregunto desde hace mucho: no sé si Tesseract es realmente la solución de punta en este campo.
    En mi experiencia se siente bastante limitado, y ya hacia 2019, viendo los avances en visión por computadora, me parecía que el reconocimiento de texto debería ser un problema prácticamente resuelto.
    Debería hacerlo mejor que una persona, pero ni siquiera lograba convertir con precisión escaneos de recibos de baja resolución, sobre todo si no estaban en inglés.
    Tal vez soy yo quien no lo está usando bien.

    • Uso Tesseract de forma semirregular, y rara vez tuve problemas de reconocimiento incluso con escaneos o fotos de recibos.
      Me da curiosidad saber exactamente cómo lo estás usando.
  • Veo que Tesseract se menciona cada vez más seguido.
    Cuando lo probé hace 10 o 15 años con artículos científicos escaneados, los resultados fueron decepcionantes, y el posprocesamiento manual no era mucho menos trabajo que tipearlo directamente.
    Por eso, para mí Tesseract se volvió sinónimo de “no vale la pena intentarlo”, pero quizá haya mejorado con el tiempo y valga la pena probarlo de nuevo.

    • Ahora está bien si solo haces OCR de documentos escaneados o si puedes controlar bastante el proceso de preparación de la imagen.
      Para reconocimiento general, incluyendo fuentes raras o mala calidad de imagen, EasyOCR me dio resultados mucho mejores.
    • Este proyecto incluye Tesseract 4.1.1, que tiene al menos varios años.
    • Sería bueno probar https://github.com/ocrmypdf/OCRmyPDF.
      Usa Tesseract internamente y es realmente excelente.
    • Ahora es mucho mejor.
      Hace 15 años había que hacer bastante preprocesamiento para obtener resultados menos malos, pero ahora obtengo buenos resultados incluso sin preprocesamiento.
    • Cuando lo probé por primera vez hace 3 o 4 años, me pareció decente.
  • Lo probé directamente y funciona bastante bien.
    Como es una app Flatpak, necesita portales de escritorio para funcionar por completo, pero con mi configuración existente de xdg-desktop-portal-wlr funcionó bien sin ajustes adicionales.
    Parece que debería funcionar sin problemas en entornos X11 o Wayland que tengan una configuración de xdg-desktop-portal con soporte para la Screenshot API.
    Los resultados son irregulares, pero no están mal; con texto que se lee con claridad, solo hay problemas de espacios o algún error ocasional, así que puede ser útil para copiar texto de lugares como cuadros de diálogo de error.
    Aunque en Linux, de entrada, es más común que el texto de los cuadros de diálogo de error sea seleccionable, y el MessageBox estándar de Windows responde a Ctrl+C.

  • Estoy usando Frog, una app similar, y me ha funcionado muy bien.
    https://getfrog.app

    • No tiene AppImage, ni .deb, ni brew.
  • En macOS hay una utilidad que hace algo más que abrir un documento en Preview e intentar seleccionar texto.
    https://github.com/schappim/macOCR
    Me gusta el autor.

    • Como referencia, sin pasar por Preview, puedes tomar una captura con Cmd-Shift-3 y luego hacer clic en la miniatura para interactuar con el texto en Quick Look.
      Después puedes borrar la imagen con el bote de basura de la esquina superior derecha, y Cmd-A también funciona.
      El ejemplo que probé para este comentario está aquí: https://imgur.com/a/q0NvcS6
  • En iOS uso una solución parecida con un atajo conectado al botón de acción.
    En algunas apps no es fácil copiar texto, o está en otro idioma; entonces toma una captura, extrae el texto, detecta automáticamente el idioma original y lo traduce al inglés, y muestra el original y la traducción en Quick View para poder seleccionarlos y copiarlos.
    Puedes probar un ejemplo de implementación aquí: https://www.icloud.com/shortcuts/f420d24e4960415da1a43f230abfce39
    Como referencia, en las versiones recientes de iOS también puedes abrir una foto en la app Fotos y seleccionar con el dedo el texto dentro de la imagen para copiarlo.

    • Excelente atajo.
      Lo probé presionando el botón de compartir en una imagen y luego usándolo desde la hoja de compartir, y funcionó; pero si ya le estás pasando una imagen, el paso de captura de pantalla es redundante.
  • Aunque dice “para Linux Desktop”, esto es Flatpak, y no todas las distribuciones de Linux traen Flatpak de forma predeterminada.
    Pienso probarlo una vez en una máquina virtual con Fedora; he visto muchas herramientas de este tipo, y la mayoría usan Tesseract.
    Fallan bastante con imágenes ásperas o con mucho ruido, o cuando las letras están deformadas o inclinadas, y no sirven para resolver CAPTCHA.
    https://tesseract-ocr.github.io/tessdoc/Home.html

    • ¿Qué distribución no permite usar Flatpak?
    • Esto es simplemente un montón de código Vala.
      Más exactamente, significa que el autor no creó un paquete para tu distribución, y que nadie más tuvo el tiempo ni las ganas de empaquetarlo.
      El mantenedor que buscas podrías ser tú.
    • Eso no es realmente una desventaja.
      Si solo hubiera un .deb, podrías decir que no sirve fuera de Ubuntu/Debian, y eso sería una desventaja mucho mayor.