วิธี OCR ด้วย Tesseract, OpenCV และ Python PlatoBlockchain Data Intelligence ค้นหาแนวตั้ง AI.

วิธี OCR ด้วย Tesseract, OpenCV และ Python

วิธี OCR ด้วย Tesseract, OpenCV และ Python

ในบล็อกโพสต์นี้ เราจะพยายามอธิบายเทคโนโลยีที่อยู่เบื้องหลัง Tesseract Engine ที่ใช้มากที่สุด ซึ่งได้รับการอัปเกรดด้วยความรู้ล่าสุดที่ค้นคว้าเกี่ยวกับการรู้จำอักขระด้วยแสง บทความนี้ยังใช้เป็นแนวทาง/บทช่วยสอนเกี่ยวกับวิธีการนำ OCR ไปใช้ใน python โดยใช้เอ็นจิ้น Tesseract เราจะดำเนินการตามโมดูลต่อไปนี้:

  • คุณสมบัติ Tesseract OCR
  • การประมวลผลล่วงหน้าสำหรับ OCR โดยใช้ OpenCV
  • ใช้งาน Tesseract ด้วย CLI และ Python
  • ข้อจำกัดของเครื่องยนต์ Tesseract

สารบัญ

บทนำ

โอซีอาร์ = Optical Character ยอมรับ. กล่าวอีกนัยหนึ่ง ระบบ OCR จะเปลี่ยนรูปภาพข้อความสองมิติ ซึ่งอาจประกอบด้วยข้อความที่พิมพ์ด้วยเครื่องหรือเขียนด้วยลายมือจากการแสดงรูปภาพเป็นข้อความที่เครื่องอ่านได้ OCR เป็นกระบวนการโดยทั่วไปประกอบด้วยหลายกระบวนการย่อยเพื่อดำเนินการอย่างถูกต้องที่สุด กระบวนการย่อยคือ:

  • การประมวลผลภาพล่วงหน้า
  • การแปลข้อความ
  • การแบ่งส่วนอักขระ
  • การจดจำตัวละคร
  • โพสต์การประมวลผล

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

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

วิธี OCR ด้วย Tesseract, OpenCV และ Python
กระบวนการจดจำตัวอักษรด้วยแสง (มารยาท)

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

การรู้จำอักขระด้วยแสงยังคงเป็นa ปัญหาที่ท้าทาย เมื่อข้อความเกิดขึ้นในสภาพแวดล้อมที่ไม่มีข้อจำกัด เช่น ฉากธรรมชาติเนื่องจากการบิดเบือนทางเรขาคณิต พื้นหลังที่ซับซ้อน และแบบอักษรที่หลากหลาย เทคโนโลยียังคงมีศักยภาพมหาศาลเนื่องจากกรณีการใช้งานต่างๆ ของ OCR ที่ใช้การเรียนรู้เชิงลึก เช่น


มีปัญหา OCR ในใจหรือไม่? ต้องการลดต้นทุนการป้อนข้อมูลขององค์กรของคุณหรือไม่? ตรงไปที่ นาโนเน็ต และสร้างแบบจำลอง OCR เพื่อ ดึงข้อความจากภาพ or ดึงข้อมูลจาก PDFs ด้วย AI เป็นหลัก PDF OCR!


เครื่องมือ OCR โอเพ่นซอร์ส

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

Tesseract – เอ็นจิ้น OCR โอเพ่นซอร์สที่ได้รับความนิยมในหมู่นักพัฒนา OCR แม้ว่าการติดตั้งและปรับเปลี่ยนบางครั้งอาจเป็นเรื่องที่เจ็บปวด แต่ก็มีทางเลือก OCR ที่ฟรีและมีประสิทธิภาพไม่มากนักในตลาดเป็นเวลานานที่สุด Tesseract เริ่มเป็นปริญญาเอก โครงการวิจัยใน HP Labs, Bristol ได้รับความนิยมและได้รับการพัฒนาโดย HP ระหว่างปี 1984 ถึง 1994 ในปี 2005 HP ได้เปิดตัว Tesseract เป็นซอฟต์แวร์โอเพ่นซอร์ส ตั้งแต่ปีพ. ศ. 2006 ได้รับการพัฒนาโดย Google

วิธี OCR ด้วย Tesseract, OpenCV และ Python
การเปรียบเทียบแนวโน้มของ Google สำหรับเครื่องมือ OCR โอเพ่นซอร์สที่แตกต่างกัน

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


เกี่ยวกับตา – Ocular ทำงานได้ดีที่สุดบนเอกสารที่พิมพ์โดยใช้มือกด รวมถึงเอกสารที่เขียนในหลายภาษา มันทำงานโดยใช้บรรทัดคำสั่ง เป็นระบบ OCR ทางประวัติศาสตร์ที่ล้ำสมัย คุณสมบัติหลักของมันคือ:

  • การเรียนรู้แบบอักษรที่ไม่รู้จักโดยไม่มีผู้ดูแล: ต้องการเพียงรูปภาพเอกสารและคลังข้อความเท่านั้น
  • ความสามารถในการจัดการเอกสารที่มีเสียงดัง: หมึกไม่สอดคล้องกัน, ระยะห่าง, การจัดแนวแนวตั้ง
  • รองรับเอกสารหลายภาษา รวมถึงเอกสารที่มีการสลับรหัสระดับคำมาก
  • การเรียนรู้แบบไม่มีผู้ดูแลเกี่ยวกับรูปแบบการแปรผันของออร์โธกราฟิก รวมถึงการสะกดคำแบบโบราณและการจดชวเลขเครื่องพิมพ์
  • พร้อมกัน การถอดความร่วมกันทั้งในรูปแบบทางการทูต (ตามตัวอักษร) และรูปแบบปกติ


SwiftOCR – ฉันจะพูดถึงเอ็นจิ้น OCR ที่เขียนด้วย Swift เช่นกัน เนื่องจากมีการพัฒนาครั้งใหญ่เพื่อพัฒนาการใช้ Swift เป็นภาษาโปรแกรมการพัฒนาที่ใช้สำหรับการเรียนรู้เชิงลึก เช็คเอาท์ บล็อก เพื่อหาข้อมูลเพิ่มเติมว่าทำไม SwiftOCR เป็นไลบรารี OCR ที่รวดเร็วและเรียบง่ายซึ่งใช้โครงข่ายประสาทเทียมสำหรับการจดจำภาพ SwiftOCR อ้างว่าเครื่องยนต์ของพวกเขาทำงานได้ดีกว่าห้องสมุด Tessaract ที่รู้จักกันดี

