ในบล็อกโพสต์นี้ เราจะพยายามอธิบายเทคโนโลยีที่อยู่เบื้องหลัง 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
โอซีโรปัส – 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 เข้ากันได้กับภาษาการเขียนโปรแกรมและเฟรมเวิร์กมากมายผ่านตัวตัดทอนที่สามารถพบได้ โปรดคลิกที่นี่เพื่ออ่านรายละเอียดเพิ่มเติม. สามารถใช้กับการวิเคราะห์เค้าโครงที่มีอยู่เพื่อจดจำข้อความภายในเอกสารขนาดใหญ่ หรือใช้ร่วมกับตัวตรวจจับข้อความภายนอกเพื่อจดจำข้อความจากรูปภาพของบรรทัดข้อความเดียว
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 สำหรับการคำนวณเชิงตัวเลข
Legacy Tesseract 3.x ขึ้นอยู่กับกระบวนการแบบหลายขั้นตอน ซึ่งเราสามารถแยกความแตกต่างของขั้นตอนได้:
- ค้นหาคำ
- ค้นหาสาย
- การจำแนกตัวละคร
การค้นหาคำทำได้โดยการจัดบรรทัดข้อความให้เป็นกลุ่ม และเส้นและขอบเขตจะได้รับการวิเคราะห์เพื่อหาระดับเสียงคงที่หรือข้อความตามสัดส่วน บรรทัดข้อความแบ่งออกเป็นคำต่างๆ ตามประเภทของการเว้นวรรคระหว่างอักขระ การรับรู้จะดำเนินการเป็นกระบวนการสองรอบ ในรอบแรก จะมีการพยายามจดจำแต่ละคำตามลำดับ แต่ละคำที่น่าพอใจจะถูกส่งไปยังตัวแยกประเภทแบบปรับได้เป็นข้อมูลการฝึกอบรม ตัวแยกประเภทแบบปรับได้จะได้รับโอกาสในการจดจำข้อความที่อยู่ด้านล่างของหน้าได้แม่นยำยิ่งขึ้น
ความทันสมัยของเครื่องมือ Tesseract คือความพยายามในการทำความสะอาดโค้ดและเพิ่มโมเดล LSTM ใหม่ ภาพอินพุตถูกประมวลผลในกล่อง (สี่เหลี่ยมผืนผ้า) ทีละบรรทัดโดยป้อนบรรทัดลงในโมเดล 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 พร้อม 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)
มาดูตัวอย่างกันเลยดีกว่า นี่คือสิ่งที่ภาพต้นฉบับของเราดูเหมือน -
หลังจากประมวลผลล่วงหน้าด้วยรหัสต่อไปนี้
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
ขั้นตอนที่ 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% สำหรับองค์กร
รวมถึง
- ติดตามการคาดการณ์ที่ถูกต้อง
- ติดตามว่าอันไหนผิด
- แก้ไขให้ถูกต้อง
- ลบอันที่ผิด
- กรอกคำทำนายที่หายไป
- กรองภาพด้วยช่วงวันที่
- รับจำนวนภาพที่กลั่นกรองเทียบกับภาพที่ไม่ได้รับการตรวจสอบ
ฟิลด์ทั้งหมดมีโครงสร้างเป็น 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 ที่ไม่ใช่ภาษาอังกฤษ เราได้อัปเดตรายการอ่านเพิ่มเติม