3 คะแนน โดย GN⁺ 2024-03-17 | 1 ความคิดเห็น | แชร์ทาง WhatsApp
  • TextSnatcher เป็น แอป OCR สำหรับ Linux ที่ช่วยคัดลอกข้อความในรูปภาพได้อย่างรวดเร็ว โดยลากภาพเพื่อทำการรู้จำอักขระแล้วนำผลลัพธ์ไปวางต่อได้
  • ฟีเจอร์หลักคือ รองรับหลายภาษา, คัดลอกข้อความจากรูปภาพ, ลากบนรูปภาพใดก็ได้แล้ววาง, และใช้งานได้รวดเร็วและง่ายดาย
  • ใช้ Tesseract OCR 4.x สำหรับการรู้จำอักขระ พร้อมให้ลิงก์ไปยังเอกสาร Tesseract และโครงการ Tesseract
  • แจกจ่ายผ่าน Flathub และ AppCenter ของ elementary OS และหากต้องการคอมไพล์เองจะใช้ขั้นตอนติดตั้งที่อิงกับ Meson และ Ninja
  • การรันต้องใช้ scrot, tesseract-ocr และข้อมูลภาษา Tesseract โดยโครงการระบุว่าจะกลับมาพร้อมอัปเดตและการแก้ไขในเดือนหน้า

สิ่งที่ TextSnatcher ทำ

  • TextSnatcher เป็นแอปสำหรับ Linux ที่คัดลอกข้อความจากรูปภาพและทำงาน OCR ได้ภายในไม่กี่วินาที
  • ผู้ใช้สามารถ ลาก บนรูปภาพเพื่อคัดลอกและวางข้อความได้
  • ความสามารถที่มี:
    • รองรับหลายภาษา

      • คัดลอกข้อความจากรูปภาพด้วยการลาก
      • ลากบนรูปภาพใดก็ได้แล้ววาง
      • ใช้งานได้รวดเร็วและง่ายดาย

เอนจิน OCR และโครงการที่เกี่ยวข้อง

  • TextSnatcher ใช้ Tesseract OCR 4.x สำหรับการรู้จำอักขระ
  • เอกสารอ้างอิงที่เกี่ยวข้องมี เอกสาร Tesseract และ Tesseract-Project

การติดตั้งและช่องทางแจกจ่าย

  • ดาวน์โหลดแอปได้จาก Flathub
  • ผู้ใช้ elementary OS สามารถดาวน์โหลดผ่าน AppCenter

การพึ่งพาและการคอมไพล์

  • รันไทม์ดีเพนเดนซี ที่จำเป็น:
    • scrot
    • tesseract-ocr
    • ข้อมูลภาษา Tesseract
      • มีลิงก์ไปยังคลังแพ็กเกจของ Arch และ Debian
  • บิลด์ไทม์ดีเพนเดนซี ที่จำเป็น:
    • granite
    • gtk+-3.0
    • gobject-2.0
    • gdk-pixbuf-2.0
    • libhandy-1
    • libportal-0.5
  • หากต้องการคอมไพล์และรันเอง ให้โคลนรีโพซิทอรี สร้างไดเรกทอรีบิลด์ด้วย Meson ติดตั้งด้วย Ninja แล้วรัน com.github.rajsolai.textsnatcher

สถานะการพัฒนาและที่มา

  • โครงการมีป้ายระบุว่าสร้างด้วย Vala
  • ใน README ระบุว่าขณะนี้กำลังระดมทุนเพื่อซื้อ Linux PC และโครงการจะกลับมาพร้อมอัปเดตและการแก้ไขในเดือนหน้า
  • รายการที่ใช้เป็นแรงบันดาลใจคือ README ของ Planner, โครงสร้างแอปพลิเคชันของ Develop และแอป macOS ชื่อ TextSniper

