3 điểm bởi GN⁺ 2024-03-17 | 1 bình luận | Chia sẻ qua WhatsApp
  • TextSnatcher là ứng dụng OCR để nhanh chóng sao chép văn bản trong hình ảnh trên Linux; người dùng có thể kéo trên ảnh để nhận dạng ký tự rồi dán kết quả
  • Các tính năng cốt lõi gồm hỗ trợ đa ngôn ngữ, sao chép văn bản từ hình ảnh, kéo trên hình ảnh bất kỳ rồi dán, cùng khả năng sử dụng nhanh và dễ dàng
  • Phần nhận dạng ký tự sử dụng Tesseract OCR 4.x, đồng thời cung cấp liên kết tới tài liệu Tesseract và dự án Tesseract
  • Ứng dụng được phân phối qua FlathubAppCenter của elementary OS; nếu muốn tự build, dùng quy trình cài đặt dựa trên Meson và Ninja
  • Để chạy cần có scrot, tesseract-ocr và dữ liệu ngôn ngữ Tesseract; dự án hiện cho biết sẽ quay lại với các bản cập nhật và sửa lỗi vào tháng tới

TextSnatcher làm gì

  • TextSnatcher là ứng dụng dành cho Linux giúp sao chép văn bản từ hình ảnh và thực hiện tác vụ OCR trong vài giây
  • Người dùng có thể kéo trên hình ảnh để sao chép văn bản rồi dán
  • Các tính năng được cung cấp:
    • Hỗ trợ đa ngôn ngữ

      • Sao chép văn bản từ hình ảnh bằng thao tác kéo
      • Kéo trên hình ảnh bất kỳ rồi dán
      • Sử dụng nhanh và dễ dàng

Công cụ OCR và các dự án liên quan

Cài đặt và kênh phân phối

  • Có thể tải ứng dụng từ Flathub
  • Người dùng elementary OS có thể tải qua AppCenter

Phụ thuộc và build

  • Phụ thuộc runtime cần thiết khi chạy:
    • scrot
    • tesseract-ocr
    • Dữ liệu ngôn ngữ Tesseract
      • Cung cấp liên kết tới kho Arch và kho Debian
  • Phụ thuộc build-time cần thiết khi build:
    • granite
    • gtk+-3.0
    • gobject-2.0
    • gdk-pixbuf-2.0
    • libhandy-1
    • libportal-0.5
  • Quy trình tự build và chạy là clone repository, tạo thư mục build Meson, cài đặt bằng Ninja, rồi chạy com.github.rajsolai.textsnatcher

Trạng thái phát triển và nguồn cảm hứng

  • Dự án có kèm badge cho biết được tạo bằng Vala
  • README ghi rằng hiện tác giả đang gây quỹ để mua PC Linux, và dự án sẽ sớm quay lại vào tháng tới với các bản cập nhật và sửa lỗi
  • Các nguồn cảm hứng được nêu gồm README của Planner, cấu trúc ứng dụng của Develop và ứng dụng macOS TextSniper

