3 points par GN⁺ 2024-03-17 | 1 commentaires | Partager sur WhatsApp
  • TextSnatcher est une application OCR pour Linux conçue pour copier rapidement le texte contenu dans des images, en glissant sur l’image pour effectuer la reconnaissance de caractères puis coller le résultat
  • Ses fonctions clés sont la prise en charge multilingue, la copie de texte depuis une image, le glisser sur n’importe quelle image puis le collage, ainsi qu’une utilisation rapide et simple
  • Pour la reconnaissance de caractères, l’application utilise Tesseract OCR 4.x et fournit aussi des liens vers la documentation Tesseract et le projet Tesseract
  • La distribution se fait via Flathub et l’AppCenter d’elementary OS ; pour compiler soi-même, il faut suivre une procédure d’installation basée sur Meson et Ninja
  • L’exécution nécessite scrot, tesseract-ocr et les données linguistiques de Tesseract ; le projet indique actuellement qu’il reviendra le mois prochain avec des mises à jour et des corrections

Ce que fait TextSnatcher

  • TextSnatcher est une application Linux qui permet de copier du texte depuis des images et d’effectuer des opérations OCR en quelques secondes
  • L’utilisateur peut glisser sur une image pour copier le texte puis le coller
  • Fonctionnalités proposées :
    • Prise en charge multilingue

      • Copier du texte depuis une image par glisser
      • Glisser sur n’importe quelle image puis coller
      • Utilisation rapide et simple

Moteur OCR et projets associés

Installation et canaux de distribution

  • L’application peut être téléchargée sur Flathub
  • Les utilisateurs d’elementary OS peuvent l’obtenir via AppCenter

Dépendances et compilation

  • Dépendances d’exécution nécessaires :
    • scrot
    • tesseract-ocr
    • Données linguistiques Tesseract
      • Des liens vers les dépôts Arch et Debian sont fournis
  • Dépendances de compilation nécessaires :
    • granite
    • gtk+-3.0
    • gobject-2.0
    • gdk-pixbuf-2.0
    • libhandy-1
    • libportal-0.5
  • La compilation et l’exécution manuelles consistent à cloner le dépôt, créer un répertoire de build Meson, installer avec Ninja, puis lancer com.github.rajsolai.textsnatcher

État du développement et source

  • Le projet inclut un badge indiquant qu’il a été développé en Vala
  • Le README précise que l’auteur collecte actuellement des fonds pour acheter un PC Linux et que le projet devrait revenir le mois prochain avec des mises à jour et des corrections
  • Les sources d’inspiration mentionnées sont le README de Planner, la structure applicative de Develop et l’application macOS TextSniper

