- Dùng ứng dụng Shortcuts trên macOS, bạn có thể tạo shortcut OCR cục bộ mà không cần dịch vụ trả phí riêng, rồi chạy trích xuất văn bản từ ảnh trong terminal/CLI/Python
- Cấu hình cốt lõi là nối Shortcut Input vào action Extract Text from Image, rồi sao chép kết quả vào clipboard
- Tên shortcut nên đặt bằng chữ thường không có khoảng trắng như
ocr-text hoặc extract-text để dễ gọi từ CLI, và phải nhấn Enter sau khi nhập tên để lưu
- Trong terminal, chạy bằng
shortcuts run ocr-text -i , và kết quả trích xuất sẽ được sao chép vào clipboard để kiểm tra bằng Command-V
- Trong Python, có thể gọi cùng lệnh
shortcuts run bằng subprocess.check_output() để tái sử dụng shortcut OCR
Tạo shortcut OCR trong Shortcuts
- Mở ứng dụng Shortcuts trên macOS và tạo shortcut mới bằng nút
+
- Trong thanh bên phải, tìm
extract text, rồi kéo action Extract Text from Image vào vùng làm việc bên trái
- Nhấp vào đầu vào Image màu xanh của action
Extract text from ... và chọn Shortcut Input
- Action Receive sẽ xuất hiện ở phía trên, cứ để nguyên như vậy
- Tìm
copy trong thanh bên phải rồi đặt action Copy to Clipboard bên dưới Extract Text from Image
- Ở action cuối cùng, cần kiểm tra phần sau
Copy có phải là Text from Image hay không
- Quá trình kéo action
Copy to Clipboard xuống dưới có thể hơi bất tiện
- Tên shortcut nên đơn giản, viết thường và không có khoảng trắng như
extract-text hoặc ocr-text
- Sau khi nhập tên, phải nhấn Enter thì tên mới được lưu
Chạy từ CLI và Python
- Lệnh chạy shortcut trong terminal như sau
shortcuts run ocr-text -i
- Sau khi chạy, nếu dán bằng Command-V và thấy văn bản đã được trích xuất thì nghĩa là thiết lập đã đúng
- Trong Python, có thể chạy cùng lệnh bằng
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)
- Việc chia sẻ Shortcuts đôi khi có thể hoạt động không ổn định nên cần thiết lập thủ công, nhưng hầu hết các bước chỉ cần làm một lần
1 bình luận
Ý kiến trên Hacker News
Bài của OP rất hay. Framework Vision của Apple khá ấn tượng, và tôi đã dùng nó cho một dự án cá nhân để OCR hàng chục nghìn ảnh chụp màn hình bảng tính rồi đưa vào cơ sở dữ liệu PostgreSQL
Vì macOS và Nvidia vẫn chưa thực sự hợp nhau, tôi cũng đã thử các giải pháp OCR chạy trên CPU như Tesseract, nhưng kết quả sai quá thường xuyên. Framework Vision cho chất lượng đầu ra tốt nhất mà tôi từng thấy, đồng thời dùng ít tài nguyên tính toán nhất
Nó khá thiếu ổn định, nhưng cũng có thể là do tôi triển khai sai. Trong phần triển khai thực tế, tôi dùng vision.py của RHetTbull https://gist.github.com/RhetTbull/1c34fc07c95733642cffcd1ac5... và dùng ocrmac https://github.com/straussmaximilian/ocrmac để thử nghiệm; hiệu năng trên chiếc Hackintosh i7 6700k cũng tốt ngoài mong đợi
Tôi không tự gọi mình là lập trình viên, nhưng nếu có đủ thời gian thì thường vẫn giải quyết được vấn đề, chỉ là sẽ tốn khá nhiều thời gian
Chỉ cần nhìn vào các framework RAG là thấy nhiều nơi dùng hoặc hỗ trợ nhiều cách triển khai khác nhau; Tesseract gần như lúc nào cũng được hỗ trợ nhưng thường không phải lựa chọn lý tưởng. Các dự án như Unstructured https://github.com/Unstructured-IO/unstructured-inference hay DocTR https://github.com/mindee/doctr thường được ưa chuộng hơn
Chúng nhìn chung tận dụng các mô hình thị giác hiện đại https://github.com/mindee/doctr#models-architectures https://github.com/Unstructured-IO/unstructured-inference#mo... nên vượt xa Tesseract
Tôi chưa so sánh trực tiếp với framework Apple Vision, nhưng chắc chắn là tốt hơn Tesseract, và thậm chí có thể còn tốt hơn cả Apple Vision. Cũng có cách tiếp cận kết hợp nhiều phương pháp, nhưng sẽ khá phức tạp
AWS Textract có cung cấp mã mẫu Python để xuất bảng ra CSV, và nó hoạt động tốt
Khi làm điều tương tự trên Windows, tôi phát hiện ra PowerToys của Microsoft, vốn đã cài sẵn trên máy, có tích hợp một công cụ OCR khá tốt
Nhấn Win+Shift+T rồi chọn vùng cần quét là văn bản sẽ được sao chép vào clipboard
https://learn.microsoft.com/en-us/windows/powertoys/
https://learn.microsoft.com/en-us/windows/powertoys/text-ext...
Tôi đã làm một công cụ mã nguồn mở có cả CLI lẫn UI khá ổn, và nó miễn phí
https://trex.ameba.co
Tôi nhận ra rằng nhiều ứng dụng trên Mac, bao gồm Safari, Preview và Notes, tự động thực hiện OCR cho hình ảnh. Bạn có thể dễ dàng chọn văn bản trong ảnh rồi sao chép và dán sang nơi khác, rất tiện
Nếu đó là URL, tên miền hoặc mã QR, bạn có thể nhấn giữ hoặc click giữ ngay trên ảnh để mở liên kết trực tiếp từ ảnh, kể cả trong ảnh poster hay trong video
Bạn có thể chọn và sao chép từ ảnh, rồi dùng tính năng Handoff để dán vào điện thoại hoặc máy Mac
Tôi rất thích một công cụ OCR nhỏ trên MacBook, cài bằng brew: https://github.com/schappim/macOCR
Trên Windows, tôi khuyên dùng Text Extractor của PowerToys
https://learn.microsoft.com/en-us/windows/powertoys/text-ext...
Tôi cũng góp thêm một cách của mình: cái này đây: https://skaplanofficial.github.io/PyXA/tutorial/images.html#...
PyXA dùng framework Vision để trích xuất văn bản từ một hoặc nhiều hình ảnh. Đây chỉ là một phần nhỏ của gói nên có thể hơi quá tay cho tác vụ dùng một lần, nhưng vẫn là một lựa chọn
ImageAnalyzer mới hơn và tốt hơn nhiều. Shortcut của OP cũng rất có thể đang dùng API cũ ở bên trong
Trên macOS Ventura trở lên, chức năng OCR thực sự đã được tích hợp sẵn vào giao diện Image Capture
Khi quét PDF bằng máy quét tương thích AirPrint, sẽ xuất hiện ô chọn “OCR” ở bảng bên phải
Nếu muốn ghi nội dung vào file thì có thể làm như sau. Không dám nói đây là cách hiệu quả nhất, nhưng nó hoạt động
OCRTHISFILE="ocr-test.jpg"
shortcuts run ocr-text -i "${OCRTHISFILE}"
pbpaste > ${OCRTHISFILE}.txt
Hoặc nếu muốn vừa xem đầu ra vừa ghi vào file:
OCRTHISFILE="ocr-test.jpg"
shortcuts run ocr-text -i "${OCRTHISFILE}"
pbpaste | tee ${OCRTHISFILE}.txt
Tôi tự hỏi liệu tính năng Copy Subject của Apple Vision có kỹ thuật tương tự không. Dạo này tôi phụ thuộc vào tính năng này khá nhiều, nhưng cảm giác cách tiếp cận của nó quá hạn chế
Có vẻ chỉ cần đổi hành động “Extract text” thành “Remove background”. Khi chạy shortcut, có thể chỉ định tên file ảnh đầu ra bằng “-o”
shortcuts run remove-background -i ~/Downloads/portrait-beard.avif -o beard.jpg