ฉันจะเลือกระหว่าง Tesseract และ OpenCV ได้อย่างไร [ปิด]


94

ฉันเพิ่งมาข้ามTesseractและOpenCV ดูเหมือนว่า Tesseract เป็นเอ็นจิ้น OCR เต็มรูปแบบและ OpenCV สามารถใช้เป็นเฟรมเวิร์กเพื่อสร้างแอปพลิเคชัน / บริการ OCR

ฉันลองใช้ Tesseract กับภาพบางภาพและความแม่นยำของมันดูดี ต่อมาฉันเจอบทช่วยสอนง่ายๆเกี่ยวกับการใช้ OpenCV เพื่อดำเนินการ OCR โดยใช้ Python และรู้สึกประทับใจ ในไม่กี่นาทีฉันก็ฝึกระบบเสร็จแล้วและความแม่นยำก็ดี แต่แน่นอนว่าการใช้แนวทางนี้หมายความว่าฉันต้องฝึกระบบของฉันอย่างครอบคลุมโดยใช้ชุดการฝึกอบรมขนาดใหญ่

คำถามเฉพาะของฉันมีดังต่อไปนี้:

  • เราจะเลือกระหว่าง Tesseract และการใช้ OpenCV เพื่อสร้างแอป OCR ที่กำหนดเองได้อย่างไร
  • มีชุดข้อมูลการฝึกอบรมสำหรับ Tesseract สำหรับภาษาต่างๆ OpenCV มีบางอย่างที่คล้ายกันเพื่อที่ฉันจะได้ไม่ต้องเริ่มต้นใหม่เพื่อให้ได้ OCR หรือไม่
  • อันไหนดีกว่าสำหรับแอปพลิเคชันเชิงพาณิชย์ที่อยากเป็น

ข้อเสนอแนะใด ๆ ?


8
คำตอบด้านล่างนี้ยอดเยี่ยมมาก แต่ในฐานะที่ทำงานร่วมกับ OCR ฉันสามารถบอกคุณได้ว่าคุณภาพการจดจำใน Tesseract นั้นต่ำกว่าความคาดหวังของผู้ใช้แอปเชิงพาณิชย์ Tesseract นั้นยอดเยี่ยม แต่ OCR นั้นยาก - สิ่งต่างๆเช่นการฝึกอบรมออนไลน์หรือการปรับปรุงในทันทีนั้นอืม ... ยังคงเป็นงานวิจัย Google ซึ่งเป็นผู้สนับสนุนรายใหญ่ที่อยู่เบื้องหลัง TS ได้ตัดสินใจที่จะสร้างเครื่องยนต์ของตัวเอง - OCROpus และในขณะที่สัญญาว่าจะเปิดแหล่งที่มา แต่เอ็นจินการจดจำหลักยังไม่พร้อมใช้งาน - พวกเขาเผยแพร่เฉพาะกรอบงานเท่านั้นซึ่งเป็น API สำหรับ tesseract
แซม

3
@vasile: เป็นข้อมูลที่ดีมาก ฉันไม่รู้จัก OCROpus ขอบคุณ. คุณมีคำแนะนำสำหรับทางเลือกอื่นหรือไม่หากวัตถุประสงค์สุดท้ายของฉันคือเขียนนามบัตร OCR (หรือพูดว่าใบที่อ่านใบเสร็จรับเงินของปั๊มน้ำมันเหมือนกับที่ฉันเชื่อมโยง: upload.wikimedia.org/wikipedia/en/3/34/… )? ฉันถามเพราะฉันแค่อยากรู้ว่าแอพมือถือจำนวนมากใช้อะไรเพื่อบรรลุเป้าหมายนี้ ฉันไม่คิดจะทำ OCR บนฝั่งเซิร์ฟเวอร์ ฉันถูกล่อลวงให้ใช้ OpenCV หลังจากเห็นการสาธิตที่ยอดเยี่ยมนี้: youtube.com/watch?v=OkcOfS1lTxs
Legend

