5 puan yazan GN⁺ 2024-01-04 | 1 yorum | WhatsApp'ta paylaş
  • macOS Shortcuts uygulaması kullanılarak ek ücretli bir servis olmadan yerel bir OCR kısayolu oluşturulabilir ve terminal/CLI/Python üzerinden görüntülerden metin çıkarma işlemi çalıştırılabilir
  • Temel yapı, Extract Text from Image eylemine Shortcut Input bağlanması ve sonucun panoya kopyalanması akışından oluşur
  • Kısayol adı ocr-text veya extract-text gibi boşluksuz küçük harflerle seçilirse CLI’dan çağırmak kolay olur; adı girdikten sonra kaydetmek için Enter tuşuna basmak gerekir
  • Terminalde shortcuts run ocr-text -i ile çalıştırılır ve çıkarılan sonuç panoya kopyalanır; Command-V ile kontrol edilebilir
  • Python’da subprocess.check_output() ile aynı shortcuts run komutu çağrılarak OCR kısayolu yeniden kullanılabilir

Shortcuts’ta OCR kısayolu oluşturma

  • macOS’taki Shortcuts uygulamasını açın ve + düğmesiyle yeni bir kısayol oluşturun
  • Sağ kenar çubuğunda extract text aratın, ardından Extract Text from Image eylemini soldaki çalışma alanına sürükleyin
  • Extract text from ... eylemindeki mavi Image girişine tıklayın ve Shortcut Input seçeneğini seçin
    • Üst tarafta Receive eylemi görünür; olduğu gibi bırakabilirsiniz
  • Sağ kenar çubuğunda copy aratıp Copy to Clipboard eylemini Extract Text from Image eyleminin altına yerleştirin
    • Son eylemde Copy ifadesinden sonra gelen kısmın Text from Image olduğunu kontrol etmeniz gerekir
    • Copy to Clipboard eylemini aşağı sürüklemek biraz kullanışsız olabilir
  • Kısayol adı olarak extract-text veya ocr-text gibi basit, boşluksuz küçük harfli bir ad uygundur
    • Adı yazdıktan sonra kaydolması için Enter tuşuna basmanız gerekir

CLI ve Python’da çalıştırma

  • Terminalde kısayolu çalıştırma komutu şöyledir
shortcuts run ocr-text -i
  • Çalıştırdıktan sonra Command-V ile yapıştırdığınızda çıkarılan metni görüyorsanız kurulum doğru yapılmış demektir
  • Python’da aynı komut subprocess.check_output() ile çalıştırılabilir
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)
  • Shortcuts paylaşımı bazen garip davranabildiği için elle yapılandırma gerekebilir; ancak bu işlemlerin çoğunu yalnızca bir kez yapmak yeterlidir

