- Mit der Shortcuts-App unter macOS lässt sich ohne zusätzlichen kostenpflichtigen Dienst ein lokaler OCR-Kurzbefehl erstellen, mit dem sich die Texterkennung aus Bildern im Terminal/per CLI/per Python ausführen lässt
- Der Kernaufbau ist ein Ablauf, bei dem Shortcut Input mit der Aktion Extract Text from Image verbunden wird und das Ergebnis in die Zwischenablage kopiert wird
- Als Name für den Kurzbefehl eignet sich ein kleingeschriebener Name ohne Leerzeichen wie
ocr-text oder extract-text, da er sich so leichter über die CLI aufrufen lässt; nach der Eingabe des Namens muss zum Speichern Enter gedrückt werden
- Im Terminal wird er mit
shortcuts run ocr-text -i ausgeführt, und das extrahierte Ergebnis wird in die Zwischenablage kopiert und kann mit Command-V überprüft werden
- In Python kann derselbe
shortcuts run-Befehl über subprocess.check_output() aufgerufen werden, um den OCR-Kurzbefehl wiederzuverwenden
OCR-Kurzbefehl in Shortcuts erstellen
- Die Shortcuts-App in macOS öffnen und über die
+-Schaltfläche einen neuen Kurzbefehl erstellen
- In der rechten Seitenleiste nach
extract text suchen und die Aktion Extract Text from Image in den linken Arbeitsbereich ziehen
- In der Aktion
Extract text from ... auf die blaue Eingabe Image klicken und Shortcut Input auswählen
- Oben erscheint die Aktion Receive; diese kann unverändert bleiben
- In der rechten Seitenleiste nach
copy suchen und die Aktion Copy to Clipboard unter Extract Text from Image platzieren
- In der letzten Aktion muss überprüft werden, dass hinter
Copy Text from Image steht
- Das Herunterziehen der Aktion
Copy to Clipboard kann etwas umständlich sein
- Für den Kurzbefehl ist ein einfacher, kleingeschriebener Name ohne Leerzeichen wie
extract-text oder ocr-text geeignet
- Nach der Eingabe des Namens muss Enter gedrückt werden, damit er gespeichert wird
In CLI und Python ausführen
- Der Befehl zum Ausführen des Kurzbefehls im Terminal lautet wie folgt
shortcuts run ocr-text -i
- Wenn nach der Ausführung beim Einfügen mit Command-V der extrahierte Text sichtbar ist, ist die Einrichtung korrekt
- In Python kann derselbe Befehl mit
subprocess.check_output() ausgeführt werden
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)
- Das Teilen von Shortcuts kann sich mitunter merkwürdig verhalten, daher kann eine manuelle Einrichtung nötig sein; der Großteil des Vorgangs muss jedoch nur einmal durchgeführt werden
1 Kommentare
Meinungen auf Hacker News
Guter Beitrag vom OP. Apples Vision-Framework war ziemlich beeindruckend, und ich habe es für ein persönliches Projekt verwendet, bei dem ich Zehntausende Screenshots von Tabellen per OCR eingelesen und in eine PostgreSQL-Datenbank geschrieben habe.
Da macOS und Nvidia immer noch nicht besonders gut zusammenpassen, habe ich auch CPU-basiertes OCR wie Tesseract ausprobiert, aber die Ergebnisse waren viel zu oft falsch. Das Vision-Framework lieferte die beste Ausgabequalität, die ich gesehen habe, und benötigte zugleich am wenigsten Rechenaufwand.
Es war zwar ziemlich instabil, aber das könnte auch an Fehlern in meiner Implementierung gelegen haben. Für die eigentliche Implementierung habe ich RHetTbulls vision.py https://gist.github.com/RhetTbull/1c34fc07c95733642cffcd1ac5... verwendet, für Experimente zusätzlich ocrmac https://github.com/straussmaximilian/ocrmac, und selbst auf einem i7-6700k-Hackintosh war die Performance überraschend gut.
Ich würde mich selbst nicht Programmierer nennen, aber mit genug Zeit konnte ich die Probleme meist lösen — es hat nur ziemlich lange gedauert.
Schon bei RAG-Frameworks sieht man häufig mehrere Implementierungen im Einsatz oder unterstützt; Tesseract wird fast immer unterstützt, ist aber normalerweise nicht die ideale Wahl. Projekte wie Unstructured https://github.com/Unstructured-IO/unstructured-inference oder DocTR https://github.com/mindee/doctr werden eher bevorzugt.
Sie nutzen meist moderne Vision-Modelle https://github.com/mindee/doctr#models-architectures https://github.com/Unstructured-IO/unstructured-inference#mo... und übertreffen Tesseract deutlich.
Ich habe sie nicht direkt mit dem Apple Vision Framework verglichen, aber sie sind definitiv besser als Tesseract und könnten potenziell auch besser als Apple Vision sein. Es gibt auch Ansätze, mehrere Methoden zu kombinieren, aber das wird ziemlich komplex.
AWS Textract stellt Python-Beispielcode bereit, der Tabellen als CSV extrahiert, und das funktioniert gut.
Als ich unter Windows etwas Ähnliches ausprobieren wollte, stellte ich fest, dass in PowerToys, einem Microsoft-Projekt, das ich bereits installiert hatte, ein ziemlich gutes OCR-Tool enthalten ist.
Drückt man Win+Shift+T und wählt den zu scannenden Bereich aus, wird der Text in die Zwischenablage kopiert.
https://learn.microsoft.com/en-us/windows/powertoys/
https://learn.microsoft.com/en-us/windows/powertoys/text-ext...
Ich habe ein Open-Source-Tool gebaut, das sowohl eine CLI als auch eine brauchbare UI bietet, und es ist kostenlos.
https://trex.ameba.co
Ich habe festgestellt, dass viele Mac-Apps, darunter Safari, Preview und Notes, bei Bildern automatisch OCR ausführen. Man kann Text in Bildern einfach auswählen und anderswohin kopieren und einfügen; das ist ziemlich gut.
Bei URLs, Domain-Text oder QR-Codes kann man sogar in einem Posterfoto oder Video lange drücken oder lange klicken und den Link direkt aus dem Bild öffnen.
Man kann es im Foto auswählen und kopieren und dann über Handoff auf dem Telefon oder Mac einfügen.
Ich mag ein kleines OCR-Tool sehr, das ich per brew auf dem MacBook installiert habe: https://github.com/schappim/macOCR
Unter Windows empfehle ich den Text Extractor aus PowerToys.
https://learn.microsoft.com/en-us/windows/powertoys/text-ext...
Wenn ich meine Lösung noch ergänzen darf, dann diese hier: https://skaplanofficial.github.io/PyXA/tutorial/images.html#...
PyXA verwendet das Vision-Framework, um Text aus einem oder mehreren Bildern zu extrahieren. Es ist nur ein kleiner Teil des Pakets und für einmalige Aufgaben vielleicht überdimensioniert, aber es ist eine Option.
ImageAnalyzer ist neuer und deutlich besser. Es sieht sehr danach aus, dass auch der Shortcut des OP intern die alte API verwendet.
Seit macOS Ventura ist tatsächlich eine native OCR-Funktion in die Image-Capture-Oberfläche integriert.
Wenn man mit einem AirPrint-kompatiblen Scanner ein PDF scannt, erscheint im rechten Panel eine Checkbox „OCR“.
Um den Inhalt in eine Datei zu schreiben, kann man das so machen. Ich will nicht behaupten, dass es die effizienteste Methode ist, aber sie funktioniert.
OCRTHISFILE="ocr-test.jpg"
shortcuts run ocr-text -i "${OCRTHISFILE}"
pbpaste > ${OCRTHISFILE}.txt
Oder, wenn man die Ausgabe sehen und gleichzeitig in eine Datei schreiben möchte:
OCRTHISFILE="ocr-test.jpg"
shortcuts run ocr-text -i "${OCRTHISFILE}"
pbpaste | tee ${OCRTHISFILE}.txt
Ich frage mich, ob es für Apples Vision-Funktion Copy Subject eine ähnliche Technik gibt. Ich verlasse mich inzwischen ziemlich darauf, aber der Zugriff darauf fühlt sich sehr eingeschränkt an.
Man könnte versuchen, die Aktion „Extract text“ durch „Remove background“ zu ersetzen. Beim Ausführen des Shortcuts kann man mit „-o“ den Dateinamen für das Ausgabebild angeben.
shortcuts run remove-background -i ~/Downloads/portrait-beard.avif -o beard.jpg