6
มีเครื่องมือ OCR เชิงพาณิชย์จำนวนมากเพียงแค่ google OCR accuracy testsแล้วคุณจะพบแผนภูมิบางส่วน และพูดถึงแอพมือถือส่วนใหญ่ใช้ tesseract แต่ถ้าคุณต้องการดาวน์โหลดบางส่วนคุณจะเห็นว่าผลลัพธ์นั้นแตกต่างจากที่สัญญาไว้เล็กน้อย พวกเขามักจะทำวิดีโอสาธิตในสภาพแวดล้อมที่มีการควบคุมอย่างรอบคอบและโพสต์บน youtube แต่หากคุณสแกนหน้า / สูตรอาหาร / การ์ด / อะไรก็ตามที่คุณจะได้รับผลลัพธ์ที่ตลกขบขัน
แซม

1
@vasile: ขอบคุณครับ สิ่งที่ทำให้ฉันยุ่งสำหรับคืนนี้ ขอบคุณเวลาของคุณจริงๆ
ตำนาน

คำตอบ:


77
  • Tesseract เป็นเครื่องมือ OCR Google ใช้ทำงานและได้รับทุนสนับสนุนโดยเฉพาะเพื่ออ่านข้อความจากรูปภาพดำเนินการแบ่งส่วนเอกสารพื้นฐานและดำเนินการกับอินพุตรูปภาพที่เฉพาะเจาะจง (คำเดียวบรรทัดย่อหน้าหน้าพจนานุกรมแบบ จำกัด ฯลฯ )

  • ในทางกลับกัน OpenCV เป็นไลบรารีการมองเห็นของคอมพิวเตอร์ที่มีคุณสมบัติที่ช่วยให้คุณสามารถแยกคุณลักษณะและการจัดประเภทข้อมูล คุณสามารถสร้างตัวแบ่งส่วนตัวอักษรและลักษณนามที่ทำ OCR พื้นฐานได้ แต่ไม่ใช่เครื่องมือ OCR ที่ดีมาก (ฉันเคยทำใน Python มาก่อนตั้งแต่เริ่มต้นมันไม่ถูกต้องจริงๆสำหรับอินพุตที่เบี่ยงเบนจากข้อมูลการฝึกของคุณ)

หากคุณต้องการทำความเข้าใจพื้นฐานเกี่ยวกับความยากของ OCR ให้ลองใช้ OpenCV Tesseract ใช้สำหรับOCR จริง


3
ขึ้นอยู่กับภาพที่คุณป้อน Tesseract จะทำงานได้ดีที่สุดเมื่อตัวอักษรมีความคมชัดเป็นเส้นแนวนอนเว้นระยะห่างไม่เชื่อมต่อและขาว - ดำอย่างสมบูรณ์แบบ ฉันทำงานในชุมชนการสแกน / การเก็บรักษาหนังสือ DIY เป็นเวลาประมาณหนึ่งปีและทำงานเกี่ยวกับซอฟต์แวร์ในเวลาว่างเพื่อให้กระบวนการนี้ง่ายขึ้น ที่ดีที่สุดซอฟแวร์ออกมี (ในเชิงพาณิชย์หรือไม่) สำหรับการโพสต์ใด ๆภาพที่มีข้อความสแกน Tailor มีตัวเลือก CLI อยู่บ้าง แต่ถ้าคุณใช้เวลาสักพักเพื่อดูว่ามันทำงานอย่างไรมันก็น่าทึ่งมาก
Blender

2
ฉันทำงานกับซอร์สโค้ดของ Scan Tailor มาเล็กน้อยและไม่ได้ใช้ OpenCV ภายใน แต่อัลกอริทึมจำนวนมากที่สร้างขึ้นสามารถเขียนใหม่ด้วยฟังก์ชันของ OpenCV ได้อย่างง่ายดาย หากภาพของคุณไม่บิดเบี้ยวและไม่ถูกย่อยสลายคุณเพียงแค่ต้องใช้การปรับไบนาร์ไลเซชั่นและการดูหมิ่นแบบง่ายๆก่อนที่จะป้อนรูปภาพของคุณลงใน Tesseract
Blender

