- ใช้แอป Shortcuts บน macOS เพื่อสร้างชอร์ตคัต OCR แบบโลคัลได้โดยไม่ต้องใช้บริการแบบเสียเงินเพิ่มเติม และสามารถสั่งดึงข้อความจากภาพผ่านเทอร์มินัล/CLI/Python ได้
- องค์ประกอบหลักคือเชื่อม Shortcut Input เข้ากับแอ็กชัน Extract Text from Image แล้วคัดลอกผลลัพธ์ไปยังคลิปบอร์ด
- ชื่อชอร์ตคัตควรเป็นตัวพิมพ์เล็กไม่มีเว้นวรรค เช่น
ocr-text หรือ extract-text เพื่อให้เรียกจาก CLI ได้ง่าย และต้องกด Enter หลังป้อนชื่อเพื่อบันทึก
- ในเทอร์มินัล ให้รันด้วย
shortcuts run ocr-text -i และผลลัพธ์ที่ดึงได้จะถูกคัดลอกไปยังคลิปบอร์ด สามารถตรวจสอบได้ด้วย Command-V
- ใน Python สามารถเรียกคำสั่ง
shortcuts run เดียวกันผ่าน subprocess.check_output() เพื่อใช้ชอร์ตคัต OCR เดิมซ้ำได้
สร้างชอร์ตคัต OCR ใน Shortcuts
- เปิดแอป Shortcuts บน macOS แล้วกดปุ่ม
+ เพื่อสร้างชอร์ตคัตใหม่
- ค้นหา
extract text ในแถบด้านขวา จากนั้นลากแอ็กชัน Extract Text from Image ไปยังพื้นที่ทำงานด้านซ้าย
- คลิกอินพุต Image สีน้ำเงินของแอ็กชัน
Extract text from ... แล้วเลือก Shortcut Input
- แอ็กชัน Receive จะปรากฏขึ้นด้านบน ซึ่งปล่อยไว้แบบนั้นได้
- ค้นหา
copy ในแถบด้านขวา แล้ววางแอ็กชัน Copy to Clipboard ไว้ใต้ Extract Text from Image
- ต้องตรวจสอบว่าในแอ็กชันสุดท้าย ส่วนหลัง
Copy เป็น Text from Image
- ระหว่างลากแอ็กชัน
Copy to Clipboard ลงด้านล่าง อาจรู้สึกใช้งานค่อนข้างลำบากเล็กน้อย
- ชื่อชอร์ตคัตควรเรียบง่าย เป็นตัวพิมพ์เล็ก และไม่มีช่องว่าง เช่น
extract-text หรือ ocr-text
- หลังป้อนชื่อต้องกด Enter เพื่อบันทึกชื่อ
รันจาก CLI และ Python
- คำสั่งสำหรับรันชอร์ตคัตจากเทอร์มินัลมีดังนี้
shortcuts run ocr-text -i
- ถ้าหลังรันแล้วกดวางด้วย Command-V และเห็นข้อความที่ถูกดึงออกมา แปลว่าตั้งค่าได้ถูกต้อง
- ใน Python สามารถรันคำสั่งเดียวกันได้ด้วย
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)
- การแชร์ใน Shortcuts อาจทำงานแปลก ๆ ได้ จึงอาจต้องตั้งค่าด้วยตนเอง แต่ขั้นตอนส่วนใหญ่ทำเพียงครั้งเดียวก็พอ
1 ความคิดเห็น
ความคิดเห็นจาก Hacker News
โพสต์ของ OP ดีมาก เฟรมเวิร์ก Vision ของ Apple ค่อนข้างน่าประทับใจ และผมเคยลองใช้กับโปรเจกต์ส่วนตัวที่อ่านภาพหน้าจอสเปรดชีตหลายหมื่นภาพด้วย OCR แล้วนำเข้าไปใส่ในฐานข้อมูล PostgreSQL
เนื่องจาก macOS กับ Nvidia ยังเข้ากันได้ไม่ค่อยดี ผมจึงลอง OCR แบบใช้ CPU อย่าง Tesseract ด้วย แต่ผลลัพธ์ผิดบ่อยเกินไป เฟรมเวิร์ก Vision ให้คุณภาพเอาต์พุตดีที่สุดเท่าที่ผมเคยเห็น และใช้ทรัพยากรคำนวณน้อยที่สุดด้วย
มันค่อนข้างไม่เสถียรอยู่บ้าง แต่ก็อาจเป็นความผิดพลาดในการ implement ของผมเองก็ได้ ในการใช้งานจริงผมใช้ vision.py ของ RHetTbull https://gist.github.com/RhetTbull/1c34fc07c95733642cffcd1ac5... และใช้ ocrmac https://github.com/straussmaximilian/ocrmac ร่วมด้วยสำหรับการทดลอง ซึ่งแม้บน Hackintosh i7 6700k ประสิทธิภาพก็ออกมาดีเกินคาด
ผมไม่ได้เรียกตัวเองว่าเป็นโปรแกรมเมอร์ แต่ถ้ามีเวลาพอ โดยทั่วไปก็แก้ปัญหาได้ เพียงแต่ใช้เวลาค่อนข้างมาก
แค่ดูเฟรมเวิร์ก RAG ก็จะเห็นว่าหลายตัวใช้หรือรองรับ implementation หลายแบบ และ Tesseract แทบจะได้รับการรองรับเสมอ แต่โดยปกติไม่ใช่ตัวเลือกในอุดมคติ โปรเจกต์อย่าง Unstructured https://github.com/Unstructured-IO/unstructured-inference หรือ DocTR https://github.com/mindee/doctr มักเป็นที่นิยมมากกว่า
โดยทั่วไปสิ่งเหล่านี้ใช้โมเดล vision ระดับสมัยใหม่ https://github.com/mindee/doctr#models-architectures https://github.com/Unstructured-IO/unstructured-inference#mo... จึงเหนือกว่า Tesseract อย่างชัดเจน
ผมยังไม่ได้เทียบโดยตรงกับเฟรมเวิร์ก Apple Vision แต่แน่นอนว่าดีกว่า Tesseract และมีโอกาสที่จะดีกว่า Apple Vision ด้วยซ้ำ มีแนวทางที่ผสมหลายวิธีเข้าด้วยกันด้วย แต่จะซับซ้อนขึ้นพอสมควร
AWS Textract มีโค้ดตัวอย่าง Python สำหรับดึงตารางออกมาเป็น CSV และตัวนั้นทำงานได้ดี
ตอนลองทำอะไรคล้าย ๆ กันบน Windows ผมพบว่าโปรเจกต์ของ Microsoft ที่ติดตั้งไว้อยู่แล้วอย่าง PowerToys มีเครื่องมือ OCR ที่ค่อนข้างดีรวมอยู่ด้วย
กด Win+Shift+T แล้วเลือกพื้นที่ที่จะสแกน ข้อความก็จะถูกคัดลอกไปยังคลิปบอร์ด
https://learn.microsoft.com/en-us/windows/powertoys/
https://learn.microsoft.com/en-us/windows/powertoys/text-ext...
ผมสร้าง เครื่องมือโอเพนซอร์ส ที่มีทั้ง CLI และ UI ที่ใช้ได้ดี และใช้งานฟรี
https://trex.ameba.co
เพิ่งรู้ว่าแอป Mac หลายตัว รวมถึง Safari, Preview, Notes จะ ทำ OCR ให้โดยอัตโนมัติ กับรูปภาพ สามารถเลือกข้อความในรูปแล้วคัดลอกไปวางที่อื่นได้ง่าย ๆ ซึ่งดีทีเดียว
ถ้าเป็น URL หรือข้อความโดเมน หรือ QR code แม้อยู่ในรูปโปสเตอร์หรือในวิดีโอ ก็สามารถกดค้างหรือคลิกค้างเพื่อเปิดลิงก์จากรูปภาพได้โดยตรง
เลือกและคัดลอกจากรูป แล้วนำไปวางบนโทรศัพท์หรือ Mac ได้ผ่านฟีเจอร์ Handoff
ผมชอบเครื่องมือ OCR เล็ก ๆ ตัวหนึ่งที่ติดตั้งผ่าน brew แล้วใช้บน MacBook มาก: https://github.com/schappim/macOCR
บน Windows ขอแนะนำ Text Extractor ของ PowerToys
https://learn.microsoft.com/en-us/windows/powertoys/text-ext...
ถ้าจะเพิ่มวิธีแก้ของผมอีกอย่าง ก็อันนี้: https://skaplanofficial.github.io/PyXA/tutorial/images.html#...
PyXA ใช้ Vision framework เพื่อดึงข้อความจากรูปภาพหนึ่งรูปหรือหลายรูป เป็นเพียงส่วนเล็ก ๆ ของแพ็กเกจ ดังนั้นอาจจะเกินจำเป็นสำหรับงานครั้งเดียว แต่ก็เป็นอีกทางเลือกหนึ่ง
ImageAnalyzer ใหม่กว่าและดีกว่ามาก shortcut ของ OP ก็ดูมีโอกาสสูงที่จะใช้ API เก่าอยู่ภายในเช่นกัน
ตั้งแต่ macOS Ventura เป็นต้นมา ใน UI ของ Image Capture มีการรวม ฟีเจอร์ OCR พื้นฐานไว้จริง ๆ
เมื่อสแกน PDF ด้วยสแกนเนอร์ที่รองรับ AirPrint จะมีเช็กบ็อกซ์ “OCR” ปรากฏในแผงด้านขวา
ถ้าต้องการใส่เนื้อหาลงไฟล์ สามารถทำแบบนี้ได้ ไม่ได้จะบอกว่าเป็นวิธีที่มีประสิทธิภาพที่สุด แต่ใช้งานได้
OCRTHISFILE="ocr-test.jpg"
shortcuts run ocr-text -i "${OCRTHISFILE}"
pbpaste > ${OCRTHISFILE}.txt
หรือถ้าต้องการดูผลลัพธ์ไปด้วยและใส่ลงไฟล์ด้วย:
OCRTHISFILE="ocr-test.jpg"
shortcuts run ocr-text -i "${OCRTHISFILE}"
pbpaste | tee ${OCRTHISFILE}.txt
สงสัยว่าในฟีเจอร์ Copy Subject ของ Apple Vision มีเทคนิคคล้าย ๆ กันหรือไม่ เริ่มพึ่งพาฟีเจอร์นี้ค่อนข้างมากแล้ว แต่รู้สึกว่าวิธีเข้าถึงถูกจำกัดเกินไป
น่าจะลองเปลี่ยนแอ็กชัน “Extract text” เป็น “Remove background” ได้ ตอนรัน shortcut ให้ระบุชื่อไฟล์รูปภาพเอาต์พุตด้วย “-o”
shortcuts run remove-background -i ~/Downloads/portrait-beard.avif -o beard.jpg