ในบล็อกนี้เราจะใส่ มุ่งเน้นไปที่ Tesseract OCR และเรียนรู้เพิ่มเติมเกี่ยวกับวิธีการทำงานและการใช้งาน


Tesseract OCR

Tesseract เป็นเอ็นจิ้นการรู้จำข้อความโอเพ่นซอร์ส (OCR) ซึ่งอยู่ภายใต้ลิขสิทธิ์ Apache 2.0 สามารถใช้โดยตรงหรือ (สำหรับโปรแกรมเมอร์) โดยใช้ API เพื่อแยกข้อความที่พิมพ์ออกจากรูปภาพ รองรับภาษาที่หลากหลาย Tesseract ไม่มี GUI ในตัว แต่มีหลายอย่างจาก เพจบุคคลที่สาม. Tesseract เข้ากันได้กับภาษาการเขียนโปรแกรมและเฟรมเวิร์กมากมายผ่านตัวตัดทอนที่สามารถพบได้ โปรดคลิกที่นี่เพื่ออ่านรายละเอียดเพิ่มเติม. สามารถใช้กับการวิเคราะห์เค้าโครงที่มีอยู่เพื่อจดจำข้อความภายในเอกสารขนาดใหญ่ หรือใช้ร่วมกับตัวตรวจจับข้อความภายนอกเพื่อจดจำข้อความจากรูปภาพของบรรทัดข้อความเดียว

วิธี OCR ด้วย Tesseract, OpenCV และ Python
OCR Process Flow เพื่อสร้าง API ด้วย Tesseract จากa โพสต์บล็อก

Tesseract 4.00 มีระบบย่อยเครือข่ายประสาทใหม่ที่กำหนดค่าเป็นตัวจำแนกบรรทัดข้อความ มีต้นกำเนิดมาจาก LSTM . ที่ใช้ Python ของ OCRopus การใช้งาน แต่ได้รับการออกแบบใหม่สำหรับ Tesseract ใน C ++ ระบบโครงข่ายประสาทเทียมใน Tesseract เกิดขึ้นก่อน TensorFlow แต่เข้ากันได้กับระบบ เนื่องจากมีภาษาคำอธิบายเครือข่ายที่เรียกว่า Variable Graph Specification Language (VGSL) ที่มีให้สำหรับ TensorFlow ด้วย

ในการจดจำรูปภาพที่มีอักขระตัวเดียว เราใช้ Convolutional Neural Network (CNN) ข้อความที่มีความยาวตามอำเภอใจคือลำดับของอักขระ และปัญหาดังกล่าวแก้ไขได้โดยใช้ RNN และ LSTM เป็นรูปแบบยอดนิยมของ RNN อ่านโพสต์นี้เพื่อเรียนรู้เพิ่มเติมเกี่ยวกับ แอลเอสทีเอ็ม.


เทคโนโลยี – วิธีการทำงาน

LSTM นั้นยอดเยี่ยมในการเรียนรู้ลำดับ แต่ช้าลงมากเมื่อจำนวนสถานะมากเกินไป มีผลลัพธ์เชิงประจักษ์ที่แนะนำว่าควรขอให้ LSTM เรียนรู้ลำดับที่ยาวกว่าลำดับสั้นๆ ของหลายๆ ชั้นเรียน Tesseract พัฒนาจากโมเดล OCRopus ใน Python ซึ่งเป็นทางแยกของ LSMT ใน C++ เรียกว่า CLSTM CLSTM เป็นการนำโมเดลโครงข่ายประสาทเทียมที่เกิดซ้ำของ LSTM ใน C++ โดยใช้ไลบรารี Eigen สำหรับการคำนวณเชิงตัวเลข

วิธี OCR ด้วย Tesseract, OpenCV และ Python
กระบวนการ Tesseract 3 OCR จาก กระดาษ

Legacy Tesseract 3.x ขึ้นอยู่กับกระบวนการแบบหลายขั้นตอน ซึ่งเราสามารถแยกความแตกต่างของขั้นตอนได้:

  • ค้นหาคำ
  • ค้นหาสาย
  • การจำแนกตัวละคร

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

ความทันสมัยของเครื่องมือ Tesseract คือความพยายามในการทำความสะอาดโค้ดและเพิ่มโมเดล LSTM ใหม่ ภาพอินพุตถูกประมวลผลในกล่อง (สี่เหลี่ยมผืนผ้า) ทีละบรรทัดโดยป้อนบรรทัดลงในโมเดล LSTM และให้เอาต์พุต ในภาพด้านล่างเราสามารถเห็นภาพวิธีการทำงาน

วิธี OCR ด้วย Tesseract, OpenCV และ Python
Tesseract ใช้โมเดล LSTM อย่างไร การเสนอ

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


การติดตั้ง Tesseract

การติดตั้ง tesseract บน Windows นั้นทำได้ง่ายโดยพบไบนารีที่คอมไพล์แล้ว โปรดคลิกที่นี่เพื่ออ่านรายละเอียดเพิ่มเติม. อย่าลืมแก้ไขตัวแปรสภาพแวดล้อม "เส้นทาง" และเพิ่มเส้นทาง tesseract สำหรับการติดตั้ง Linux หรือ Mac จะติดตั้งด้วย คำสั่งเล็กน้อย.

หลังจากการติดตั้งตรวจสอบว่าทุกอย่างทำงานโดยพิมพ์คำสั่งในเทอร์มินัลหรือ cmd:

$ tesseract --version

และคุณจะเห็นผลลัพธ์คล้ายกับ:

tesseract 4.0.0
leptonica-1.76.0
libjpeg 9c : libpng 1.6.34 : libtiff 4.0.9 : zlib 1.2.8
Found AVX2
Found AVX
Found SSE

คุณสามารถติดตั้ง python wrapper สำหรับ tesseract หลังจากนี้โดยใช้ pip
$ pip install pytesseract

ไลบรารี Tesseract มาพร้อมกับเครื่องมือบรรทัดคำสั่งที่เรียกว่า tesseract เราสามารถใช้เครื่องมือนี้เพื่อดำเนินการ OCR กับรูปภาพและผลลัพธ์จะถูกเก็บไว้ในไฟล์ข้อความ หากเราต้องการรวม Tesseract ในโค้ด C++ หรือ Python เราจะใช้ API ของ Tesseract