1 bình luận

 
GN⁺ 2024-03-17
Ý kiến trên Hacker News
  • Tôi đang dùng một script giống của Dibby053, lấy từ Stack Overflow rồi chỉnh sửa đôi chút để chạy trên KDE/GNOME, Wayland/X11 và hiển thị trạng thái hiện tại qua thông báo
    Tôi vẫn chưa tự kiểm thử phần nhận diện X11/Wayland, nhưng cứ dùng thử rồi báo lại kết quả cũng được

    • Tôi đã sửa script một chút để dọn dẹp hoạt động đúng cách, và chạy spectaclechế độ nền để cửa sổ không bật ra sau khi chụp màn hình
    • Phần xử lý lỗi khá ổn, nhưng có thể bỏ file tạm và chuyển qua bằng pipe
      Cách làm là nối grim, slurp, mogrify, tesseract, wl-copy, rồi dùng fuzzel để chọn ngôn ngữ OCR
    • Tôi cũng từng dùng đúng kiểu script đó, rồi phát hiện ra cách này trên HN
      Chọn ngôn ngữ bằng dmenu và xử lý kiểu maim -us | tesseract --dpi 145 -l eng+${lang} - - | xsel -bi
      https://news.ycombinator.com/item?id=33704483#33705272
    • ShellCheck đôi khi cũng báo sai với trap "cleanup '$SCR_IMG'" EXIT, nhưng trong trường hợp này thì nhận xét đó không hẳn là sai
      Lệnh truyền vào trap thường sẽ được đánh giá nên biến sẽ được mở rộng, và trap 'cleanup "$SCR_IMG"' EXIT sẽ an toàn hơn
      Với Bash mới hơn thì trap "cleanup ${SCR_IMG@Q}" EXIT cũng là một lựa chọn
    • Tôi đang gán phím tắt với bash -c 'flameshot gui -s -r | tesseract - - | gxmessage -title "Decoded Data" -fn "Consolas 12" -wrap -geometry 640x480 -file -'
      Nhấn Super+O rồi kéo vùng cần OCR, văn bản được chụp sẽ hiện ngay trong một hộp thoại bật lên
  • Trước đây tôi có một script chép từ đâu đó, làm việc này khá tốt
    Nó chụp một vùng bằng scrot, tiền xử lý bằng mogrify để chuyển sang đen trắng và phóng to, rồi trích xuất văn bản bằng tesseract, đưa vào clipboard bằng xsel và còn hiện thông báo nữa

    • Nói thêm để chia sẻ, tôi thích maim hơn scrot
      Nhờ tùy chọn --nodrag, khi chọn vùng bằng trackpad, bạn chỉ cần bấm một lần, di chuyển con trỏ rồi bấm lần nữa nên tiện hơn
      Trong maim -s --nodrag --quality=10 $IMG.png, 10 tương đương 100 của scrot
    • Tôi đã dùng kiểu này một thời gian, nhưng Tesseract khá thường xuyên cho kết quả dưới kỳ vọng
      Tiền xử lý bằng phóng to cũng không tạo khác biệt lớn, và tôi cũng không rõ kiểu tiền xử lý nào sẽ tốt hơn
      Tôi tò mò không biết TextSnatcher có cải thiện gì hơn không, vì trang GitHub khá mơ hồ
    • Tôi cũng từng có một script tương tự bằng PowerShell, nhưng nó đã biến mất cùng với đống script lặt vặt từ chỗ làm cũ
      Xin lỗi những đồng nghiệp sống giữa Unix và Windows
    • Với trap "rm $IMG*" EXIT thì nên xem https://www.shellcheck.net/wiki/SC2064
      Dùng mktemp -d rồi xóa đệ quy cả thư mục sẽ tốt hơn
    • Với tôi thì cách này là chuẩn nhất
      Gán script vào phím tắt tốt hơn nhiều so với phải bấm vào một cửa sổ có nút bấm
  • Nói cho những đồng nghiệp thường dân đang dùng Windows, tính năng này cũng có trong tiện ích bổ sung chính thức Microsoft PowerToys
    Nó cũng đã có trong công cụ chụp màn hình mặc định, nhưng cá nhân tôi thấy phím tắt duy nhất của PowerToys tiện dùng hơn
    https://github.com/microsoft/PowerToys

    • OCR của công cụ chụp tích hợp hoạt động với nhiều ngôn ngữ như tiếng Anh, tiếng Nga, tiếng Trung, tiếng Nhật... mà không cần cài riêng gói OCR ngôn ngữ
    • Công cụ chụp mặc định cũng cung cấp tính năng này
      Chỉ cần nhấn WIN+SHIFT+S; nếu không thấy biểu tượng “Text actions” thì hãy cập nhật lên bản mới nhất từ Windows Store
  • Tôi đã thắc mắc chuyện này từ rất lâu: không rõ Tesseract có thật sự là giải pháp hiện đại tốt nhất trong lĩnh vực này hay không
    Cảm giác của tôi là nó còn khá thiếu sót, và nếu nhìn vào tiến bộ thị giác máy tính thì từ khoảng năm 2019, nhận dạng văn bản đáng ra phải gần như là bài toán đã được giải quyết
    Có vẻ nó phải làm tốt hơn con người, nhưng lại không thể chuyển chính xác ngay cả bản scan hóa đơn độ phân giải thấp, đặc biệt là nếu không phải tiếng Anh
    Có thể là do tôi dùng chưa đúng cách

    • Tôi dùng Tesseract khá đều đặn, và hiếm khi gặp vấn đề nhận dạng, kể cả với bản scan hóa đơn hay ảnh chụp
      Tôi muốn biết cụ thể bạn đang dùng nó theo cách nào
  • Tôi thấy Tesseract ngày càng được nhắc đến nhiều hơn
    Khi tôi dùng nó với các bài báo khoa học scan từ 10~15 năm trước thì kết quả rất đáng thất vọng, và công sức hậu xử lý thủ công gần như không ít hơn tự gõ lại là bao
    Vì thế, với tôi Tesseract từng đồng nghĩa với “không đáng để thử”, nhưng có lẽ theo thời gian nó đã tốt hơn nên cũng đáng dùng lại

    • Giờ đây nếu chỉ OCR tài liệu scan hoặc có thể kiểm soát tốt khâu chuẩn bị ảnh thì nó khá ổn
      Còn với nhận dạng tổng quát, bao gồm cả font lạ và chất lượng ảnh kém, thì EasyOCR cho kết quả tốt hơn nhiều
    • Dự án này đang đi kèm Tesseract 4.1.1, tức là ít nhất cũng đã vài năm tuổi
    • Hãy thử https://github.com/ocrmypdf/OCRmyPDF
      Bên trong nó dùng Tesseract và thực sự rất xuất sắc
    • Bây giờ nó đã tốt hơn rất nhiều
      Cách đây 15 năm, muốn có kết quả đỡ tệ thì còn phải tiền xử lý khá nhiều, nhưng giờ tôi đã có thể có kết quả tốt mà không cần tiền xử lý
    • Lần đầu tôi dùng nó cách đây 3~4 năm và thấy cũng ổn
  • Tôi đã dùng thử trực tiếp và nó hoạt động khá ổn.
    Vì là ứng dụng Flatpak nên để hoạt động đầy đủ sẽ cần desktop portal, nhưng với cấu hình xdg-desktop-portal-wlr hiện có thì nó chạy tốt mà không cần thiết lập thêm.
    Có vẻ nó sẽ hoạt động ổn trong môi trường X11 hoặc Wayland có cấu hình xdg-desktop-portal hỗ trợ Screenshot API.
    Kết quả hơi lúc được lúc không nhưng không tệ; với văn bản hiển thị rõ ràng thì chỉ gặp vấn đề về khoảng trắng hoặc đôi khi lỗi lặt vặt, nên có thể hữu ích khi cần sao chép văn bản từ những thứ như hộp thoại lỗi.
    Tuy vậy trên Linux thì ngay từ đầu văn bản trong hộp thoại lỗi thường đã có thể chọn được, còn MessageBox tiêu chuẩn của Windows thì phản hồi với Ctrl+C.

  • Tôi đang dùng Frog như một ứng dụng tương tự và đã dùng rất thành công.
    https://getfrog.app

    • Không có AppImage, không có .deb, cũng không có brew.
  • Trên macOS có một tiện ích làm được nhiều hơn việc chỉ mở tài liệu trong Preview rồi thử chọn văn bản.
    https://github.com/schappim/macOCR
    Tôi thích tác giả này.

    • Nhân tiện, không cần qua Preview; bạn có thể chụp màn hình bằng Cmd-Shift-3, rồi bấm vào hình thu nhỏ để tương tác với văn bản trong Quick Look.
      Sau đó chỉ cần xóa ảnh bằng biểu tượng thùng rác ở góc trên bên phải, và Cmd-A cũng hoạt động.
      Ví dụ tôi thử trong bình luận này ở đây: https://imgur.com/a/q0NvcS6
  • Trên iOS, tôi dùng một cách tương tự bằng Shortcut gán vào nút Action.
    Có những app mà việc sao chép văn bản không dễ, hoặc văn bản là tiếng nước ngoài; khi đó tôi chụp màn hình, trích xuất văn bản, tự động phát hiện ngôn ngữ gốc rồi dịch sang tiếng Anh, sau đó hiển thị cả nguyên văn lẫn bản dịch trong Quick View để có thể chọn và sao chép.
    Bạn có thể thử ví dụ triển khai ở đây: https://www.icloud.com/shortcuts/f420d24e4960415da1a43f230abfce39
    Ngoài ra, trên iOS mới hơn, bạn cũng có thể mở ảnh trong ứng dụng Ảnh rồi dùng tay chọn và sao chép văn bản ngay trong ảnh.

    • Shortcut rất tuyệt.
      Tôi đã thử bằng cách nhấn nút chia sẻ trên ảnh rồi dùng nó từ share sheet, và nó hoạt động, nhưng nếu đã ở bước truyền sẵn ảnh vào rồi thì công đoạn chụp màn hình là thừa.
  • Dù được gọi là “dành cho Linux Desktop”, đây vẫn là Flatpak, và không phải mọi bản phân phối Linux đều cài sẵn Flatpak theo mặc định.
    Tôi định thử chạy nó trong máy ảo Fedora; tôi đã thấy nhiều công cụ kiểu này rồi, và đa số đều dùng Tesseract.
    Với ảnh thô hoặc nhiều nhiễu, hoặc khi chữ bị cong hay nghiêng, chúng thất bại khá nặng và không thể giải CAPTCHA.
    https://tesseract-ocr.github.io/tessdoc/Home.html

    • Có bản phân phối nào mà Flatpak không chạy được à?
    • Đây chỉ đơn thuần là một mớ mã Vala thôi.
      Nói chính xác hơn thì vấn đề là tác giả chưa tạo gói cho bản phân phối của bạn, và cũng chưa có ai khác bỏ thời gian lẫn động lực để đóng gói nó.
      Người bảo trì mà bạn đang tìm có khi chính là bạn.
    • Điều đó thật ra không hẳn là nhược điểm.
      Nếu chỉ có .deb thì bạn hoàn toàn có thể nói rằng nó không chạy được ở nơi không phải Ubuntu/Debian, và đó còn là nhược điểm lớn hơn nhiều.