ในบล็อกโพสต์นี้ เราจะพยายามอธิบายเทคโนโลยีที่อยู่เบื้องหลัง Tesseract Engine ที่ใช้มากที่สุด ซึ่งได้รับการอัปเกรดด้วยความรู้ล่าสุดที่ค้นคว้าเกี่ยวกับการรู้จำอักขระด้วยแสง บทความนี้ยังใช้เป็นแนวทาง/บทช่วยสอนเกี่ยวกับวิธีการนำ OCR ไปใช้ใน python โดยใช้เอ็นจิ้น Tesseract เราจะดำเนินการตามโมดูลต่อไปนี้:
- คุณสมบัติ Tesseract OCR
- การประมวลผลล่วงหน้าสำหรับ OCR โดยใช้ OpenCV
- ใช้งาน Tesseract ด้วย CLI และ Python
- ข้อจำกัดของเครื่องยนต์ Tesseract
สารบัญ
- บทนำ
- เครื่องมือ OCR โอเพ่นซอร์ส
- Tesseract OCR
- OCR พร้อม Pytesseract และ OpenCV
- การฝึกอบรม Tesseract เกี่ยวกับข้อมูลที่กำหนดเอง
- ข้อจำกัดของ Tesseract
- OCR กับ Nanonets
- สรุป
บทนำ
โอซีอาร์ = Optical Character ยอมรับ. กล่าวอีกนัยหนึ่ง ระบบ OCR จะเปลี่ยนรูปภาพข้อความสองมิติ ซึ่งอาจประกอบด้วยข้อความที่พิมพ์ด้วยเครื่องหรือเขียนด้วยลายมือจากการแสดงรูปภาพเป็นข้อความที่เครื่องอ่านได้ OCR เป็นกระบวนการโดยทั่วไปประกอบด้วยหลายกระบวนการย่อยเพื่อดำเนินการอย่างถูกต้องที่สุด กระบวนการย่อยคือ:
- การประมวลผลภาพล่วงหน้า
- การแปลข้อความ
- การแบ่งส่วนอักขระ
- การจดจำตัวละคร
- โพสต์การประมวลผล
แน่นอนว่ากระบวนการย่อยในรายการด้านบนอาจแตกต่างกัน แต่นี่เป็นขั้นตอนคร่าวๆ ที่จำเป็นในการเข้าถึงการจดจำอักขระอัตโนมัติ ในซอฟต์แวร์ OCR มีจุดมุ่งหมายหลักในการระบุและจับคำที่ไม่ซ้ำกันทั้งหมดโดยใช้ภาษาที่แตกต่างจากตัวอักษรที่เป็นลายลักษณ์อักษร
เป็นเวลาเกือบสองทศวรรษแล้วที่ระบบการรู้จำอักขระด้วยแสงได้ถูกนำมาใช้กันอย่างแพร่หลายเพื่อป้อนข้อความอัตโนมัติลงในระบบคอมพิวเตอร์ ตลอดเวลานี้ ระบบ OCR ทั่วไป (เช่น โซนOCR) ไม่เคยเอาชนะการที่พวกเขาไม่สามารถอ่านแบบอักษรและรูปแบบหน้าเว็บได้ แบบเว้นระยะห่างตามสัดส่วน (ซึ่งรวมถึงสำเนาแทบทุกชุด) แบบอักษรเครื่องพิมพ์เลเซอร์ และแม้กระทั่งแบบอักษรเครื่องพิมพ์ดีดที่ไม่เป็นสัดส่วนจำนวนมาก ยังคงอยู่เกินเอื้อมของระบบเหล่านี้ และด้วยเหตุนี้ OCR แบบเดิมจึงไม่เคยประสบความสำเร็จมากไปกว่าผลกระทบเพียงเล็กน้อยต่อจำนวนเอกสารทั้งหมดที่ต้องแปลงเป็นรูปแบบดิจิทัล
เอ็นจิ้น 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
โอซีโรปัส – 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 เป็นเครื่องห่อหุ้มสำหรับ 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)
มาดูตัวอย่างกันเลยดีกว่า นี่คือสิ่งที่ภาพต้นฉบับของเราดูเหมือน -
หลังจากประมวลผลล่วงหน้าด้วยรหัสต่อไปนี้
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 ฟรีจาก http://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 เป็นเครื่องมือที่ใช้งานได้จริง หากงานของคุณคือการสแกนหนังสือ เอกสาร และข้อความที่พิมพ์บนพื้นหลังสีขาวสะอาดตา
อ่านเพิ่มเติม
- โมเดลที่ได้รับการฝึกฝนที่ดีที่สุดสำหรับ LSTM Tesseract 4.0
- Dropbox เข้าใกล้ OCR 4.2017
- ภาพรวมของ Tesseract OCR Engine Legacy
- ฟอรัมสำหรับนักพัฒนา Tesseract
- ฟอรั่มสำหรับผู้ใช้ Tesseract
- การเปรียบเทียบความแม่นยำของ OCR ในหนังสือที่พิมพ์ก่อนกำหนดโดยใช้
โอเพ่นซอร์สเอ็นจิ้น Calamari และ OCRopus - OCR ที่มีประสิทธิภาพและปราศจากพจนานุกรมโดยใช้ Deep Learning
- ความเหมาะสมของเอ็นจิ้น OCR ในระบบสกัดข้อมูล – การประเมินเปรียบเทียบ
- เกณฑ์มาตรฐาน DeepText
- รายชื่อโครงการ OCR
- Tesseract Github รุ่นล่าสุด
- CVPR 2019 – การรับรู้พื้นที่อักขระสำหรับการตรวจจับข้อความ (CRAFT)
- บัตรเครดิต OCR พร้อม OpenCV และ Python
- การประมวลผลภาพล่วงหน้า
- การประมวลผลภาพล่วงหน้าใน OpenCV
- OCR โดยใช้ Tesseract บน Raspberry Pi
- Tesseract OCR สำหรับภาษาที่ไม่ใช่ภาษาอังกฤษ
- วิธีทำ OCR จากบรรทัดคำสั่ง Linux โดยใช้ Tesseract
- ภาพรวมของ Tesseract OCR Engine
ปรับปรุง:
หลายคนถามเราว่าพวกเขาจะได้รับวันที่ในรูปแบบข้อความหรือใช้เมื่อตรวจพบวันที่หรือข้อมูลเฉพาะอื่น ๆ เพื่อให้สามารถผนวกเข้ากับรายการได้
นี่คือคำตอบ:
ในโค้ดสำหรับวาดกรอบล้อมรอบช่องวันที่ คุณจะสังเกตเห็นเส้นที่ตรงกับรูปแบบ regex ด้วยd['text']
. มันจะดึงกล่องออกมาก็ต่อเมื่อลวดลายตรงกันเท่านั้น คุณสามารถดึงค่าจากd['text']
เมื่อรูปแบบตรงกันและผนวกเข้ากับรายการ
2 ปรับปรุง:
เพื่อตอบคำถามเกี่ยวกับ OCR ที่ไม่ใช่ภาษาอังกฤษ เราได้อัปเดตรายการอ่านเพิ่มเติม
- 100
- 2019
- 7
- 9
- เกี่ยวกับเรา
- ตาม
- ถูกต้อง
- ประสบความสำเร็จ
- ได้รับ
- ข้าม
- เพิ่มเติม
- ที่อยู่
- ความได้เปรียบ
- AI
- เอดส์
- อัลกอริทึม
- ทั้งหมด
- การอนุญาต
- ในหมู่
- การวิเคราะห์
- อื่น
- API
- เข้าใกล้
- ปพลิเคชัน
- AREA
- ข้อโต้แย้ง
- รอบ
- ศิลปะ
- บทความ
- อัตโนมัติ
- ใช้ได้
- ความตระหนัก
- กำลัง
- ที่ดีที่สุด
- บิต
- บล็อก
- ร้านหนังสือเกาหลี
- ชายแดน
- กล่อง
- เบราว์เซอร์
- สร้าง
- built-in
- สามารถรับ
- CD
- เปลี่ยนแปลง
- วงกลม
- การเรียกร้อง
- การทำความสะอาด
- ซีเอ็นเอ็น
- รหัส
- ชุด
- คอลัมน์
- การผสมผสาน
- เชิงพาณิชย์
- บริษัท
- ซับซ้อน
- ความมั่นใจ
- องค์ประกอบ
- ความสับสน
- มี
- การแปลง
- การแก้ไข
- ค่าใช้จ่าย
- ได้
- คู่
- ข้อมูล
- จัดการ
- ตรวจพบ
- การตรวจพบ
- การกำหนด
- พัฒนา
- นักพัฒนา
- พัฒนาการ
- DID
- แตกต่าง
- ต่าง
- ดิจิตอล
- แปลงเป็นดิจิทัล
- ตัวเลข
- เอกสาร
- ลง
- หล่น
- Dropbox
- ก่อน
- ขอบ
- อีเมล
- ปลายทาง
- พลังงาน
- ภาษาอังกฤษ
- สิ่งแวดล้อม
- ทุกอย่าง
- ตัวอย่าง
- ที่คาดหวัง
- คาดว่า
- ครอบครัว
- FAST
- ลักษณะ
- คุณสมบัติ
- สาขา
- ชื่อจริง
- ไหล
- ปฏิบัติตาม
- ดังต่อไปนี้
- ส้อม
- ฟอร์ม
- รูป
- รูปแบบ
- พบ
- ฟรี
- ฟังก์ชัน
- ได้รับ
- ไป
- GitHub
- ให้
- เป้าหมาย
- ดี
- สีเทา
- เฉดสีเทา
- ยิ่งใหญ่
- ให้คำแนะนำ
- แนวทาง
- แฮ็ก
- มี
- หัว
- โปรดคลิกที่นี่เพื่ออ่านรายละเอียดเพิ่มเติม
- จุดสูง
- ถือ
- สรุป ความน่าเชื่อถือของ Olymp Trade?
- ทำอย่างไร
- HTTPS
- ใหญ่
- มนุษย์
- แยกแยะ
- ภาพ
- ส่งผลกระทบ
- การดำเนินการ
- สำคัญ
- ปรับปรุง
- ในอื่น ๆ
- รวม
- รวมทั้ง
- เพิ่ม
- ข้อมูล
- ข้อมูล
- โครงสร้างพื้นฐาน
- รวบรวม
- ใช้งานง่าย
- IT
- ร่วม
- คีย์
- กุญแจ
- ความรู้
- ที่รู้จักกัน
- ห้องปฏิบัติการ
- ภาษา
- ภาษา
- ใหญ่
- ล่าสุด
- เรียนรู้
- การเรียนรู้
- ห้องสมุด
- License
- ฟ้าแลบ
- Line
- ลินุกซ์
- รายการ
- รายการ
- นาน
- Mac
- เครื่อง
- เรียนรู้เครื่อง
- สำคัญ
- การทำ
- คู่มือ
- ตลาด
- การจับคู่
- หน่วยความจำ
- ใจ
- แบบ
- โมเดล
- มากที่สุด
- เครือข่าย
- ตามเครือข่าย
- เครือข่าย
- สัญญาณรบกวน
- เปิด
- โอเพนซอร์ส
- การเปิด
- ตัวเลือกเสริม (Option)
- Options
- ใบสั่ง
- การจัดระเบียบ
- อื่นๆ
- มิฉะนั้น
- แบบแผน
- รูปแบบไฟล์ PDF
- คน
- การปฏิบัติ
- มุมมอง
- น่าสงสาร
- ยอดนิยม
- เป็นไปได้
- ที่มีประสิทธิภาพ
- คำทำนาย
- การคาดการณ์
- กด
- สวย
- ประถม
- ปัญหา
- กระบวนการ
- กระบวนการ
- ก่อ
- โปรแกรมเมอร์
- การเขียนโปรแกรม
- การเขียนโปรแกรมภาษา
- โปรแกรม
- โครงการ
- ให้
- ให้
- คุณภาพ
- ราคา
- ดิบ
- RE
- การอ่าน
- เหตุผล
- ลด
- ปกติ
- ยังคงอยู่
- รายงาน
- กรุ
- ต้องการ
- จำเป็นต้องใช้
- การวิจัย
- ทรัพยากร
- REST
- ผลสอบ
- วิ่ง
- วิ่ง
- การสแกน
- จอภาพ
- การแบ่งส่วน
- บริการ
- ชุด
- สั้น
- คล้ายคลึงกัน
- ง่าย
- ขนาด
- เล็ก
- So
- ซอฟต์แวร์
- โซลูชัน
- สเปน
- สเปค
- ความเร็ว
- สถานะ
- สหรัฐอเมริกา
- แข็งแรง
- ประสบความสำเร็จ
- ที่สนับสนุน
- รองรับ
- SWIFT
- ระบบ
- ระบบ
- งาน
- เทคโนโลยี
- สถานีปลายทาง
- ทดสอบ
- ตลอด
- เวลา
- เครื่องมือ
- ด้านบน
- แบบดั้งเดิม
- การฝึกอบรม
- แปลง
- รักษา
- แนวโน้ม
- อูบุนตู
- ui
- เข้าใจ
- เป็นเอกลักษณ์
- us
- ใช้
- กรณีใช้งาน
- ผู้ใช้
- ความคุ้มค่า
- วิสัยทัศน์
- W
- รอ
- ที่เดิน
- อะไร
- ความหมายของ
- ยกเว้น
- วิกิพีเดีย
- หน้าต่าง
- ภายใน
- ไม่มี
- คำ
- งาน
- การทำงาน
- โรงงาน
- การเขียน
- X