1
เกี่ยวกับคำถามของคุณฉันเพิ่งทดสอบภาพที่ป้อนแบบสุ่มเมื่อวานนี้ ฉันลองใบเสร็จจากปั๊มน้ำมัน: upload.wikimedia.org/wikipedia/en/3/34/…มันจำได้0ว่าเป็น8(รวม $ 20.00) ฉันยอมรับว่าตัวเลขนั้นยากแม้ว่าฉันจะถอดรหัส แต่ฉันก็ไม่แน่ใจว่าจะทำอะไรได้อีกบ้างเพื่อปรับ Tesseract ให้เข้ากับสถานการณ์เหล่านี้หรืออาจจะแนะนำองค์ประกอบการเรียนรู้หากฉันจะมีฐานผู้ใช้
ตำนาน

5
Tesseract ได้รับการฝึกฝนสำหรับการอ่านชุดแบบอักษรเฉพาะ จดหมายบล็อกเหล่านี้ไม่ใช่หนึ่งในนั้น คุณจะต้องนำเสนอเครื่องสังเวยสัตว์ให้ Google และลองฝึก Tesseract ด้วยตัวคุณเอง: code.google.com/p/tesseract-ocr/wiki/TrainingTesseract3
Blender

1
นอกจากนี้ก่อนที่คุณจะเริ่มเขียนโปรแกรม OCR ที่กำหนดเองสำหรับการอ่านตัวอักษรเหล่านั้นอย่าคาดหวังว่ามันจะถูกต้อง ฉันเขียนหนึ่งเรื่องสำหรับการทำให้วงล้อแห่งโชคชะตาโดยอัตโนมัติและภาพตัวอย่าง (ภาพหน้าจอของเกมออนไลน์) เป็น JPEG สิ่งประดิษฐ์จากการบีบอัด JPEG นั้นเพียงพอที่จะทำให้ตัวแยกประเภทภาพเข้าใจผิดเว้นแต่ฉันจะให้ภาพตัวอย่างประมาณ 10-20 ภาพของทุกอักขระ
Blender

65

ฉันเป็นผู้เขียนบทช่วยสอนการรู้จำตัวเลขที่คุณพูดถึงและฉันจะบอกว่านั่นไม่มีทางแทนที่ tesseract ได้

Tesseract เป็นเอ็นจิ้น OCR ที่ดีจริงๆอาจเป็นเอ็นจิ้น OpenSource OCR ที่ดีที่สุด

บทช่วยสอนที่คุณกล่าวถึงเป็นเพียงการพยายามเพื่อให้เข้าใจการทำงานของ OCR อย่างง่าย

ดังนั้นหากคุณกำลังมองหาแอป OCR ฉันขอแนะนำให้คุณใช้ OpenCV ในการประมวลผลภาพล่วงหน้าจากนั้นใช้ tesseract engine


1
+1 ขอบคุณครับ ก่อนอื่นขอขอบคุณสำหรับบทแนะนำ :) มันเป็นการอ่านที่น่าสนใจจริงๆ คุณทราบข้อมูลอ้างอิง / บทช่วยสอนเกี่ยวกับวิธีใช้ OpenCV ร่วมกับ Tesseract หรือไม่? ไม่ได้พูดถึงการเชื่อมต่อ แต่ประเภทของการแปลงภาพหรือการประมวลผลล่วงหน้าที่ต้องทำเพื่อปรับปรุงความแม่นยำของ Tesseract?
ตำนาน

2
อยากจะบอกว่าในขณะที่ Tesseract เป็นเครื่องมือ OCR ที่ดีเมื่อเทียบกับคนอื่น ๆ แต่ก็ยังไม่ถูกต้องอยู่พอสมควรฉันมีอัตราความสำเร็จประมาณ 40% ในการรับรู้ข้อความที่ถูกต้อง หวังว่ามันจะดีขึ้นในสองสามปีนี้
GangstaGraham

