- Avec l’app Shortcuts de macOS, il est possible de créer un raccourci d’OCR local sans service payant supplémentaire, puis d’extraire le texte d’images depuis le terminal, en CLI ou avec Python
- La configuration clé consiste à relier Shortcut Input à l’action Extract Text from Image, puis à copier le résultat dans le presse-papiers
- Il est préférable de donner au raccourci un nom simple, en minuscules et sans espaces, comme
ocr-text ou extract-text, afin de l’appeler facilement en CLI ; il faut appuyer sur Entrée après avoir saisi le nom pour l’enregistrer
- Dans le terminal, on l’exécute avec
shortcuts run ocr-text -i , puis le résultat extrait est copié dans le presse-papiers et peut être vérifié avec Command-V
- En Python, on peut réutiliser le même raccourci d’OCR en appelant la commande
shortcuts run via subprocess.check_output()
Créer un raccourci OCR dans Shortcuts
- Ouvrir l’app Shortcuts sur macOS et créer un nouveau raccourci avec le bouton
+
- Dans la barre latérale droite, rechercher
extract text, puis faire glisser l’action Extract Text from Image dans la zone de travail à gauche
- Cliquer sur l’entrée Image en bleu dans l’action
Extract text from ..., puis sélectionner Shortcut Input
- L’action Receive apparaît en haut ; il suffit de la laisser telle quelle
- Dans la barre latérale droite, rechercher
copy, puis placer l’action Copy to Clipboard sous Extract Text from Image
- Dans la dernière action, il faut vérifier que l’élément après
Copy est bien Text from Image
- Faire glisser l’action
Copy to Clipboard vers le bas peut être un peu peu pratique
- Un nom simple, en minuscules et sans espaces, comme
extract-text ou ocr-text, convient bien pour le raccourci
- Après avoir saisi le nom, il faut appuyer sur Entrée pour l’enregistrer
Exécution en CLI et avec Python
- La commande pour exécuter le raccourci dans le terminal est la suivante
shortcuts run ocr-text -i
- Si, après l’exécution, le texte extrait apparaît lorsque vous collez avec Command-V, c’est que la configuration est correcte
- En Python, il est possible d’exécuter la même commande avec
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)
- Le partage de Shortcuts peut parfois se comporter de façon étrange et nécessiter une configuration manuelle, mais dans la plupart des cas cela ne doit être fait qu’une seule fois
1 commentaires
Avis de Hacker News
Bon billet de l’OP. Le framework Vision d’Apple est assez impressionnant, et je l’ai utilisé pour un projet personnel consistant à lire par OCR des dizaines de milliers de captures d’écran de tableurs et à les insérer dans une base de données PostgreSQL
Comme macOS et Nvidia ne font toujours pas bon ménage, j’ai aussi essayé des solutions d’OCR basées CPU comme Tesseract, mais les résultats étaient beaucoup trop souvent incorrects. Le framework Vision a donné la meilleure qualité de sortie que j’aie vue, tout en utilisant le moins de calcul
C’était tout de même assez instable, même si c’était peut-être dû à une erreur dans mon implémentation. Pour l’implémentation réelle, j’ai utilisé vision.py de RHetTbull https://gist.github.com/RhetTbull/1c34fc07c95733642cffcd1ac5..., et pour les expérimentations ocrmac https://github.com/straussmaximilian/ocrmac ; les performances étaient étonnamment bonnes même sur un Hackintosh i7 6700k
Je ne me qualifierais pas de programmeur, mais avec assez de temps j’ai généralement réussi à résoudre les problèmes, au prix de pas mal d’heures
Rien que dans les frameworks RAG, beaucoup utilisent ou prennent en charge plusieurs implémentations ; Tesseract est presque toujours pris en charge, mais ce n’est généralement pas le choix idéal. Des projets comme Unstructured https://github.com/Unstructured-IO/unstructured-inference ou DocTR https://github.com/mindee/doctr sont davantage privilégiés
Ils s’appuient en général sur des modèles de vision de pointe https://github.com/mindee/doctr#models-architectures https://github.com/Unstructured-IO/unstructured-inference#mo..., ce qui surclasse Tesseract
Je ne les ai pas comparés directement au framework Apple Vision, mais ils sont clairement meilleurs que Tesseract et pourraient potentiellement être meilleurs qu’Apple Vision. Il existe aussi des approches combinant plusieurs méthodes, mais cela devient assez complexe
AWS Textract fournit un exemple de code Python pour extraire des tableaux en CSV, et cela fonctionne bien
En essayant de faire quelque chose de similaire sous Windows, j’ai découvert que PowerToys, un projet Microsoft que j’avais déjà installé, incluait un assez bon outil d’OCR
Appuyez sur Win+Shift+T, sélectionnez la zone à scanner, et le texte est copié dans le presse-papiers
https://learn.microsoft.com/en-us/windows/powertoys/
https://learn.microsoft.com/en-us/windows/powertoys/text-ext...
J’ai créé un outil open source qui propose à la fois une CLI et une interface correcte, et il est gratuit
https://trex.ameba.co
J’ai découvert que de nombreuses apps Mac, dont Safari, Preview et Notes, effectuent automatiquement de l’OCR sur les images. On peut facilement sélectionner le texte dans les images et le copier-coller ailleurs, c’est plutôt pratique
S’il s’agit d’une URL, d’un nom de domaine ou d’un QR code, on peut aussi appuyer longtemps ou cliquer longuement, même sur une photo d’affiche ou dans une vidéo, pour ouvrir directement le lien depuis l’image
On peut le sélectionner et le copier depuis la photo, puis le coller sur son téléphone ou son Mac via Handoff
J’aime beaucoup un petit outil d’OCR que j’installe avec brew sur mon MacBook : https://github.com/schappim/macOCR
Sous Windows, je recommande Text Extractor de PowerToys
https://learn.microsoft.com/en-us/windows/powertoys/text-ext...
J’ajoute aussi ma solution : https://skaplanofficial.github.io/PyXA/tutorial/images.html#...
PyXA utilise le framework Vision pour extraire du texte depuis une ou plusieurs images. Ce n’est qu’une petite partie du package, donc ça peut être excessif pour une tâche ponctuelle, mais c’est une option.
ImageAnalyzer est plus récent et bien meilleur. Le shortcut de l’OP utilise très probablement aussi l’ancienne API en interne.
Depuis macOS Ventura, une fonction OCR est effectivement intégrée par défaut dans l’interface d’Image Capture.
Quand on scanne un PDF avec un scanner compatible AirPrint, une case « OCR » apparaît dans le panneau de droite.
Pour mettre le contenu dans un fichier, on peut faire comme ceci. Je ne dis pas que c’est le plus efficace, mais ça fonctionne.
OCRTHISFILE="ocr-test.jpg"
shortcuts run ocr-text -i "${OCRTHISFILE}"
pbpaste > ${OCRTHISFILE}.txt
Ou, pour voir la sortie tout en l’écrivant aussi dans un fichier :
OCRTHISFILE="ocr-test.jpg"
shortcuts run ocr-text -i "${OCRTHISFILE}"
pbpaste | tee ${OCRTHISFILE}.txt
Je me demande s’il existe une technique similaire pour la fonction Copy Subject d’Apple Vision. Je suis devenu assez dépendant de cette fonction, mais son mode d’accès me paraît trop limité.
Il devrait suffire de remplacer l’action « Extract text » par « Remove background ». Quand on exécute le shortcut, il faut indiquer avec « -o » le nom du fichier image de sortie.
shortcuts run remove-background -i ~/Downloads/portrait-beard.avif -o beard.jpg