PPDF123
Formats2026-08-25อ่านประมาณ 2 นาที

OCR อ่าน PDF สแกนอย่างไร และทำไมเครื่องมือนี้คืน Markdown

PDF สแกนคือภาพของข้อความ เอนด์พอยต์ OCR นี้คืน Markdown ไม่ใช่ PDF ที่มีเลเยอร์ซ่อนอยู่ Auto ใช้ข้อความเดิมในไฟล์ ส่วน Force OCR อ่านทุกหน้าใหม่

PDF123 · Updated 2026-09-19

PDF สแกนเก็บหน้าเป็นภาพแรสเตอร์ ภาพถ่ายของข้อความ ไม่ใช่ตัวอักษรที่เลือกได้ OCR (optical character recognition) มองพิกเซลเหล่านั้น เดารูปร่างใดเป็นตัวอักษร แล้วปล่อยข้อความจริงออกมา บน PDF123 งานนี้รันเป็นเครื่องมือเบราว์เซอร์ฟรีและเป็น POST /api/v1/misc/ocr-pdf ผลลัพธ์คือ Markdown ไม่ใช่ PDF ที่เขียนใหม่

Diagram of a scanned page before OCR (image only) and after (text aligned to the page). Many PDF OCR tools write that text back as a hidden layer; this site's endpoint returns Markdown instead.

สแกนก็ยังเป็นภาพอยู่ดี

OCR ไม่ได้ทำความสะอาด ทำให้คม หรือแทนที่บิตแมป ไฟล์สแกนที่คมแต่ OCR อ่านผิด ก็ยังดูคม ปัญหาคอขวดไม่เคยอยู่ที่คุณภาพภาพ แต่อยู่ที่การรู้จำ สลับเอนจินรู้จำบนสแกนชุดเดียวกัน ความแม่นยำอาจเปลี่ยนไปมาก ทั้งที่พิกเซลเดิมไม่ถูกแตะต้องเลย

OCR บน PDF แบบคลาสสิกเขียนเลเยอร์ข้อความที่สองซึ่งมองไม่เห็น ซ้อนให้ตรงกับภาพด้านล่าง เพื่อให้การเลือกและค้นหาตกที่คำถูกต้อง ไดอะแกรมแสดงวิธีนี้ และเครื่องมือเดสก์ท็อปหลายตัวก็ยังทำแบบเดียวกัน

เอนด์พอยต์นี้คืนอะไรจริง ๆ

เส้นทาง OCR เรียก /api/v1/misc/ocr-pdf ซึ่งรันบน Rust crate แบบสแตนด์อโลนชื่อ pdf-inspector (คอมไพล์พร้อมฟีเจอร์ ocr) มันไม่ได้ส่ง PDF ทั้งไฟล์ให้โมเดลรู้จำ pdf-inspector จะจัดประเภทแต่ละหน้าก่อนว่ามีข้อความต้นฉบับที่ดึงออกมาได้อยู่แล้ว หรือเป็นภาพล้วน หน้าที่มีข้อความต้นฉบับจะเก็บข้อความนั้นไว้ตามเดิมและไม่แตะโมเดลรู้จำเลย ส่วนหน้าที่เป็นภาพล้วนจะผ่านไปป์ไลน์การรู้จำแทน—PDFium (ตัวเรนเดอร์โอเพนซอร์สตัวเดียวกับที่ Chrome ใช้ภายใน) จะแรสเตอร์หน้านั้น แล้ว ONNX Runtime จะรันโมเดล PP-OCRv6 Small เพื่ออ่านมัน ทั้งสองแบบของหน้าจะถูกเย็บรวมตามลำดับเป็นเอกสาร Markdown เดียว นี่คือเหตุผลที่การตอบกลับเป็น text/markdown และไฟล์ที่ดาวน์โหลดลงท้ายด้วย .md

สัญญาแบบนี้เพิ่งมีในการเขียนใหม่ครั้งนี้ แบ็กเอนด์ Java/Spring Boot เดิมที่โปรเจกต์นี้เคยรันเรียกใช้ OCRmyPDF วิธีคลาสสิกแบบ "ภาพบวกเลเยอร์ข้อความซ่อน" และคืนผลเป็น PDF การเขียนใหม่ด้วย Rust แทนที่เส้นทางนั้นทั้งหมดด้วย OCR แบบเลือกหน้าของ pdf-inspector และผลลัพธ์ก็ย้ายจาก PDF ไปเป็น Markdown ไปพร้อมกัน แบ็กเอนด์ Java เก่าถูกลบออกจากรีโพซิทอรีไปแล้วโดยสิ้นเชิงตั้งแต่นั้น มันไม่ใช่สวิตช์ที่จะสลับกลับไปใช้ได้

ถ้าต้องการ PDF ที่ค้นหาได้ (ภาพพร้อมเลเยอร์ข้อความ) ผลลัพธ์นี้ผิด แต่ถ้าต้องการข้อความที่เอเจนต์หรือไปป์ไลน์อ่านได้ Markdown คือคำตอบ

Auto กับ Force OCR

