- เป็นเครื่องมือบนเว็บที่ช่วยลดงานการคัดข้อความจากภาพเอกสารแล้วนำมาจัดระเบียบใหม่ ด้วยการ แปลงเป็น Markdown แบบมีโครงสร้าง
- ปัจจุบันการป้อนข้อมูลผ่านเว็บเน้น อัปโหลดรูปภาพ เป็นหลัก และมีการระบุว่าจะรองรับ PDF ในเร็ว ๆ นี้
- บริการนี้ทำงานบนพื้นฐานของแพ็กเกจ npm llama-ocr และ Together AI
- ใน JavaScript สามารถส่ง
filePath และ TOGETHER_API_KEY ให้ฟังก์ชัน ocr เพื่อรับผลลัพธ์เป็น Markdown ได้
- รองรับทั้งการอัปโหลดผ่านเว็บและการเรียกใช้ผ่านโค้ด จึงสามารถทดลองแปลงภาพเอกสารให้เข้ากับงานแบบแมนนวลหรือเวิร์กโฟลว์การพัฒนาได้
แปลงเอกสารภาพเป็น Markdown
- LlamaOCR.com เป็นเครื่องมือสำหรับแปลงเอกสารที่อัปโหลดให้เป็น Markdown
- หน้าเว็บระบุว่า “Upload an image to turn it into structured markdown” และสร้าง Markdown แบบมีโครงสร้าง จากการอัปโหลดรูปภาพ
- การรองรับ PDF แสดงเป็น “soon” จึงหมายความว่าขอบเขตการให้บริการในตอนนี้ยังเน้นที่รูปภาพเป็นหลัก
วิธีใช้งานในโค้ด
- หากใช้แพ็กเกจ npm llama-ocr ก็สามารถรัน OCR จากโค้ด JavaScript ได้
import { ocr } from 'llama-ocr';
const markdown = await ocr({
filePath: './trader-receipt.jpg',
apiKey: process.env.TOGETHER_API_KEY
});
- ตัวอย่างนี้ใส่พาธไฟล์รูปภาพไว้ใน
filePath และส่งตัวแปรสภาพแวดล้อม TOGETHER_API_KEY ให้กับ apiKey
- บริการนี้ทำงานบนพื้นฐานของ llama-ocr และ Together AI
1 ความคิดเห็น
ความคิดเห็นบน Hacker News
ผมเป็นคนทำ llama-ocr เอง ขอบคุณที่แชร์และกระแสตอบรับดี ๆ ผมต้องการ OCR API แบบง่าย ๆ เลยทำขึ้นเมื่อต้นสัปดาห์นี้ โดยใช้ Llama 3.2 Vision ที่โฮสต์บน Together.ai เพื่อพาร์สรูปภาพให้เป็น Markdown ที่มีโครงสร้าง
ตอนนี้มีให้ใช้เป็นแพ็กเกจ npm ด้วย มีแผนจะเพิ่มฟีเจอร์อย่างการพาร์ส PDF และการตอบกลับเป็น JSON ถ้ามีคำถามก็จะพยายามตอบครับ
เลยสงสัยว่าการแปลงขนาดใหญ่ระดับนี้เป็นพฤติกรรมที่คาดหวังหรือพึงประสงค์หรือไม่ เอาต์พุตบางครั้งเป็นรายการ bullet บางครั้งเป็นตาราง ทำให้การประมวลผลอัตโนมัติภายหลังยากขึ้นเล็กน้อย
อยากทราบว่าได้พิจารณา use case แบบนี้ไว้ด้วยหรือเปล่า
อยากรู้ว่าเมื่อเทียบกับระบบ OCR เดิม ๆ แล้ว มันทำพลาดแบบไหนบ้าง
นี่ก็แค่ส่งรูปไปให้ Llama 3.2 Vision แล้วบอกให้อ่านข้อความเท่านั้นเอง
เหมือนเอาต์พุตจาก LLM อื่น ๆ คือเสี่ยงต่อการหลอนข้อมูล ไม่ได้อ่านรูปทรงตัวอักษรจากพิกเซลโดยตรง แต่ตัดสินข้อความจากการอธิบายภาพโดยอาศัยรูปภาพและคำบรรยายที่เรียนรู้มา โดยเฉพาะถ้าอ่านยาก มันอาจแต่งคำขึ้นมาเองทั้งคำได้
ดูเจ๋งดี ช่วงนี้ผมทำ OCR เยอะ เลยดีใจที่มีเครื่องมือใหม่ในสายนี้เกิดขึ้น ผู้เล่นตัวท็อปปัจจุบันในด้าน PDF→Markdown น่าจะเป็น Nougat[1] ของ Facebook และอยากลองเชื่อมมันกับ DSPy เพื่อเทียบกันว่ากับหนังสือปรัชญาแล้วตัวไหนดีกว่า
โปรเจกต์ Zerox[2] ของสตาร์ทอัปที่ repo นี้ลิงก์ไว้ก็ดูดี อย่างน้อยการนำเสนอก็ลื่นไหลกว่า Nougat มาก ถ้ามีผู้เชี่ยวชาญตัวจริงผ่านมาแถวนี้ก็อยากฟังคำแก้ไขหรือคำแนะนำ
มีสองเรื่องที่สงสัย 1) Together.ai คืออะไร และโมเดลนี้เป็นโอเพนซอร์สหรือไม่ เว็บไซต์ดูเหมือนบริการโฮสติ้ง และหน้า “Custom Models”[3] ดูใกล้เคียงกับการ fine-tune แบบกำหนดเองมากกว่าการฝึกโมเดล proprietary ของตัวเอง เหมือนจะมีโปรไฟล์บน HuggingFace แต่ก็ไม่ชัดว่าเป็นของพวกเขาจริงหรือไม่ https://huggingface.co/TogetherAI
2) บน GitHub เขียนว่า “hosted demo” แต่ส่วนที่โฮสต์ดูเหมือนจะมีแค่ WebGUI เล็ก ๆ สะอาด ๆ เลยสงสัยว่าหมายความว่าฟีเจอร์นี้ตอนนี้และในอนาคตจะใช้ได้เฉพาะผ่านการเรียก API เท่านั้นหรือเปล่า
ป.ล. ในเบราว์เซอร์เดสก์ท็อป ลิงก์ส่วนหัวเสีย และ onClick ไม่ถูกทริกเกอร์
[1] https://facebookresearch.github.io/nougat/
[2] https://github.com/getomni-ai/zerox
[3] https://www.together.ai/products#custom-models
มีจุดแปลก ๆ อยู่ ผมอัปโหลดเว็บคอมิกเป็นตัวอย่าง บทพูดทั้งหมดเป็นตัวพิมพ์ใหญ่ แต่เอาต์พุตกลับผสมตัวพิมพ์แบบ sentence case กับ title case ไม่สม่ำเสมอในแต่ละช่องภาพ
ผมยังลองทดสอบปัญหาที่อยากใช้ OCR จริง ๆ ด้วย คือมีสไลด์เก่า ๆ ที่ต้องแปลงเป็นดิจิทัล ส่วนใหญ่มีป้ายกำกับอยู่ พออัปโหลดไปหนึ่งภาพ มันอธิบายว่าดูเหมือนภาพถ่ายสไลด์หรือเฟรมฟิล์ม เก่าและเหลือง มีช่องสี่เหลี่ยมสีเข้มตรงกลาง และข้อความคือ “Once Upon a Time” ตัวเลขคือ “1069”
คำอธิบายสไลด์ที่ซ้ำซากเกินจำเป็นก็เป็นปัญหาอยู่แล้ว แต่ตัวอักษรจริงไม่ได้เป็นลายมือด้วยซ้ำ และคือ “Once Uniquitous.” ส่วนตัวเลขคือ 106g ตัวนั้นเป็น ‘g’ ชัดมาก ไม่ใช่ ‘9’
ที่น่าสนใจคืออาจเป็นตัวอย่างของอคติของโมเดล มันมองสไลด์ว่าโบราณเกินไปจนหลอนชื่อเรื่องที่เชยสุด ๆ ขึ้นมา และสี่เหลี่ยมดำจริง ๆ เกิดจากการส่องไฟจากด้านหน้าเพื่อไม่ให้เห็นส่วนโปร่งใส แต่มันพลาดจุดนั้นไป
นอกจากนี้ ดูเหมือน API เองจะมีข้อจำกัดเรื่องขนาดไฟล์หรือความละเอียดที่ไม่ได้ระบุในเอกสาร
เมื่อเร็ว ๆ นี้ผมลองใช้ llama3.2-vision ประมวลผลแผ่นประมูลกระดาษสำหรับงานประมูลการกุศล และมันอ่านลายมือที่ค่อนข้างแย่ได้แม่นยำพอสมควร อยากใช้ในงานปีหน้าด้วย
แต่เรื่องที่ทำให้น่าหงุดหงิดพอสมควรคือทำให้มันส่งออก CSV อย่างสม่ำเสมอได้ยาก ChatGPT กับ Gemini ดูจะทำส่วนนั้นได้ดีกว่า แต่ผมยังไม่ได้ลองทำอัตโนมัติเต็มรูปแบบ
ขนาดงานคือแผ่นประมูลประมาณ 100 หน้า ดังนั้นการเก็บงานด้วยมือบ้างก็ยังพอรับได้ ดีกว่าใช้เวลาของอาสาสมัครแน่นอน
https://github.com/philips/paper-bidsheets
ไม่ฟรี แต่ความแม่นยำกับเอกสารลายมืออยู่ระดับแนวหน้า ผมเป็นผู้ก่อตั้งเลยอาจมีอคติ แต่ระดับความแม่นยำตอนนี้น่าตื่นเต้นจริง ๆ สำหรับโปรเจกต์ 100 หน้า จะเสียแค่ 12 ดอลลาร์เท่านั้นและช่วยประหยัดเวลาได้
ช่วงนี้ทำ OCR เยอะ โดยหลักคือการแปลงข้อความในภาพถ่ายครอบครัวให้เป็นดิจิทัล โมเดล OCR ทั่วไปแย่มาก ส่วน LLM ทำได้ดีกว่ามาก ในบรรดาโมเดลที่ทดสอบ Gemini Flash ดีแบบทิ้งห่าง แต่ก็ยังมีความล้มเหลวและการหลอนมากพอจนพิมพ์เองยังเร็วกว่า
มันน่าหงุดหงิดตรงที่รู้สึกเหมือนเกือบจะทำได้ แต่ก็ทำไม่ได้ เครื่องมือนี้ดูแย่กว่านั้นอีก บางครั้งตอบมาแค่ข้อความ บางครั้งก็ให้คำอธิบายทั้งหมดอย่าง “The image is a scanned document with handwritten text...” ออกมา หวังว่าจะมีอะไรอย่างการ fine-tuning ที่ทำให้ชนะ Gemini Flash ได้ ซึ่งน่าจะช่วยประหยัดเวลาได้มาก เลยน่าเสียดาย
convert -density 76 input.pdf output-%d.pnghttps://github.com/philips/paper-bidsheets
Flash น่าสนใจ และก็สงสัยด้วยว่าทดสอบ LLM ตัวไหนไปบ้าง
การครอปรูปให้เหลือเฉพาะส่วนข้อความ ตัดขอบออก แล้วเพิ่มคอนทราสต์ช่วยได้อย่างมหาศาล เป็นบทความที่เขียนไว้ในปี 2015 แต่ยังใช้ได้ดีกับ GPT: https://www.danvk.org/2015/01/07/finding-blocks-of-text-in-a...
สำหรับ GPT การป้อนทีละไม่กี่ย่อหน้าหรือน้อยกว่านั้นดีกว่าป้อนทั้งหน้าในครั้งเดียว ยิ่งข้อความสั้น โอกาสหลอนก็ยิ่งลดลง
OCR ที่เป็นกระแสเมื่อเร็ว ๆ นี้แย่มาก เลยหวังว่าอันนี้จะดีกว่า ตอนวางรูปทีละรูปในแชต ChatGPT 4o ทำได้ดี แต่ยังไม่ได้ลอง API ไม่รู้ว่าถ้าประมวลผลรูป 6,500 ใบจะเสียค่าใช้จ่ายเท่าไร และในนั้นก็มีรูปเปล่าเยอะ แต่ก็ไม่มีวิธีคัดออกง่าย ๆ
การคืนตำแหน่งข้อความยังไม่ดีนัก แต่จากเท่าที่ผมทดสอบ ประสิทธิภาพ OCR น่าทึ่งมาก
สงสัยว่านี่ควรเป็นโพสต์ “Show HN” หรือเปล่า ดูเหมือนเป็นแค่ฟรอนต์เอนด์ และก็ไม่เห็นส่วนที่เชื่อมโยงโดยตรงกับคำว่า Llama ในชื่อด้วย together.ai อาจเป็นผู้ให้พื้นที่คลาวด์ก็ได้
ผมใช้ genetic algorithm วางวงกลม 500 วงเพื่อสร้างประโยค แล้วลองใส่ประโยคที่วาดด้วยวงกลมจริง ๆ เข้าไป
https://www.instagram.com/marekgibney/p/BiFNyYBhvGr/
ที่น่าสนใจคือมันรู้จำวงกลมได้ดี แต่ไม่เห็นประโยค มันตอบประมาณว่า “ในภาพไม่มีข้อความหรือองค์ประกอบที่สามารถแสดงเป็น Markdown ได้ เป็นเพียงการจัดวางเชิงภาพของวงกลม และไม่มีข้อมูลให้แปลเป็น Markdown”
คำตอบไม่แน่นอน ผมจึงลองกับภาพต้นฉบับหลายครั้ง แต่ไม่สำเร็จเลยสักครั้ง ในทางกลับกัน เอฟเฟกต์ low-pass filter ทุกแบบที่ใช้กลับได้ผลด้วยอัตราความสำเร็จสูง
https://imgur.com/q7Zd7fa
ถ้ามองจากไกล ๆ จะอ่านง่ายขึ้น
วิธีใช้ genetic algorithm ค่อนข้างเจ๋ง อยากดูโค้ด หรืออย่างน้อยก็ฟังก์ชันรางวัล
ตลกดี ผมใส่สกรีนช็อตของเอกสารยาว 3 ภาพเข้าไป มันประมวลผลได้ค่อนข้างดี แต่พอตรวจแก้ก็เห็นว่า AI สร้างย่อหน้าที่ไม่มีอยู่ในต้นฉบับขึ้นมา
น่าจะเป็นเพราะธรรมชาติของสกรีนช็อตทำให้บางประโยคหรือบางย่อหน้าถูกตัดกลางคัน และสิ่งนั้นไปกระตุ้นแนวโน้มการ เติมช่องว่าง ของ LLM มันปล่อยย่อหน้าที่ยังไม่จบไว้อย่างนั้นไม่ได้ และยังใส่ย่อหน้าสรุปสั้น ๆ ที่ไม่มีอยู่ในเอกสารต้นฉบับเลยด้วย
ลองใส่สแกนเก่าของผังวงจรเมนบอร์ด Asus P3B-F ปี 1997 เข้าไป
มันดึงข้อความได้แค่บางส่วนใน title block เช่นชื่อโปรเจกต์กับวันที่ และแม้ฟอนต์จะชัดเจนก็ยังสับสนทั้ง 8/B และ 1/I ปนกันไปหมด
ข้อมูลที่มีประโยชน์จริง ๆ กลายเป็นประมาณ “Tables / Table 1: [Insert table 1 here] / Other Elements / [Insert other elements here]”