1 ความคิดเห็น

 
GN⁺ 2024-03-17
ความคิดเห็นจาก Hacker News
  • ใช้สคริปต์แบบเดียวกับ Dibby053 โดยนำมาจาก Stack Overflow แล้วแก้นิดหน่อยให้ทำงานได้บน KDE/GNOME, Wayland/X11 และให้แสดงสถานะปัจจุบันเป็นการแจ้งเตือน
    การแยกแยะ X11/Wayland ยังไม่ได้ทดสอบเอง แต่ถ้าลองใช้แล้วแจ้งผลกลับมาก็ยินดี

    • ปรับสคริปต์เล็กน้อยให้ การเก็บกวาด ทำงานถูกต้อง และให้รัน spectacle ใน โหมดเบื้องหลัง เพื่อไม่ให้หน้าต่างเด้งขึ้นมาหลังถ่ายสกรีนช็อต
    • การจัดการข้อผิดพลาดดี แต่ข้ามไฟล์ชั่วคราวแล้วส่งต่อด้วย pipe ก็ได้
      เป็นวิธีต่อ grim, slurp, mogrify, tesseract, wl-copy เข้าด้วยกัน และใช้ fuzzel เลือกภาษา OCR
    • ผมก็ใช้สคริปต์เดียวกันอยู่ แล้วมาเจอวิธีนี้ใน HN
      เลือกภาษาด้วย dmenu แล้วประมวลผลประมาณ maim -us | tesseract --dpi 145 -l eng+${lang} - - | xsel -bi
      https://news.ycombinator.com/item?id=33704483#33705272
    • บางครั้ง ShellCheck อาจเตือนผิดที่ trap "cleanup '$SCR_IMG'" EXIT แต่ในกรณีนี้ก็ไม่ใช่คำเตือนที่ผิดไปเสียทีเดียว
      คำสั่งที่ส่งให้ trap โดยทั่วไปจะถูกประเมินผล จึงเกิดการขยายตัวแปร และ trap 'cleanup "$SCR_IMG"' EXIT จะทำงานได้ปลอดภัยกว่า
      ถ้าเป็น Bash รุ่นใหม่ trap "cleanup ${SCR_IMG@Q}" EXIT ก็เป็นอีกทางเลือกหนึ่ง
    • ผูกคีย์ลัดไว้กับ bash -c 'flameshot gui -s -r | tesseract - - | gxmessage -title "Decoded Data" -fn "Consolas 12" -wrap -geometry 640x480 -file -'
      กด Super+O แล้วลากเลือกพื้นที่ที่จะทำ OCR ข้อความที่จับได้จะเด้งขึ้นมาเป็นกล่องโต้ตอบทันที
  • สคริปต์ที่เคยคัดลอกมาจากที่ไหนสักแห่งเมื่อนานมาแล้วทำงานนี้ได้ค่อนข้างดี
    วิธีคือจับภาพพื้นที่ด้วย scrot แล้วใช้ mogrify ทำพรีโปรเซสเป็นขาวดำและขยายภาพ จากนั้นดึงข้อความด้วย tesseract ใส่คลิปบอร์ดด้วย xsel และแสดงการแจ้งเตือนด้วย

    • ขอเสริมเพื่อแบ่งปันว่า ผมชอบ maim มากกว่า scrot
      เพราะตัวเลือก --nodrag ทำให้เวลาเลือกพื้นที่ด้วยแทร็กแพด แค่คลิกหนึ่งครั้ง ย้ายเคอร์เซอร์ แล้วคลิกอีกครั้งก็พอ สะดวกกว่า
      ใน maim -s --nodrag --quality=10 $IMG.png ค่า 10 เทียบเท่ากับ 100 ของ scrot
    • ผมใช้แบบนี้อยู่พักหนึ่ง แต่ Tesseract มักทำได้ต่ำกว่าที่คาดค่อนข้างบ่อย
      การพรีโปรเซสด้วยการขยายภาพก็ไม่ได้รู้สึกว่าต่างมาก และไม่แน่ใจว่าพรีโปรเซสแบบไหนจะทำให้ดีขึ้น
      เลยสงสัยว่า TextSnatcher ปรับปรุงอะไรจากนี้หรือเปล่า แต่หน้า GitHub ก็ไม่ค่อยชัดเจน
    • เคยมีสคริปต์คล้ายกันใน PowerShell ด้วย แต่ก็หายไปกับกาลเวลาพร้อมกับสคริปต์เล็ก ๆ น้อย ๆ จากที่ทำงานเก่า
      ขอโทษเพื่อนร่วมงานที่ใช้ชีวิตอยู่ระหว่าง Unix กับ Windows ด้วย
    • trap "rm $IMG*" EXIT ควรดู https://www.shellcheck.net/wiki/SC2064
      ใช้ mktemp -d แล้วลบไดเรกทอรีแบบ recursive น่าจะดีกว่า
    • สำหรับผม วิธีนี้พอดีที่สุด
      ผูกสคริปต์กับคีย์ลัด ดีกว่าต้องกดหน้าต่างที่มีปุ่มมาก
  • สำหรับเพื่อนร่วมงานสามัญชนที่ใช้ Windows ฟีเจอร์เสริมอย่างเป็นทางการของ Microsoft PowerToys ก็มีความสามารถนี้
    เครื่องมือสกรีนช็อตพื้นฐานก็มีแล้วเช่นกัน แต่โดยส่วนตัวคีย์ลัดเดียวของ PowerToys ใช้ง่ายกว่า
    https://github.com/microsoft/PowerToys

    • OCR ใน Snipping Tool ที่มีมาในระบบทำงานได้กับหลายภาษา เช่น อังกฤษ รัสเซีย จีน ญี่ปุ่น ฯลฯ โดยไม่ต้องติดตั้งแพ็ก OCR ภาษาแยกต่างหาก
    • Snipping Tool พื้นฐานก็มีฟีเจอร์นี้
      กด WIN+SHIFT+S ได้เลย และถ้าไม่มีไอคอน “Text actions” ให้อัปเดตเป็นเวอร์ชันล่าสุดจาก Windows Store
  • สงสัยมานานแล้วว่า Tesseract เป็นโซลูชันระดับล้ำหน้าที่สุดของสายนี้จริงหรือไม่
    จากที่รู้สึก มันดูยังขาดอยู่มาก และราวปี 2019 ผมรู้สึกว่าถ้าคิดถึงความก้าวหน้าของ computer vision แล้ว การรู้จำข้อความน่าจะเป็นปัญหาที่แทบจะถูกแก้ได้แล้ว
    มันควรจะทำได้ดีกว่ามนุษย์ด้วยซ้ำ แต่แม้แต่สแกนใบเสร็จความละเอียดต่ำก็ยังแปลงได้ไม่แม่น โดยเฉพาะถ้าไม่ใช่ภาษาอังกฤษ
    อาจเป็นเพราะผมใช้ไม่ถูกวิธีก็ได้

    • ผมใช้ Tesseract เป็นระยะ ๆ และแทบไม่เจอปัญหาการรู้จำแม้กับสแกนใบเสร็จหรือรูปถ่าย
      เลยอยากรู้ว่าใช้งานด้วยวิธีไหนกันแน่
  • เห็น Tesseract ถูกพูดถึงบ่อยขึ้นเรื่อย ๆ
    ตอนลองใช้กับบทความวิทยาศาสตร์ที่สแกนไว้เมื่อ 10–15 ปีก่อน ผลลัพธ์น่าผิดหวัง และการแก้หลังจากนั้นด้วยมือก็ไม่ได้ลดงานไปมากเมื่อเทียบกับพิมพ์เอง
    ดังนั้นสำหรับผม Tesseract จึงกลายเป็นคำพ้องความหมายของ “ไม่คุ้มที่จะลอง” แต่เวลาผ่านไปมันอาจดีขึ้นแล้ว ก็น่าลองใช้อีกครั้ง

    • ตอนนี้ถ้าใช้ OCR เฉพาะเอกสารสแกน หรือควบคุมขั้นตอนเตรียมภาพได้มาก ก็ถือว่าใช้ได้
      สำหรับการรู้จำทั่วไปที่รวมถึงฟอนต์แปลก ๆ หรือคุณภาพภาพแย่ ๆ EasyOCR ให้ผลลัพธ์ดีกว่ามาก
    • โปรเจกต์นี้รวม Tesseract 4.1.1 ซึ่งมีอายุอย่างน้อยหลายปีแล้ว
    • น่าลองใช้ https://github.com/ocrmypdf/OCRmyPDF
      ภายในใช้ Tesseract และทำได้ยอดเยี่ยมจริง ๆ
    • ตอนนี้ดีขึ้นมากแล้ว
      เมื่อ 15 ปีก่อน ถ้าจะได้ผลลัพธ์ที่แย่น้อยลงก็ต้องพรีโปรเซสพอสมควร แต่ตอนนี้ได้ผลลัพธ์ดีแม้ไม่พรีโปรเซส
    • ตอนลองใช้ครั้งแรกเมื่อ 3–4 ปีก่อน ก็ถือว่าโอเค
  • ลองใช้เองแล้ว ทำงานได้ค่อนข้างดี
    เนื่องจากเป็น แอป Flatpak จึงต้องใช้เดสก์ท็อปพอร์ทัลเพื่อให้ทำงานได้ครบถ้วน แต่กับการตั้งค่า xdg-desktop-portal-wlr เดิมก็ใช้ได้ดีโดยไม่ต้องตั้งค่าเพิ่มเติม
    ถ้าเป็นสภาพแวดล้อม X11 หรือ Wayland ที่มีการตั้งค่า xdg-desktop-portal ซึ่งรองรับ Screenshot API ก็น่าจะทำงานได้ไม่ยาก
    ผลลัพธ์ไม่สม่ำเสมอแต่ก็ไม่แย่ และข้อความที่อ่านได้ชัดเจนมักมีแค่ปัญหาเรื่องช่องว่างหรือข้อผิดพลาดเป็นครั้งคราว จึงอาจมีประโยชน์เวลาต้องคัดลอกข้อความจากกล่องโต้ตอบข้อผิดพลาด
    อย่างไรก็ตาม บน Linux ข้อความในกล่องโต้ตอบข้อผิดพลาดมักเลือกได้อยู่แล้วในหลายกรณี และ MessageBox มาตรฐานของ Windows ก็รองรับ Ctrl+C

  • ใช้ Frog ซึ่งเป็นแอปคล้ายกันอยู่ และใช้งานได้สำเร็จดีมาก
    https://getfrog.app

    • ไม่มี AppImage, ไม่มี .deb และไม่มี brew
  • บน macOS มียูทิลิตีที่ทำได้มากกว่าการเปิดเอกสารใน Preview แล้วลองเลือกข้อความ
    https://github.com/schappim/macOCR
    ชอบผู้เขียนคนนี้

    • สำหรับข้อมูลเพิ่มเติม ไม่จำเป็นต้องผ่าน Preview ก็ได้ โดยกด Cmd-Shift-3 เพื่อจับภาพหน้าจอ แล้วคลิกภาพย่อเพื่อโต้ตอบกับข้อความใน Quick Look ได้
      จากนั้นลบภาพได้ด้วยไอคอนถังขยะมุมขวาบน และ Cmd-A ก็ใช้งานได้
      ตัวอย่างที่ลองใช้กับคอมเมนต์นี้อยู่ที่นี่: https://imgur.com/a/q0NvcS6
  • บน iOS ทำวิธีแก้คล้าย ๆ กันด้วย Shortcut ที่ผูกกับ Action Button
    บางแอปคัดลอกข้อความได้ไม่ง่าย หรือเป็นภาษาต่างประเทศ จึงถ่ายสกรีนช็อตแล้วดึงข้อความออกมา จากนั้นตรวจจับภาษาต้นฉบับอัตโนมัติและแปลเป็นอังกฤษ พร้อมแสดงทั้งต้นฉบับและคำแปลใน Quick View เพื่อให้เลือกและคัดลอกได้
    ลองทดสอบตัวอย่างการใช้งานได้ที่นี่: https://www.icloud.com/shortcuts/f420d24e4960415da1a43f230abfce39
    อนึ่ง ใน iOS รุ่นล่าสุด สามารถเปิดรูปในแอปรูปภาพ แล้วใช้นิ้วเลือกข้อความในรูปเพื่อคัดลอกได้ด้วย

    • เป็น Shortcut ที่ยอดเยี่ยม
      ลองใช้จากปุ่มแชร์บนรูปภาพ แล้วเลือกใน Share Sheet ก็ใช้งานได้ แต่ถ้าอยู่ในสถานการณ์ที่ส่งรูปภาพเข้าไปอยู่แล้ว ขั้นตอนถ่ายสกรีนช็อตก็ซ้ำซ้อน
  • แม้จะบอกว่า “สำหรับ Linux Desktop” แต่นี่คือ Flatpak และไม่ใช่ทุกดิสโทร Linux ที่ให้ Flatpak มาเป็นค่าเริ่มต้น
    ตั้งใจจะลองรันบน VM ของ Fedora สักครั้ง และเครื่องมือแบบนี้เห็นมามากแล้ว ส่วนใหญ่ใช้ Tesseract
    ถ้าเป็นภาพหยาบหรือมีนอยส์มาก ตัวอักษรบิดหรือเอียง ก็ล้มเหลวหนัก และแก้ CAPTCHA ให้ไม่ได้
    https://tesseract-ocr.github.io/tessdoc/Home.html

    • ดิสโทรไหนที่ Flatpak ใช้งานไม่ได้?
    • นี่ก็แค่กองโค้ด Vala เท่านั้น
      พูดให้ตรงคือ ผู้เขียนไม่ได้ทำแพ็กเกจสำหรับดิสโทรของคุณ และก็ยังไม่มีใครสละเวลาและแรงจูงใจมาทำแพ็กเกจให้
      ผู้ดูแลแพ็กเกจที่กำลังตามหาอาจเป็นคุณก็ได้
    • นั่นไม่ได้เป็นข้อเสียอะไรนัก
      ถ้ามีแค่ .deb ถึงจะพูดได้ว่าใช้นอก Ubuntu/Debian ไม่ได้ และนั่นเป็นข้อเสียที่ใหญ่กว่ามาก