ฟอร์มมีฟิลด์ ocrType

  • Normal (ค่าอื่นใดที่ไม่ใช่ force-ocr) แมปไปที่ Auto คือใช้ข้อความเดิมที่มีในไฟล์ และรัน OCR เฉพาะหน้าที่เป็นภาพล้วน บน PDF ดิจิทัลโดยตรง Auto จะไม่โหลดรันไทม์ OCR
  • Force OCR (ocrType=force-ocr) รันการรู้จำใหม่ทุกหน้า รวมหน้าที่มีเลเยอร์ข้อความอยู่แล้ว คุณจ่ายด้วยเวลา ไม่ใช่ความแม่นยำที่เพิ่มขึ้น สำหรับหน้าที่เป็นภาพล้วนจริง แต่ได้รอบอ่านที่ไม่เชื่อเลเยอร์เดิมที่พังหรือไม่ครบ

ค่าเริ่มต้นของพอร์ทัลคือ Force OCR และไม่มีการเลือกภาษา เพราะรหัส tessdata ที่ตกค้างจากเส้นทาง Java เดิมถูกเพิกเฉย

การแยก Auto/Force เกิดขึ้นภายในคำขอเอง และทั้งพอร์ทัลและ capability probe ของ API ก็ไม่ได้ตรวจสอบให้ล่วงหน้า GET /api/v1/settings/get-endpoints-status จะรายงานว่า ocr-pdf "enabled" เสมอ โดยไม่ได้ตรวจจริงว่าติดตั้ง PDFium, ONNX Runtime หรือโมเดล PP-OCRv6 ไว้หรือไม่ การตรวจจริงจะเกิดขึ้นก็ต่อเมื่อคำขอนั้นไปกระตุ้นการรู้จำ: ถ้าขาดตัวใดตัวหนึ่งไป เอนด์พอยต์จะคืนค่า 503 ไม่ใช่ Markdown ที่ลดคุณภาพแล้วเงียบ ๆ ถอยไปใช้แค่ข้อความต้นฉบับ โมเดล PP-OCRv6 Small เองมีขนาดประมาณ 31 MB เว้นแต่จะถูกฝังไว้ล่วงหน้าในแคชท้องถิ่นตอนดีพลอย มันจะดาวน์โหลดผ่านเครือข่ายในครั้งแรกที่มีหน้าที่ต้องการการรู้จำจริง ๆ เครื่องที่ออฟไลน์และไม่มีโมเดลฝังไว้ล่วงหน้ามีแนวโน้มสูงที่จะล้มเหลวตั้งแต่คำขอ Force ครั้งแรกเลย แทนที่จะแค่ทำงานช้าลง

การรู้จำคือความน่าจะเป็น

เอ็นจินจับคู่แพทเทิร์นพิกเซลกับโมเดลตัวอักษรและคำ จึงทำได้ดีกับงานพิมพ์สะอาด คอนทราสต์สูง ฟอนต์มาตรฐาน แต่แย่ลงเมื่อเจอ

  • ไฟล์สแกนความละเอียดต่ำหรือคอนทราสต์ต่ำ (คุณภาพระดับแฟกซ์เทียบกับต้นฉบับ 300 DPI)
  • ลายมือเขียน ฟอนต์ตกแต่ง และเลย์เอาต์แปลก ๆ (ตารางหลายคอลัมน์ ข้อความหมุน ฟอร์มที่แน่น)
  • หน้าเอียงที่ทำให้รูปทรง glyph บิดเบี้ยวพอจะหลอกการจับคู่

แฟกซ์ที่เบลอจะ OCR ได้ไม่เหมือนไฟล์สแกนที่สะอาด ไม่ว่าจะใช้ Auto หรือ Force นี่คือข้อจำกัดของตัวโมเดลเอง ไม่ใช่สิ่งที่พารามิเตอร์จะแก้ได้

OCR ไม่ทำอะไรบ้าง

OCR ให้ข้อความ แต่ไม่ประกอบย่อหน้า หัวเรื่อง ตาราง กลับคืนมา และไม่สร้างเอกสาร Word ที่ปรับการไหลข้อความได้ การทำเลย์เอาต์ให้แก้ไขได้เป็นปัญหาการแปลงที่ซ้อนบนความผิดพลาดของการรู้จำ ไม่ใช่งานเดียวกับการอ่านสแกน

OCR a PDF รันบนเซิร์ฟเวอร์โดยไม่ต้องมีบัญชี ดาวน์โหลดเป็น Markdown ถ้าเลเยอร์ข้อความเดิมดูผิด ให้ใช้ Force OCR เพื่อไม่ให้ Auto เชื่อเลเยอร์นั้น ส่วนการเช็กว่าเครื่องหนึ่ง ๆ มี PDFium และโมเดลติดตั้งจริงหรือไม่ การรันคำขอจริงเชื่อถือได้กว่าการอ่านค่าจาก capability probe เพราะ probe ยืนยันได้แค่ว่าเอนด์พอยต์มีอยู่ ไม่ใช่ว่ารันไทม์ของมันพร้อมแล้ว ส่วนคีย์งานอัตโนมัติและ OpenAPI ดูที่ Developers

Open tool
Process in the browser — no watermark, files removed after the job.
Open tool