1 yorum

 
GN⁺ 2024-01-04
Hacker News yorumları
  • OP'nin yazısı iyiydi. Apple'ın Vision framework'ü oldukça etkileyiciydi; on binlerce elektronik tablo ekran görüntüsünü OCR ile okuyup PostgreSQL veritabanına koyduğum kişisel bir projede kullandım
    macOS ile Nvidia hâlâ pek iyi anlaşmadığı için Tesseract gibi CPU tabanlı OCR'ları da denedim ama sonuçlar fazlasıyla sık hatalıydı. Vision framework'ü gördüklerim içinde en iyi çıktı kalitesini verdi ve en az hesaplama kaynağını kullandı
    Epey kararsızdı ama bu benim uygulama hatam da olabilir. Gerçek uygulamada RHetTbull'un vision.py'sini https://gist.github.com/RhetTbull/1c34fc07c95733642cffcd1ac5..., denemelerde de ocrmac'i https://github.com/straussmaximilian/ocrmac birlikte kullandım; i7 6700k Hackintosh'ta bile performans şaşırtıcı derecede iyiydi
    Kendime programcı demem ama yeterince zaman olunca genelde sorunları çözebildim; bunun karşılığında epey zaman harcadım

    • Tesseract'tan iyiyse gerçekten etkileyici. Birkaç macOS makinesi çalıştırıp bunu API servisine dönüştürerek para kazanmak mümkün mü, hukuken de yapılabilir mi merak ediyorum
    • Tesseract'ı tek başına kullanmanın artık yaygın biçimde idare eder seviyede olduğu biliniyor
      Sadece RAG framework'lerine baksanız bile çoğu birden fazla uygulamayı kullanıyor ya da destekliyor; Tesseract neredeyse her zaman destekleniyor ama genelde ideal seçenek değil. Unstructured https://github.com/Unstructured-IO/unstructured-inference veya DocTR https://github.com/mindee/doctr gibi projeler daha çok tercih ediliyor
      Bunlar genelde modern seviyedeki vision modellerinden https://github.com/mindee/doctr#models-architectures https://github.com/Unstructured-IO/unstructured-inference#mo... yararlanarak Tesseract'ı açık ara geride bırakıyor
      Apple Vision framework'üyle doğrudan karşılaştırmadım ama Tesseract'tan kesinlikle daha iyi; potansiyel olarak Apple Vision'dan da iyi olabilir. Birden fazla yöntemi birleştiren yaklaşımlar da var ama işler epey karmaşıklaşıyor
    • Apple Vision Framework ile PDF veya görsellerden tablo yapısı çıkarmaya yönelik bir öğretici var mı merak ediyorum. Metindeki iki bağlantıyı denedim; tablo yapısını korumadan yalnızca metni çıkardılar
      AWS Textract, tabloları CSV olarak çıkarmak için Python örnek kodu sağlıyor ve o iyi çalışıyor
  • Windows'ta benzer bir şey yapmaya çalışırken, zaten kurulu olan Microsoft projesi PowerToys içinde oldukça iyi bir OCR aracı olduğunu fark ettim
    Win+Shift+T'ye basıp taranacak alanı seçince metin panoya kopyalanıyor
    https://learn.microsoft.com/en-us/windows/powertoys/
    https://learn.microsoft.com/en-us/windows/powertoys/text-ext...

    • AutoHotkey ile PowerToys'u birlikte kullanarak ekran görüntüsü verilerini CSV'ye ekliyorum; kendi tuş eşlemelerimle birlikte iyi çalışıyor
  • Hem CLI hem de düzgün bir UI sunan açık kaynaklı bir araç yaptım ve ücretsiz
    https://trex.ameba.co

    • Trex'i her gün kullanıyorum. El yazısını ve berbat ekran yakalamalarını bile iyi işlemesi etkileyici
  • Safari, Preview, Notes dahil birçok Mac uygulamasının görseller üzerinde otomatik OCR yaptığını fark ettim. Görsel içindeki metni kolayca seçip başka yere kopyalayıp yapıştırabiliyorsunuz; oldukça iyi

    • Kalitesi neredeyse akıl almaz derecede iyi. YouTube videosu oynarken bile videodaki metni seçebiliyorsunuz; gerekirse duraklatabilirsiniz de
      URL veya alan adı metni ya da QR kod ise, bir poster fotoğrafında veya videonun içinde bile uzun basarak ya da uzun tıklayarak bağlantıyı doğrudan görselden açabiliyorsunuz
    • Photos uygulaması da aynı şekilde. Konferanslarda ya da uzun bir dizgiyi dijitalleştirmeniz gerektiğinde gerçekten iyi. Örneğin varsayılan yönlendirici parolası gibi
      Fotoğraftan seçip kopyaladıktan sonra Handoff özelliğiyle telefona veya Mac'e yapıştırabiliyorsunuz
  • MacBook'umda brew ile kurup kullandığım küçük OCR aracını çok seviyorum: https://github.com/schappim/macOCR

    • Ben de aynı fikirdeyim. Benim kullanımım için o yardımcı aracı bir macOS Shortcut ile sarıp menü çubuğundan tıklayarak veya Quicksilver ile çalıştırabilmek yeterli
  • Windows'ta PowerToys'un Text Extractor aracını öneririm
    https://learn.microsoft.com/en-us/windows/powertoys/text-ext...

  • Benim çözümümü de ekleyeyim, şu: https://skaplanofficial.github.io/PyXA/tutorial/images.html#...
    PyXA, Vision framework'ünü kullanarak bir veya daha fazla görüntüden metin çıkarıyor. Paketin küçük bir parçası olduğu için tek seferlik işler için fazla kaçabilir ama bir seçenek

    • Bu arada daha eski ve doğruluğu daha düşük olan API'yi, VNRecognizeTextRequest'i kullanıyor
      ImageAnalyzer daha yeni ve çok daha iyi. OP'nin shortcut'ının da içeride eski API'yi kullanıyor olma ihtimali yüksek görünüyor
  • macOS Ventura ve sonraki sürümlerde Image Capture arayüzüne varsayılan OCR özelliği gerçekten entegre edilmiş durumda
    AirPrint uyumlu bir tarayıcıyla PDF tararken sağ panelde “OCR” onay kutusu görünüyor

  • İçeriği bir dosyaya koymak için şöyle yapabilirsiniz. En verimlisi olduğunu söylemiyorum ama çalışıyor
    OCRTHISFILE="ocr-test.jpg"
    shortcuts run ocr-text -i "${OCRTHISFILE}"
    pbpaste > ${OCRTHISFILE}.txt
    Ya da çıktıyı görürken dosyaya da yazmak için:
    OCRTHISFILE="ocr-test.jpg"
    shortcuts run ocr-text -i "${OCRTHISFILE}"
    pbpaste | tee ${OCRTHISFILE}.txt

    • macOS Shortcuts'ta OCR metnini dosyaya çıktı olarak verdirebilirsiniz. Bunun için “Append to Text File” eylemini kullanmak yeterli
  • Apple Vision'ın Copy Subject özelliğinde de benzer bir teknik olup olmadığını merak ediyorum. Bu özelliğe epey bağımlı hale geldim ama erişim yöntemi çok kısıtlayıcı geliyor