ความฉลาดทางข้อมูลเชิงกำเนิด

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

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


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


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

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

การเปรียบเทียบแนวโน้มของ 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 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 สำหรับการคำนวณเชิงตัวเลข

กระบวนการ Tesseract 3 OCR จาก กระดาษ

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

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

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

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

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 ค่าเริ่มต้น ขึ้นอยู่กับสิ่งที่มีอยู่

ผลลัพธ์ของเครื่องยนต์ Tesseract OCR

OCR พร้อม Pytesseract และ OpenCV

Pytesseract หรือ Python-tesseract เป็นเครื่องมือ OCR สำหรับ python ที่ทำหน้าที่เป็น wrapper สำหรับ Tesseract-OCR Engine สามารถอ่านและจดจำข้อความในรูปภาพและมักใช้ใน python ocr image กับกรณีการใช้ข้อความ

นอกจากนี้ยังมีประโยชน์ในฐานะสคริปต์การเรียกใช้แบบสแตนด์อโลนสำหรับ 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) 

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

ระบบการเขียน Aurebesh

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

image = cv2.imread('aurebesh.jpg')

gray = get_grayscale(image)
thresh = thresholding(gray)
opening = opening(gray)
canny = canny(gray)

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

ภาพหลังการประมวลผลล่วงหน้า

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

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 ในใจหรือไม่? ต้องการแปลงใบแจ้งหนี้ 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 เพื่อค้นหากรอบขอบเขตที่เหมาะสม เราจะใช้ 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)

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


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

มีหลายวิธีที่สามารถวิเคราะห์หน้าข้อความได้ 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 อาร์กิวเมนต์ในสตริงการกำหนดค่าที่กำหนดเองของคุณไปยังรหัสโหมดที่กล่าวถึงข้างต้น


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

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

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

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

ยกตัวอย่างภาพนี้ –
ภาพ
ข้อความที่ดึงมาจากภาพนี้มีลักษณะเช่นนี้

‘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)

ยกตัวอย่างภาพนี้ –
ภาพ
คุณสามารถทำงานกับหลายภาษาโดยเปลี่ยนพารามิเตอร์ 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 ในบล็อกโพสต์นี้

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

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

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

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

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


OCR กับ Nanonets

พื้นที่ นาโนเน็ต 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 ฟรีจาก https://app.nanonets.com/#/keys

ป้ายทะเบียน-ตรวจจับ-gif

ขั้นตอนที่ 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% สำหรับองค์กร

รวมถึง

  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 ที่ไม่ใช่ภาษาอังกฤษ เราได้อัปเดตรายการอ่านเพิ่มเติม

จุด_img

ข่าวกรองล่าสุด

จุด_img

แชทกับเรา

สวัสดี! ฉันจะช่วยคุณได้อย่างไร?