ใช้งาน Tesseract กับ CLI

เรียกเครื่องยนต์ Tesseract บนภาพด้วย รูปภาพ_เส้นทาง และแปลงรูปภาพเป็นข้อความ โดยเขียนทีละบรรทัดในพรอมต์คำสั่งโดยพิมพ์ข้อความต่อไปนี้

$ tesseract image_path stdout

ในการเขียนข้อความเอาต์พุตในไฟล์:

$ tesseract image_path text_result.txt

หากต้องการระบุชื่อรุ่นภาษา ให้เขียนทางลัดภาษาหลัง -l ธง โดยค่าเริ่มต้น จะใช้ภาษาอังกฤษ:

$ tesseract image_path text_result.txt -l eng

โดยค่าเริ่มต้น Tesseract ต้องการหน้าข้อความเมื่อแบ่งส่วนรูปภาพ หากคุณต้องการใช้ OCR ในพื้นที่เล็กๆ ลองใช้โหมดการแบ่งกลุ่มแบบอื่นโดยใช้ปุ่ม – พีเอสเอ็ม ข้อโต้แย้ง. มี 14 โหมดที่สามารถพบได้ โปรดคลิกที่นี่เพื่ออ่านรายละเอียดเพิ่มเติม. โดยค่าเริ่มต้น Tesseract จะทำการแบ่งส่วนหน้าโดยอัตโนมัติโดยสมบูรณ์ แต่ไม่ได้ทำการวางแนวและการตรวจจับสคริปต์ เมื่อต้องการระบุพารามิเตอร์ ให้พิมพ์ดังต่อไปนี้:

$ tesseract image_path text_result.txt -l eng --psm 6

นอกจากนี้ยังมีข้อโต้แย้งที่สำคัญอีกประการหนึ่งคือ โหมดเครื่องยนต์ OCR (oem) Tesseract 4 มีเอ็นจิ้น OCR สองตัว — เอ็นจิ้น Tesseract รุ่นเก่าและเอ็นจิ้น LSTM มีโหมดการทำงานสี่โหมดที่เลือกโดยใช้ตัวเลือก –oem
0 เครื่องยนต์รุ่นเก่าเท่านั้น
1 เครื่องยนต์ Neural nets LSTM เท่านั้น
2 เครื่องยนต์ Legacy + LSTM
3 ค่าเริ่มต้น ขึ้นอยู่กับสิ่งที่มีอยู่

วิธี OCR ด้วย Tesseract, OpenCV และ Python
ผลลัพธ์ของเครื่องยนต์ Tesseract OCR

OCR พร้อม Pytesseract และ OpenCV

Pytesseract เป็นเครื่องห่อหุ้มสำหรับ Tesseract-OCR Engine นอกจากนี้ยังมีประโยชน์ในฐานะสคริปต์การเรียกใช้แบบสแตนด์อโลนสำหรับ tesseract เนื่องจากสามารถอ่านรูปภาพทุกประเภทที่รองรับโดยไลบรารีภาพ Pillow และ Leptonica รวมถึง jpeg, png, gif, bmp, tiff และอื่นๆ ข้อมูลเพิ่มเติมเกี่ยวกับวิธี Python อ่าน โปรดคลิกที่นี่เพื่ออ่านรายละเอียดเพิ่มเติม. รหัสสำหรับบทช่วยสอนนี้สามารถพบได้ในสิ่งนี้ กรุ.

import cv2 import pytesseract img = cv2.imread('image.jpg') # Adding custom options
custom_config = r'--oem 3 --psm 6'
pytesseract.image_to_string(img, config=custom_config)

การประมวลผลล่วงหน้าสำหรับ Tesseract

เพื่อหลีกเลี่ยงไม่ให้ความแม่นยำของเอาต์พุต tesseract ของคุณลดลง คุณต้องแน่ใจว่ารูปภาพนั้นเหมาะสม ก่อนการประมวลผล.

ซึ่งรวมถึงการปรับขนาด ไบนารี การกำจัดเสียงรบกวน โต๊ะทำงาน ฯลฯ

ในการประมวลผลภาพล่วงหน้าสำหรับ OCR ให้ใช้ฟังก์ชัน python ต่อไปนี้หรือทำตาม เอกสาร OpenCV.