4
@GangstaGraham คุณเพียงแค่ต้องฝึก tesseract และคุณจะได้ผลลัพธ์ที่ดีขึ้นในไม่กี่ชั่วโมงหรือหลายวันไม่ใช่ปี opensource.newmediaist.com/tesseract-training.html
valentt

1
ฉันใช้ PyTesseract สำหรับการแยกข้อความตามเวลาจริง ทำงานได้ดีบน Linux PC แต่ช้ามากในสภาพแวดล้อม Raspberry Pi ... วิธีใดในการติดตั้งรุ่นที่มีน้ำหนักเบา? ตัวอย่างเช่นประมวลผลเฉพาะตัวเลขและตัวพิมพ์ใหญ่ของตัวอักษรภาษาอังกฤษ?
Yuriy Chernyshov

9

ทั้งสองสามารถเสริมกันได้ หากคุณอ่านบทความเกี่ยวกับ OpenCV: https://github.com/tesseract-ocr/docs/blob/master/tesseracticdar2007.pdf

โดยเน้นว่า "เนื่องจาก HP มีเทคโนโลยีการวิเคราะห์เค้าโครงหน้าที่พัฒนาขึ้นโดยอิสระซึ่งใช้ในผลิตภัณฑ์ (ดังนั้นจึงไม่ได้เปิดตัวสำหรับโอเพ่นซอร์ส) Tesseract จึงไม่ต้องการการวิเคราะห์เค้าโครงหน้าของตนเอง Tesseract จึงถือว่าข้อมูลที่ป้อนเป็นภาพไบนารีที่มี กำหนดขอบเขตข้อความรูปหลายเหลี่ยมที่เป็นทางเลือก "

งานประเภทนี้สามารถทำได้โดย OpenCV และภาพที่ได้จะถูกส่งไปยัง Tesseract คุณสามารถดูตัวอย่างของโค้ดประเภทนี้ได้ใน Git repo: https://github.com/Itseez/opencv_contrib/tree/master/modules/text/samples ตัวอย่างใช้ Tesseract API เพื่อแปลงรูปภาพเป็นข้อความ


3

OpenCV เป็นไลบรารีสำหรับCV ที่ใช้ในการวิเคราะห์และประมวลผลรูปภาพโดยทั่วไป Tesseract เป็นไลบรารีสำหรับOCRซึ่งเป็นชุดย่อยเฉพาะของ CV ที่มีไว้สำหรับการแยกข้อความออกจากรูปภาพ

จากOpenCV.org

..... ใช้ในการตรวจจับและจดจำใบหน้าระบุวัตถุจำแนกการกระทำของมนุษย์ในวิดีโอติดตามการเคลื่อนไหวของกล้องติดตามวัตถุที่เคลื่อนไหวแยกโมเดล 3 มิติของวัตถุสร้างจุดเมฆ 3 มิติจากกล้องสเตอริโอเย็บภาพเข้าด้วยกันเพื่อสร้างภาพที่สูง ภาพความละเอียดของฉากทั้งหมดค้นหาภาพที่คล้ายกันจากฐานข้อมูลภาพลบตาแดงออกจากภาพที่ถ่ายโดยใช้แฟลชติดตามการเคลื่อนไหวของดวงตาจดจำทิวทัศน์และสร้างเครื่องหมายเพื่อซ้อนทับด้วยความเป็นจริงยิ่ง ฯลฯ

จากTesseract Github :

..... สามารถใช้ได้โดยตรงหรือ (สำหรับโปรแกรมเมอร์) โดยใช้ API เพื่อแยกข้อความที่พิมพ์เขียนด้วยลายมือหรือพิมพ์จากรูปภาพ รองรับภาษาที่หลากหลาย

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.