1 commentaires

 
GN⁺ 2024-03-17
Commentaires Hacker News
  • J’utilise un script comme celui de Dibby053, récupéré sur Stack Overflow puis légèrement modifié pour fonctionner avec KDE/GNOME et Wayland/X11, avec affichage de l’état actuel via des notifications
    Je n’ai pas encore testé moi-même la détection X11/Wayland, mais n’hésitez pas à l’essayer et à faire un retour

    • J’ai un peu modifié le script pour que le nettoyage se fasse correctement et pour lancer spectacle en mode arrière-plan, afin que la fenêtre ne ressurgisse pas après la capture d’écran
    • La gestion des erreurs est bonne, mais on peut éviter les fichiers temporaires en passant par des pipes
      Il enchaîne grim, slurp, mogrify, tesseract et wl-copy, puis utilise fuzzel pour choisir la langue de l’OCR
    • J’utilisais moi aussi le même script, puis j’ai découvert cette approche sur HN
      On choisit la langue avec dmenu, puis on traite avec maim -us | tesseract --dpi 145 -l eng+${lang} - - | xsel -bi
      https://news.ycombinator.com/item?id=33704483#33705272
    • ShellCheck peut parfois produire un faux positif sur trap "cleanup '$SCR_IMG'" EXIT, mais ici ce n’est pas totalement erroné
      La commande passée à trap est en général évaluée, donc l’expansion des variables a lieu, et trap 'cleanup "$SCR_IMG"' EXIT est plus sûr
      Avec une version récente de Bash, trap "cleanup ${SCR_IMG@Q}" EXIT est aussi une option
    • J’ai lié bash -c 'flameshot gui -s -r | tesseract - - | gxmessage -title "Decoded Data" -fn "Consolas 12" -wrap -geometry 640x480 -file -' à un raccourci
      En appuyant sur Super+O puis en faisant glisser sur la zone à OCRiser, le texte capturé s’affiche immédiatement dans une boîte de dialogue
  • J’ai un script copié quelque part il y a longtemps qui fait ça plutôt bien
    Il capture une zone avec scrot, applique un prétraitement en noir et blanc et en agrandissement avec mogrify, extrait le texte avec tesseract, le place dans le presse-papiers avec xsel et affiche même une notification

    • Pour compléter, je préfère maim à scrot
      Grâce à l’option --nodrag, quand on sélectionne une zone au trackpad, il suffit de cliquer une fois, déplacer le curseur, puis cliquer à nouveau, ce qui est plus pratique
      Dans maim -s --nodrag --quality=10 $IMG.png, 10 correspond à 100 dans scrot
    • J’ai utilisé ce genre de solution pendant un moment, mais Tesseract était assez souvent en dessous des attentes
      Le prétraitement par agrandissement ne m’a pas semblé faire une grande différence, et je ne sais pas quel type de prétraitement améliorerait vraiment les choses
      Je me demande si TextSnatcher apporte quelque chose de mieux, mais la page GitHub reste floue
    • J’avais aussi un script similaire en PowerShell, mais il a disparu avec les petits scripts de mon ancien emploi
      Désolé pour mes collègues qui vivent entre Unix et Windows
    • Pour trap "rm $IMG*" EXIT, mieux vaut consulter https://www.shellcheck.net/wiki/SC2064
      Il vaut mieux utiliser mktemp -d puis supprimer récursivement le répertoire
    • Pour moi, cette approche est parfaite
      Lier un script à un raccourci clavier est bien mieux que devoir cliquer dans une fenêtre avec des boutons
  • Pour les collègues simples mortels qui utilisent Windows, cette fonction existe aussi dans l’extension officielle Microsoft PowerToys
    Elle a aussi été intégrée à l’outil de capture par défaut, mais personnellement je trouve le raccourci clavier unique de PowerToys plus pratique
    https://github.com/microsoft/PowerToys

    • L’OCR de l’outil Capture intégré fonctionne avec plusieurs langues, dont l’anglais, le russe, le chinois et le japonais, sans avoir à installer séparément de pack OCR de langue
    • L’outil de capture par défaut propose également cette fonction
      Il suffit d’appuyer sur WIN+SHIFT+S et, si l’icône « Text actions » n’apparaît pas, de mettre à jour vers la dernière version via le Windows Store
  • Je me demande depuis longtemps si Tesseract est vraiment encore la meilleure solution de pointe dans ce domaine
    Intuitivement, ça semble assez limité, et vu les progrès de la vision par ordinateur vers 2019, j’avais l’impression que la reconnaissance de texte aurait déjà dû être un problème pratiquement résolu
    On dirait qu’elle devrait faire mieux qu’un humain, et pourtant elle ne parvenait même pas à convertir correctement des scans de reçus en basse résolution, surtout dès qu’il ne s’agissait plus d’anglais
    C’est peut-être simplement moi qui l’utilise mal

    • J’utilise Tesseract semi-régulièrement et j’ai rarement eu des problèmes de reconnaissance, même sur des scans de reçus ou des photos
      Je serais curieux de savoir plus précisément comment tu l’utilises
  • Je vois Tesseract être mentionné de plus en plus souvent
    Quand je l’avais essayé sur des articles scientifiques scannés il y a 10 à 15 ans, les résultats étaient décevants, et la post-correction manuelle n’était pas tellement moins lourde que de tout retaper soi-même
    Du coup, pour moi, Tesseract est devenu synonyme de « ne vaut pas la peine d’essayer », mais ça a peut-être progressé avec le temps, donc ça vaudrait le coup de réessayer

    • Aujourd’hui, c’est correct si l’on fait seulement de l’OCR sur des documents scannés ou si l’on peut beaucoup contrôler la préparation des images
      Pour la reconnaissance générique, y compris avec des polices bizarres ou une mauvaise qualité d’image, EasyOCR m’a donné de bien meilleurs résultats
    • Ce projet embarque Tesseract 4.1.1, qui a au moins quelques années
    • Ça vaut le coup d’essayer https://github.com/ocrmypdf/OCRmyPDF
      Ça utilise Tesseract en interne et c’est vraiment excellent
    • C’est bien meilleur maintenant
      Il y a 15 ans, il fallait faire pas mal de prétraitement pour obtenir un résultat simplement moins mauvais, alors qu’aujourd’hui j’obtiens de bons résultats sans prétraitement
    • Quand je l’ai utilisé pour la première fois il y a 3 ou 4 ans, c’était déjà correct
  • Je l’ai essayé moi-même, et ça fonctionne plutôt bien.
    Comme c’est une appli Flatpak, il faut un portail de bureau pour un fonctionnement complet, mais avec une configuration xdg-desktop-portal-wlr existante, ça a bien marché sans réglage supplémentaire.
    Dans un environnement X11 ou Wayland avec une configuration xdg-desktop-portal prenant en charge la Screenshot API, ça devrait fonctionner sans problème particulier.
    Les résultats sont variables, mais pas mauvais, et sur du texte proprement lisible il n’y a guère que des problèmes d’espacement ou quelques erreurs occasionnelles, donc ça peut être utile pour copier du texte depuis des choses comme des boîtes de dialogue d’erreur.
    Cela dit, sous Linux, le texte des boîtes de dialogue d’erreur est souvent sélectionnable de toute façon, et la MessageBox standard de Windows réagit à Ctrl+C.

  • J’utilise Frog comme application similaire, et ça me réussit très bien.
    https://getfrog.app

    • Pas d’AppImage, pas de .deb, pas de brew non plus.
  • Sur macOS, il existe un utilitaire qui fait plus que simplement ouvrir un document dans Preview et tenter de sélectionner le texte.
    https://github.com/schappim/macOCR
    J’aime bien l’auteur.

    • À noter qu’on peut aussi prendre une capture d’écran avec Cmd-Shift-3 sans passer par Preview, puis cliquer sur la vignette pour interagir avec le texte dans Quick Look.
      Ensuite, il suffit de supprimer l’image avec la corbeille en haut à droite, et Cmd-A fonctionne aussi.
      Un exemple utilisé dans ce commentaire est ici : https://imgur.com/a/q0NvcS6
  • Sur iOS, j’utilise une solution similaire avec un raccourci relié au bouton Action.
    Certaines apps ne facilitent pas la copie de texte, ou bien le texte est en langue étrangère ; je prends donc une capture d’écran, j’en extrais le texte, je détecte automatiquement la langue source pour la traduire en anglais, puis j’affiche l’original et la traduction dans Quick View afin de pouvoir les sélectionner et les copier.
    Vous pouvez tester un exemple d’implémentation ici : https://www.icloud.com/shortcuts/f420d24e4960415da1a43f230abfce39
    À noter aussi que sur les versions récentes d’iOS, on peut ouvrir une photo dans l’app Photos et sélectionner puis copier directement le texte dans l’image avec le doigt.

    • Excellent raccourci.
      Je l’ai utilisé depuis la feuille de partage après avoir appuyé sur le bouton de partage de l’image, et ça a fonctionné, mais si l’image est déjà transmise à ce stade, l’étape de capture d’écran fait doublon.
  • On dit que c’est « pour Linux Desktop », mais c’est du Flatpak, et toutes les distributions Linux ne fournissent pas Flatpak par défaut.
    Je vais l’essayer une fois dans une machine virtuelle Fedora ; j’ai déjà vu beaucoup d’outils de ce genre, et la plupart s’appuient sur Tesseract.
    Sur des images grossières ou bruitées, ou quand le texte est courbé ou incliné, ça échoue largement, et ça ne résout pas les CAPTCHA.
    https://tesseract-ocr.github.io/tessdoc/Home.html

    • Quelle distribution ne fait pas fonctionner Flatpak ?
    • Ce n’est qu’un tas de code Vala.
      Plus précisément, cela veut surtout dire que l’auteur n’a pas créé de paquet pour votre distribution, et que personne d’autre n’a pris le temps ni la motivation de le packager.
      Le mainteneur que vous cherchez, ça pourrait bien être vous.
    • Ce n’est pas vraiment un inconvénient.
      S’il n’y avait qu’un .deb, on pourrait dire que ça ne marche pas ailleurs que sur Ubuntu/Debian, et ce serait un inconvénient bien plus grand.