import cv2
import numpy as np img = cv2.imread('image.jpg') # get grayscale image
def get_grayscale(image): return cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) # noise removal
def remove_noise(image): return cv2.medianBlur(image,5) #thresholding
def thresholding(image): return cv2.threshold(image, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)[1] #dilation
def dilate(image): kernel = np.ones((5,5),np.uint8) return cv2.dilate(image, kernel, iterations = 1) #erosion
def erode(image): kernel = np.ones((5,5),np.uint8) return cv2.erode(image, kernel, iterations = 1) #opening - erosion followed by dilation
def opening(image): kernel = np.ones((5,5),np.uint8) return cv2.morphologyEx(image, cv2.MORPH_OPEN, kernel) #canny edge detection
def canny(image): return cv2.Canny(image, 100, 200) #skew correction
def deskew(image): coords = np.column_stack(np.where(image > 0)) angle = cv2.minAreaRect(coords)[-1] if angle < -45: angle = -(90 + angle) else: angle = -angle (h, w) = image.shape[:2] center = (w // 2, h // 2) M = cv2.getRotationMatrix2D(center, angle, 1.0) rotated = cv2.warpAffine(image, M, (w, h), flags=cv2.INTER_CUBIC, borderMode=cv2.BORDER_REPLICATE) return rotated #template matching
def match_template(image, template): return cv2.matchTemplate(image, template, cv2.TM_CCOEFF_NORMED) 

มาดูตัวอย่างกันเลยดีกว่า นี่คือสิ่งที่ภาพต้นฉบับของเราดูเหมือน -

วิธี OCR ด้วย Tesseract, OpenCV และ Python
ระบบการเขียน Aurebesh

หลังจากประมวลผลล่วงหน้าด้วยรหัสต่อไปนี้

image = cv2.imread('aurebesh.jpg') gray = get_grayscale(image)
thresh = thresholding(gray)
opening = opening(gray)
canny = canny(gray)

และการจัดพล็อตภาพที่ได้ เราจะได้ผลลัพธ์ดังต่อไปนี้

วิธี OCR ด้วย Tesseract, OpenCV และ Python
ภาพหลังการประมวลผลล่วงหน้า

ผลลัพธ์ของภาพต้นฉบับมีลักษณะดังนี้ –

GALACTIC BASIC
(AUREBESH) RE HFVMEVEIiZwoyv Ze
ABC DE F GH I JK LM
N—0- PQ RST Uv WX
2 | Ff 8 G& Pf fF § 5 op 7
ee
5, jf FF Ty ee ee
=
334 477 OED

นี่คือลักษณะที่ผลลัพธ์สำหรับรูปภาพที่ประมวลผลล่วงหน้าต่างกัน –

ภาพขอบคมกริบ (ไม่ค่อยดี)-

CAE Cn Cae AS
(AUREBESE) EA Na
oe SS
(Ne CI (ENE
a, ee oe ea
2
a a A: rc
|, |
a
Sear eo/e ecm emclomt Cia cuoomct mi im

ภาพเกณฑ์ –

GALACTIC BASIC
(AVREBESH)
RS 7FVMeEVEi1iFf o£
A B C D EF GH IJ K LM
AOoder7Nnvroroava
N O P Q@R S$ TU VW XK Y¥ Z
7 ee For 8 Ro Pf F Boao om #
0 12 3 4 5 6 7 8 9 , . !
>» 1kr7 @ by FEN
2? S$ ( Por Foy of ee
ASGSANDIE
CH AE EO KH NG OO SH TH

เปิดภาพ –

GALACTIC BASIC
(AUREZEBELSH)
KEE VTMEUOU EB iw oN es
A BC D EF F @ H | J K LT Ww
AOGdrcrT7WTt HYOAVa4
WO P Q R BS T U VW WK y Z
i J
Oo 1 2 3 46 8 7 SC Ps,
VY ir- -rp,ptUuY?
a a a
AGoOAnNnoOID
CH AE BO KH ®@ OO SH TH


รับกล่องรอบข้อความ

เมื่อใช้ Pytesseract คุณจะได้รับข้อมูลขอบเขตสำหรับผลลัพธ์ OCR ของคุณโดยใช้สิ่งต่อไปนี้ รหัส.

สคริปต์ด้านล่างจะให้ข้อมูลกล่องขอบเขตสำหรับอักขระแต่ละตัวที่ตรวจพบโดย tesseract ระหว่าง OCR

import cv2
import pytesseract img = cv2.imread('image.jpg') h, w, c = img.shape
boxes = pytesseract.image_to_boxes(img) for b in boxes.splitlines(): b = b.split(' ') img = cv2.rectangle(img, (int(b[1]), h - int(b[2])), (int(b[3]), h - int(b[4])), (0, 255, 0), 2) cv2.imshow('img', img)
cv2.waitKey(0)

หากคุณต้องการให้กล่องล้อมรอบคำแทนตัวอักษร ฟังก์ชัน image_to_data จะมีประโยชน์ คุณสามารถใช้ image_to_data ฟังก์ชันที่มีประเภทเอาต์พุตที่ระบุด้วย pytesseract Output.

วิธี OCR ด้วย Tesseract, OpenCV และ Python

มีปัญหา OCR ในใจหรือไม่? ต้องการแปลงใบแจ้งหนี้ PDF หรือป้ายทะเบียนเป็นดิจิทัลหรือไม่ ตรงไปที่ นาโนเน็ต และสร้างโมเดล OCR ฟรี!


เราจะใช้ภาพใบแจ้งหนี้ตัวอย่างด้านบนเพื่อทดสอบผลลัพธ์ tesseract ของเรา

import cv2
import pytesseract
from pytesseract import Output img = cv2.imread('invoice-sample.jpg') d = pytesseract.image_to_data(img, output_type=Output.DICT)
print(d.keys())

สิ่งนี้ควรให้ผลลัพธ์ต่อไปนี้แก่คุณ -
dict_keys(['level', 'page_num', 'block_num', 'par_num', 'line_num', 'word_num', 'left', 'top', 'width', 'height', 'conf', 'text'])

เมื่อใช้พจนานุกรมนี้ เราสามารถตรวจจับแต่ละคำได้ ข้อมูลกรอบล้อมรอบ ข้อความในคำ และคะแนนความมั่นใจของแต่ละคำ

คุณสามารถลงจุดกล่องโดยใช้รหัสด้านล่าง -

n_boxes = len(d['text'])
for i in range(n_boxes): if int(d['conf'][i]) > 60: (x, y, w, h) = (d['left'][i], d['top'][i], d['width'][i], d['height'][i]) img = cv2.rectangle(img, (x, y), (x + w, y + h), (0, 255, 0), 2) cv2.imshow('img', img)
cv2.waitKey(0)

นี่คือสิ่งที่จะดูเหมือนสำหรับภาพของใบแจ้งหนี้ตัวอย่าง

วิธี OCR ด้วย Tesseract, OpenCV และ Python


การจับคู่เทมเพลตข้อความ

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

import re
import cv2
import pytesseract
from pytesseract import Output img = cv2.imread('invoice-sample.jpg')
d = pytesseract.image_to_data(img, output_type=Output.DICT)
keys = list(d.keys()) date_pattern = '^(0[1-9]|[12][0-9]|3[01])/(0[1-9]|1[012])/(19|20)dd$' n_boxes = len(d['text'])
for i in range(n_boxes): if int(d['conf'][i]) > 60: if re.match(date_pattern, d['text'][i]): (x, y, w, h) = (d['left'][i], d['top'][i], d['width'][i], d['height'][i]) img = cv2.rectangle(img, (x, y), (x + w, y + h), (0, 255, 0), 2) cv2.imshow('img', img)
cv2.waitKey(0)

ตามที่คาดไว้ เราได้รับหนึ่งกล่องรอบวันที่ในใบแจ้งหนี้ในภาพ

วิธี OCR ด้วย Tesseract, OpenCV และ Python

โหมดการแบ่งหน้า

มีหลายวิธีที่สามารถวิเคราะห์หน้าข้อความได้ tesseract api มีโหมดการแบ่งส่วนหน้าหลายโหมด หากคุณต้องการเรียกใช้ OCR เฉพาะในพื้นที่ขนาดเล็กหรือในแนวที่ต่างกัน เป็นต้น

นี่คือรายการของโหมดการแบ่งส่วนหน้าที่รองรับโดย tesseract –

0 การวางแนวและการตรวจจับสคริปต์ (OSD) เท่านั้น
1 การแบ่งส่วนหน้าอัตโนมัติด้วย OSD
2 การแบ่งส่วนหน้าอัตโนมัติ แต่ไม่มี OSD หรือ OCR
3 การแบ่งส่วนหน้าอัตโนมัติอย่างสมบูรณ์ แต่ไม่มี OSD (ค่าเริ่มต้น)
4 สมมติคอลัมน์เดียวของข้อความที่มีขนาดตัวแปร
5 สมมติว่าข้อความในแนวตั้งเรียงกันเป็นชุดเดียว
6 สมมติข้อความชุดเดียว
7 ปฏิบัติต่อรูปภาพเป็นบรรทัดข้อความเดียว
8 ปฏิบัติต่อรูปภาพเป็นคำเดียว
9 ปฏิบัติต่อรูปภาพเป็นคำเดียวในวงกลม
10 ปฏิบัติต่อรูปภาพเป็นอักขระตัวเดียว
11 ข้อความกระจัดกระจาย ค้นหาข้อความให้มากที่สุดเท่าที่เป็นไปได้ในลำดับใดโดยเฉพาะ
12 ข้อความกระจัดกระจายพร้อม OSD
13 เส้นดิบ. ใช้รูปภาพเป็นบรรทัดข้อความเดียว ข้ามการแฮ็กเฉพาะ Tesseract

หากต้องการเปลี่ยนโหมดการแบ่งส่วนหน้า ให้เปลี่ยน --psm อาร์กิวเมนต์ในสตริงการกำหนดค่าที่กำหนดเองของคุณไปยังรหัสโหมดที่กล่าวถึงข้างต้น


ตรวจจับการวางแนวและสคริปต์

คุณสามารถตรวจจับการวางแนวของข้อความในภาพและสคริปต์ที่เขียนได้ ภาพต่อไปนี้ -
วิธี OCR ด้วย Tesseract, OpenCV และ Python
หลังจากเรียกใช้ผ่านรหัสต่อไปนี้ -

osd = pytesseract.image_to_osd(img)
angle = re.search('(?<=Rotate: )d+', osd).group(0)
script = re.search('(?<=Script: )d+', osd).group(0)
print("angle: ", angle)
print("script: ", script)

จะพิมพ์ผลลัพธ์ต่อไปนี้

angle: 90
script: Latin

ตรวจจับเฉพาะตัวเลข

ยกตัวอย่างภาพนี้ –
วิธี OCR ด้วย Tesseract, OpenCV และ Python
ข้อความที่ดึงมาจากภาพนี้มีลักษณะเช่นนี้

‘Customer name Hallium Energy services
Project NEHINS-HIB-HSA
lavoice no 43876324
Dated 17%h Nov2018
Pono 76496234

คุณสามารถรับรู้ได้เฉพาะตัวเลขโดยเปลี่ยนการกำหนดค่าดังต่อไปนี้

custom_config = r'--oem 3 --psm 6 outputbase digits'
print(pytesseract.image_to_string(img, config=custom_config))

ผลลัพธ์จะเป็นแบบนี้

-- . 43876324
172018
0 76496234

อักขระที่อนุญาตพิเศษ

สมมติว่าคุณต้องการตรวจจับเฉพาะอักขระบางตัวจากภาพที่กำหนดและไม่ต้องสนใจส่วนที่เหลือ คุณสามารถระบุรายการอักขระที่อนุญาตพิเศษได้ (ในที่นี้ เราได้ใช้อักขระตัวพิมพ์เล็กทั้งหมดตั้งแต่ a ถึง z เท่านั้น) โดยใช้การกำหนดค่าต่อไปนี้

custom_config = r'-c tessedit_char_whitelist=abcdefghijklmnopqrstuvwxyz --psm 6'
print(pytesseract.image_to_string(img, config=custom_config))

เอาต์พุต -

customername
roject
tnvoleeno
ated alliumenergyservices
e
thovo

ตัวละครในบัญชีดำ

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

custom_config = r'-c tessedit_char_blacklist=0123456789 --psm 6'
pytesseract.image_to_string(img, config=custom_config)

เอาต์พุต -

Customer name Hallium Energy services
Project NEHINS-HIB-HSA
lavoice no
Dated %h Nov%
Pono

ตรวจจับได้หลายภาษา

คุณสามารถตรวจสอบภาษาที่มีได้โดยพิมพ์สิ่งนี้ในเทอร์มินัล

$ tesseract --list-langs

ในการดาวน์โหลด tesseract สำหรับภาษาเฉพาะ ให้ใช้

$ sudo apt-get install tesseract-ocr-LANG

โดยที่ LANG คือรหัสสามตัวอักษรสำหรับภาษาที่คุณต้องการ คุณสามารถค้นหาค่า LANG ได้ โปรดคลิกที่นี่เพื่ออ่านรายละเอียดเพิ่มเติม.

คุณสามารถดาวน์โหลด .traindata ไฟล์สำหรับภาษาที่คุณต้องการจาก โปรดคลิกที่นี่เพื่ออ่านรายละเอียดเพิ่มเติม และวางไว้ใน $TESSDATA_PREFIX ไดเร็กทอรี (ควรเหมือนกับที่ tessdata ติดตั้งไดเร็กทอรีแล้ว) และควรพร้อมใช้งาน

หมายเหตุ – เฉพาะภาษาที่มี .traineddata รูปแบบไฟล์ได้รับการสนับสนุนโดย tesseract

ในการระบุภาษาที่คุณต้องการเอาต์พุต OCR ให้ใช้ปุ่ม -l LANG อาร์กิวเมนต์ในการกำหนดค่าโดยที่ LANG คือรหัส 3 ตัวอักษรสำหรับภาษาที่คุณต้องการใช้

custom_config = r'-l eng --psm 6'
pytesseract.image_to_string(img, config=custom_config)

ยกตัวอย่างภาพนี้ –
วิธี OCR ด้วย Tesseract, OpenCV และ Python
คุณสามารถทำงานกับหลายภาษาโดยเปลี่ยนพารามิเตอร์ LANG เช่น –

custom_config = r'-l grc+tha+eng --psm 6'
pytesseract.image_to_string(img, config=custom_config)

และคุณจะได้ผลลัพธ์ต่อไปนี้ -

Here’s some Greek: Οδιο διστα ιμπεδιτ φιμ ει, αδ φελ αβχορρεανθ ελωκυενθιαμ, εξ εσε εξερσι γυ-
βεργρεν ηας. Ατ μει σολετ σριπτορεμ. ἴυς αλια λαβωρε θε. Σιθ κυωτ νυσκυαμ
τρασυνδια αν, ὠμνιυμ ελιγενδι τιν πρι. Παρτεμ φερθερεμ συσιπιαντὺυρ εξ ιυς,ναμ
%0790 แ ร เง ๑ ๕ 80 ๕ 6 ๑ อ 06 ส 0 เง น อ ๓ , πρω πρωπριαε σαεφολα ιδ. Ατ πρι δολορ νυ-
σκυαμ. 6 Thai Here’s some Thai: ν᾿ ค อ ร ั ป ซั น จ ุ ้ ย โป ร ด ิ ว เซ อ ร ์ ส ถา ป ั ต ย ์ จ ๊ า บ แจ ็ ก พ ็ อ ต ม ้ า ห ิ น อ ่ อ น ซา ก ุ ร ะ ค ั น ถ ธ ุ ร ะ ฟิ ด ส ต า ร ์ ท ง ี ้ บ อ ย
ค อ ต อ ื ่ ม แป ร ั ส ั ง โฆ ค ํ า ส า ป แฟ น ซี ศิ ล ป ว ั ฒ น ธร ร ม ไฟ ล ท ์ จ ิ ๊ ก โก ๋ ก ั บ ด ั ก เจ ล พ ล ็ อ ต ม า ม ่ า ซา ก ุ ร ะ ด ี ล เล อ
ร ์ ซี น ด ั ม พ ์ แฮ ป ป ี ้ เอ ๊ ้ า ะ อ ุ ร ั ง ค ธา ต ุ ซิ ม ฟิ น ิ ก ซ์ เท ร ล เล ่ อ ร ์ อ ว อ ร ์ ด แค น ย อ น ส ม า พ ั น ธ์ ค ร ั ว ซอ ง ฮั ม อ า
ข่ า เอ ็ ก ซ์ เพ ร ส

หมายเหตุ – ภาษาที่ระบุก่อนเพื่อ -l พารามิเตอร์เป็นภาษาหลัก

น่าเสียดายที่ tesseract ไม่มีคุณสมบัติในการตรวจหาภาษาของข้อความในรูปภาพโดยอัตโนมัติ โซลูชันอื่นมีให้โดยโมดูล python อื่นที่เรียกว่า langdetect ซึ่งสามารถติดตั้งผ่าน pip

$ pip install langdetect

โมดูลนี้อีกครั้ง ตรวจไม่พบภาษาของข้อความโดยใช้รูปภาพ แต่ต้องการการป้อนสตริงเพื่อตรวจหาภาษาจาก วิธีที่ดีที่สุดในการทำเช่นนี้คือใช้ tesseract เพื่อรับข้อความ OCR ในภาษาใดก็ตามที่คุณรู้สึกว่าอยู่ในนั้น โดยใช้ langdetect เพื่อค้นหาภาษาที่รวมอยู่ในข้อความ OCR แล้วเรียกใช้ OCR อีกครั้งด้วยภาษาที่พบ

สมมติว่าเรามีข้อความที่เราคิดว่าเป็นภาษาอังกฤษและโปรตุเกส

custom_config = r'-l eng+por --psm 6'
txt = pytesseract.image_to_string(img, config=custom_config) from langdetect import detect_langs
detect_langs(txt)

สิ่งนี้ควรแสดงรายการภาษาในข้อความและความน่าจะเป็น

[en:0.714282468983554, es:0.2857145605644145]

รหัสภาษาที่ใช้โดย langdetect ปฏิบัติตามรหัส ISO 639-1 เพื่อเปรียบเทียบ โปรดตรวจสอบ นี้ และ นี้. เราพบว่าภาษาที่ใช้ในข้อความเป็นภาษาอังกฤษและสเปนแทน

เราได้รับข้อความอีกครั้งโดยเปลี่ยนการกำหนดค่าเป็น

custom_config = r'-l eng+spa --psm 6'
txt = pytesseract.image_to_string(img, config=custom_config)

หมายเหตุ – Tesseract ทำงานได้ไม่ดีเมื่อในภาษาที่ระบุในการกำหนดค่าในรูปภาพที่มีหลายภาษาไม่ถูกต้องหรือไม่มีการกล่าวถึงเลย สิ่งนี้อาจทำให้โมดูล langdetect เข้าใจผิดได้ไม่น้อยเช่นกัน


ใช้ tessdata_fast

หากความเร็วเป็นปัญหาหลักสำหรับคุณ คุณสามารถแทนที่โมเดลภาษา tessdata ของคุณด้วยโมเดล tessdata_fast ซึ่งเป็นรุ่นจำนวนเต็ม 8 บิตของโมเดล tessdata

ตาม tessdata_fast GitHub -

ที่เก็บนี้มีรุ่นจำนวนเต็มเร็วของรุ่นที่ได้รับการฝึกอบรมสำหรับ Tesseract โอเพ่นซอร์ส OCR Engine.

โมเดลเหล่านี้ใช้งานได้กับเอ็นจิ้น LSTM OCR ของ Tesseract 4 เท่านั้น

  • สิ่งเหล่านี้เป็นการประนีประนอมด้านความเร็ว/ความแม่นยำในสิ่งที่เสนอ "ความคุ้มค่า" ที่ดีที่สุดในด้านความเร็วและความแม่นยำ
  • สำหรับบางภาษา วิธีนี้ยังคงดีที่สุด แต่สำหรับส่วนใหญ่ไม่
  • การกำหนดค่าเครือข่ายที่ "คุ้มค่าที่สุด" จะถูกรวมเข้าด้วยกันเพื่อเพิ่มความเร็ว
  • ผู้ใช้ส่วนใหญ่จะต้องการใช้ไฟล์ข้อมูลที่ได้รับการฝึกอบรมเหล่านี้เพื่อทำ OCR และไฟล์เหล่านี้จะถูกจัดส่งโดยเป็นส่วนหนึ่งของการแจกจ่าย Linux เช่น อูบุนตู 18.04
  • การปรับละเอียด/การฝึกอบรมที่เพิ่มขึ้นจะ ไม่ เป็นไปได้จากสิ่งเหล่านี้ fast โมเดล เนื่องจากเป็นจำนวนเต็ม 8 บิต
  • เมื่อใช้โมเดลในที่เก็บนี้ รองรับเฉพาะเอ็นจิน OCR ที่ใช้ LSTM ใหม่เท่านั้น มรดก tesseract ไฟล์เหล่านี้ไม่รองรับเอ็นจิ้น ดังนั้นโหมด oem '0' และ '2' ของ Tesseract จึงไม่สามารถใช้งานได้

ในการใช้งาน tessdata_fast รุ่นแทน tessdataสิ่งที่คุณต้องทำคือดาวน์โหลด tessdata_fast ไฟล์ข้อมูลภาษาจาก โปรดคลิกที่นี่เพื่ออ่านรายละเอียดเพิ่มเติม และวางไว้ใน .ของคุณ $TESSDATA_PREFIX ไดเรกทอรี


ต้องการแปลงเอกสาร ใบเสร็จ หรือใบแจ้งหนี้ แต่ขี้เกียจเกินไปที่จะเขียนโค้ดใช่หรือไม่ ตรงไปที่ นาโนเน็ต และสร้างโมเดล OCR ฟรี!


การฝึกอบรม Tesseract เกี่ยวกับข้อมูลที่กำหนดเอง

Tesseract 4.00 มีเอ็นจิ้นการรู้จำแบบเครือข่ายประสาทใหม่ที่มอบความแม่นยำที่สูงขึ้นอย่างมากบนภาพเอกสาร โครงข่ายประสาทเทียมต้องการข้อมูลการฝึกอบรมมากกว่ามากและฝึกช้ากว่า Tesseract พื้นฐานมาก สำหรับภาษาละติน ข้อมูลแบบจำลองที่มีอยู่ได้รับการฝึกอบรมเกี่ยวกับข้อความประมาณ 400000 บรรทัดซึ่งครอบคลุมแบบอักษรประมาณ 4500 แบบ

เพื่อให้รันบทช่วยสอนการฝึกอบรม Tesseract 4.0 LSTM ได้สำเร็จ คุณต้องมีการติดตั้ง Tesseract 4 และ Tesseract 4 Training Tools และต้องมีสคริปต์การฝึกอบรมและไฟล์ข้อมูลที่ได้รับการฝึกอบรมในบางไดเรกทอรี เยี่ยม repo github สำหรับไฟล์และเครื่องมือต่างๆ

Tesseract 4.00 ใช้เวลาสองสามวันถึงสองสามสัปดาห์ในการฝึกตั้งแต่เริ่มต้น แม้จะมีข้อมูลการฝึกอบรมใหม่ทั้งหมด ดังนั้นนี่คือตัวเลือกบางส่วนสำหรับการฝึกอบรม:

  • ปรับแต่ง – เริ่มต้นด้วยภาษาที่ได้รับการฝึกอบรมที่มีอยู่ ฝึกฝนข้อมูลเพิ่มเติมเฉพาะของคุณ ตัวอย่างเช่น การฝึกอบรมเกี่ยวกับชุดข้อมูลที่เขียนด้วยลายมือและแบบอักษรเพิ่มเติมบางส่วน
  • ตัดชั้นบนสุด – จากเครือข่ายและฝึกชั้นบนสุดใหม่โดยใช้ข้อมูลใหม่ หากการปรับจูนแบบละเอียดไม่ได้ผล นี่อาจเป็นตัวเลือกที่ดีที่สุดลำดับถัดไป การเปรียบเทียบว่าเหตุใดจึงมีประโยชน์ ให้ลองใช้โมเดลอินสแตนซ์ที่ฝึกบนชุดข้อมูล ImageNet เป้าหมายคือสร้างตัวแยกประเภทแมวหรือสุนัข ชั้นล่างในแบบจำลองดีที่นามธรรมระดับต่ำเป็นมุม เส้นแนวนอน และแนวตั้ง แต่ชั้นสูงในแบบจำลองจะรวมคุณลักษณะเหล่านั้นและตรวจจับหู ตา จมูกของแมวหรือสุนัข และอื่นๆ การฝึกซ้ำเฉพาะชั้นบนสุด คุณกำลังใช้ความรู้จากชั้นล่างและรวมกับชุดข้อมูลใหม่ที่แตกต่างกัน
  • ฝึกใหม่ตั้งแต่เริ่มต้น – นี่เป็นแนวทางที่ช้ามาก เว้นแต่คุณจะมีตัวแทนและการฝึกอบรมจำนวนมากเพียงพอสำหรับปัญหาของคุณ แหล่งข้อมูลที่ดีที่สุดสำหรับการฝึกอบรมตั้งแต่เริ่มต้นคือทำตามนี้ repo github.

คำแนะนำเกี่ยวกับวิธีการฝึกอบรมเกี่ยวกับข้อมูลที่คุณกำหนดเองและสร้าง .traineddata สามารถหาไฟล์ได้ โปรดคลิกที่นี่เพื่ออ่านรายละเอียดเพิ่มเติม, โปรดคลิกที่นี่เพื่ออ่านรายละเอียดเพิ่มเติม และ โปรดคลิกที่นี่เพื่ออ่านรายละเอียดเพิ่มเติม.

เราจะไม่กล่าวถึงรหัสสำหรับการฝึกอบรมโดยใช้ Tesseract ในบล็อกโพสต์นี้

วิธี OCR ด้วย Tesseract, OpenCV และ Python

ข้อจำกัดของ Tesseract

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

ข้อจำกัด Tesseract รวมอยู่ในรายการ

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


แน่นอนว่ามีวิธีการทำงาน OCR ที่ดีกว่า ง่ายกว่า และใช้งานง่ายกว่ามาก


OCR กับ Nanonets

วิธี OCR ด้วย Tesseract, OpenCV และ Python

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

คุณสามารถอัปโหลดข้อมูล ใส่คำอธิบายประกอบ ตั้งค่าโมเดลเพื่อฝึกและรอรับการคาดคะเนผ่าน UI ที่ใช้เบราว์เซอร์โดยไม่ต้องเขียนโค้ดแม้แต่บรรทัดเดียว กังวลเกี่ยวกับ GPU หรือค้นหาสถาปัตยกรรมที่เหมาะสมสำหรับโมเดลการเรียนรู้เชิงลึกของคุณ คุณยังสามารถรับการตอบสนอง JSON ของการคาดคะเนแต่ละรายการเพื่อรวมเข้ากับระบบของคุณเอง และสร้างแอปที่ขับเคลื่อนด้วยการเรียนรู้ของเครื่อง ซึ่งสร้างจากอัลกอริธึมล้ำสมัยและโครงสร้างพื้นฐานที่แข็งแกร่ง

การใช้ GUI: https://app.nanonets.com/

คุณยังสามารถใช้ Nanonets-OCR API โดยทำตามขั้นตอนด้านล่าง:‌

ขั้นตอนที่ 1: โคลน Repo ติดตั้งการพึ่งพา

git clone https://github.com/NanoNets/nanonets-ocr-sample-python.git
cd nanonets-ocr-sample-python
sudo pip install requests tqdm

ขั้นตอนที่ 2: รับรหัส API ฟรีของคุณ
รับคีย์ API ฟรีจาก http://app.nanonets.com/#/keys

วิธี OCR ด้วย Tesseract, OpenCV และ Python

ขั้นตอนที่ 3: ตั้งค่าคีย์ API เป็นตัวแปรสภาพแวดล้อม

export NANONETS_API_KEY=YOUR_API_KEY_GOES_HERE

ขั้นตอนที่ 4: สร้างโมเดลใหม่

python ./code/create-model.py

หมายเหตุ สิ่งนี้จะสร้าง MODEL_ID ที่คุณต้องการสำหรับขั้นตอนต่อไป

ขั้นตอนที่ 5: เพิ่มรหัสรุ่นเป็นตัวแปรสภาพแวดล้อม

export NANONETS_MODEL_ID=YOUR_MODEL_ID

หมายเหตุ คุณจะได้รับ YOUR_MODEL_ID จากขั้นตอนก่อนหน้า

ขั้นตอนที่ 6: อัปโหลดข้อมูลการฝึกอบรม
ข้อมูลการฝึกอบรมอยู่ใน images (ไฟล์รูปภาพ) และ annotations (คำอธิบายประกอบสำหรับไฟล์รูปภาพ)

python ./code/upload-training.py

ขั้นตอนที่ 7: โมเดลรถไฟ
เมื่ออัปโหลดรูปภาพแล้ว ให้เริ่มฝึก Model

python ./code/train-model.py

ขั้นตอนที่ 8: รับสถานะโมเดล
โมเดลใช้เวลาฝึกประมาณ 2 ชั่วโมง คุณจะได้รับอีเมลเมื่อโมเดลได้รับการฝึกอบรม ในระหว่างนี้คุณตรวจสอบสถานะของโมเดล

python ./code/model-state.py

ขั้นตอนที่ 9: ทำการทำนาย
เมื่อนางแบบได้รับการฝึกฝน คุณสามารถทำนายโดยใช้แบบจำลอง

python ./code/prediction.py ./images/151.jpg


นาโนเน็ตและมนุษย์ในวงจร

‌‌หน้าจอ "ปานกลาง" ช่วยในกระบวนการแก้ไขและป้อนข้อมูล และลดภาระงานของผู้ตรวจสอบด้วยตนเองได้เกือบ 90% และลดต้นทุนลง 50% สำหรับองค์กร

วิธี OCR ด้วย Tesseract, OpenCV และ Python

รวมถึง

  1. ติดตามการคาดการณ์ที่ถูกต้อง
  2. ติดตามว่าอันไหนผิด
  3. แก้ไขให้ถูกต้อง
  4. ลบอันที่ผิด
  5. กรอกคำทำนายที่หายไป
  6. กรองภาพด้วยช่วงวันที่
  7. รับจำนวนภาพที่กลั่นกรองเทียบกับภาพที่ไม่ได้รับการตรวจสอบ

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


มีปัญหา OCR ในใจหรือไม่? ต้องการลดต้นทุนการป้อนข้อมูลขององค์กรของคุณหรือไม่? ตรงไปที่ นาโนเน็ต และสร้างแบบจำลอง OCR เพื่อ ดึงข้อความจากภาพ or ดึงข้อมูลจาก PDFs!


สรุป

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

Tesseract ทำงานได้ดีเมื่อภาพเอกสารปฏิบัติตามแนวทางต่อไปนี้:

  • ทำความสะอาดการแบ่งส่วนข้อความเบื้องหน้าจากพื้นหลัง
  • จัดแนวในแนวนอนและปรับขนาดอย่างเหมาะสม
  • ภาพคุณภาพสูงไม่มีความพร่ามัวและสัญญาณรบกวน

Tesseract 4.0 รุ่นล่าสุดรองรับ OCR แบบ Deep Learning ซึ่งแม่นยำกว่าอย่างเห็นได้ชัด เอ็นจิ้น OCR นั้นสร้างขึ้นบนเครือข่าย Long Short-Term Memory (LSTM) ซึ่งเป็นเครือข่ายประสาทที่เกิดซ้ำ (RNN)

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


อ่านเพิ่มเติม

ปรับปรุง:
หลายคนถามเราว่าพวกเขาจะได้รับวันที่ในรูปแบบข้อความหรือใช้เมื่อตรวจพบวันที่หรือข้อมูลเฉพาะอื่น ๆ เพื่อให้สามารถผนวกเข้ากับรายการได้
นี่คือคำตอบ:
ในโค้ดสำหรับวาดกรอบล้อมรอบช่องวันที่ คุณจะสังเกตเห็นเส้นที่ตรงกับรูปแบบ regex ด้วย d['text']. มันจะดึงกล่องออกมาก็ต่อเมื่อลวดลายตรงกันเท่านั้น คุณสามารถดึงค่าจาก d['text'] เมื่อรูปแบบตรงกันและผนวกเข้ากับรายการ

2 ปรับปรุง:
เพื่อตอบคำถามเกี่ยวกับ OCR ที่ไม่ใช่ภาษาอังกฤษ เราได้อัปเดตรายการอ่านเพิ่มเติม

ประทับเวลา:

เพิ่มเติมจาก AI และการเรียนรู้ของเครื่อง