DdddOcr เป็นความร่วมมือระหว่างผู้เขียนและ kerlomz มันสร้างชุดข้อมูลสุ่มจำนวนมากและดำเนินการฝึกอบรมเครือข่ายเชิงลึก มันไม่ได้ถูกสร้างขึ้นสำหรับผู้ผลิตรหัสยืนยันใด ๆ ผลของการใช้ไลบรารีนี้ขึ้นอยู่กับอภิปรัชญาทั้งหมด ระบุตัวตนได้
DdddOcr แนวคิดของการพึ่งพาน้อยที่สุด ลดการกำหนดค่าผู้ใช้และต้นทุนการใช้งานให้เหลือน้อยที่สุด โดยหวังว่าจะนำประสบการณ์ที่สะดวกสบายมาสู่ผู้ทดสอบทุกคน
ที่อยู่โครงการ: คลิกที่นี่เพื่อส่ง
ไลบรารีหลามการจดจำ captcha สากลที่ใช้งานง่าย
สำรวจเอกสารสำหรับโครงการนี้ »
·รายงานข้อบกพร่อง ·เสนอคุณสมบัติใหม่
พันธมิตรผู้สนับสนุน
คู่มือการเริ่มต้นใช้งาน
การสนับสนุนด้านสิ่งแวดล้อม
ขั้นตอนการติดตั้ง
คำอธิบายไดเร็กทอรีไฟล์
โครงการสนับสนุนพื้นฐาน
ใช้เอกสารประกอบ
ความสามารถในการจดจำ OCR ขั้นพื้นฐาน
ความสามารถในการตรวจจับเป้าหมาย
การตรวจจับตัวเลื่อน
เอาต์พุตความน่าจะเป็น OCR
การนำเข้าโมเดลการฝึกอบรม OCR แบบกำหนดเอง
การควบคุมเวอร์ชัน
บทความหรือโครงการแนะนำที่เกี่ยวข้อง
ผู้เขียน
บริจาค
ประวัติดารา
พันธมิตรผู้สนับสนุน | เหตุผลในการแนะนำ | |
---|---|---|
ใช่แคปช่า | รหัสยืนยัน Google reCaptcha/รหัสยืนยัน hCaptcha/รหัสยืนยัน funCaptcha อินเทอร์เฟซการระบุเกรดเชิงพาณิชย์ คลิกไปที่ VIP4 โดยตรง | |
ซุปเปอร์อินทรี | ธุรกิจจำแนกและจดจำภาพอัจฉริยะชั้นนำของโลก ปลอดภัย แม่นยำ มีประสิทธิภาพ เสถียร เปิดกว้าง พร้อมทีมงานด้านเทคนิคและการตรวจสอบที่แข็งแกร่งที่รองรับการทำงานพร้อมกันจำนวนมาก การจัดการความคืบหน้าของงาน 7 * 24 ชม | |
มาเลเนีย | แพลตฟอร์มเกตเวย์ IP พร็อกซีระดับองค์กร Malenia / ซอฟต์แวร์การกระจาย IP พร็อกซี | |
เมฆฝน VPS | ส่วนลด 50% สำหรับเดือนแรกของการลงทะเบียน | โหนดเจ้อเจียงราคาถูกและแบนด์วิธขนาดใหญ่ 100M 30 หยวนต่อเดือน |
ระบบ | ซีพียู | จีพียู | เวอร์ชัน py ที่รองรับสูงสุด | หมายเหตุ |
---|---|---|---|---|
วินโดว์ 64 บิต | 3.12 | Windows บางเวอร์ชันจำเป็นต้องติดตั้งไลบรารีรันไทม์ vc | ||
วินโดวส์ 32 บิต | - | |||
ลินุกซ์64/ARM64 | 3.12 | |||
ลินุกซ์ 32 | - | |||
มาคอส X64 | 3.12 | M1/M2/M3...ชิปอ้างอิง #67 |
ผม. ติดตั้งจาก pypi
pip ติดตั้ง dddddocr.pip
ii. ติดตั้งจากแหล่งที่มา
โคลนคอมไพล์ https://github.com/sml2h3/dddddocr.gitcd ddddocr หลาม setup.py
โปรดอย่านำเข้า dddddocr โดยตรงในไดเร็กทอรีรากของโปรเจ็กต์ dddddocr โปรดตรวจสอบให้แน่ใจว่าชื่อไดเร็กทอรีของโปรเจ็กต์การพัฒนาของคุณไม่ใช่ dddddocr นี่เป็นสามัญสำนึกขั้นพื้นฐาน
เช่น:
ddddocr ├── MANIFEST.in ├── LICENSE ├── README.md ├── /ddddocr/ │ │── __init__.py 主代码库文件 │ │── common.onnx 新ocr模型 │ │── common_det.onnx 目标检测模型 │ │── common_old.onnx 老ocr模型 │ │── logo.png │ │── README.md │ │── requirements.txt ├── logo.png └── setup.py
โปรเจ็กต์นี้อิงตามผลการฝึกของ dddd_trainer เฟรมเวิร์กการฝึกพื้นฐานคือ pytorch เหตุผลพื้นฐานของ dddddocr ขึ้นอยู่กับ onnxruntime ดังนั้นความเข้ากันได้สูงสุดและการสนับสนุนเวอร์ชัน python ของโปรเจ็กต์นี้ส่วนใหญ่ขึ้นอยู่กับ onnxruntime
ส่วนใหญ่จะใช้เพื่อระบุข้อความบรรทัดเดียว นั่นคือ ส่วนของข้อความตรงบริเวณส่วนหลักของรูปภาพ เช่น รหัสยืนยันภาษาอังกฤษทั่วไปและตัวเลข เป็นต้น โปรเจ็กต์นี้สามารถจดจำภาษาจีน อังกฤษ (ตัวพิมพ์สุ่มหรือตัวพิมพ์ใหญ่โดยการตั้งค่า ช่วงผลลัพธ์) ตัวเลข และอักขระพิเศษบางตัว
# example.pyimport ddddocrocr = ddddocr.DdddOcr()image = open("example.jpg", "rb").read()result = ocr.classification(image)print(result)
มีโมเดล OCR สองชุดที่สร้างไว้ในไลบรารีนี้ โดยจะไม่สลับโดยอัตโนมัติตามค่าเริ่มต้น คุณต้องสลับผ่านพารามิเตอร์เมื่อเริ่มต้น ddddocr
# example.pyimport ddddocrocr = dddddocr.DdddOcr(beta=True) # สลับไปยังชุดที่สองของ ocr model image = open("example.jpg", "rb").read()result = ocr.classification(image)print ( ผลลัพธ์)
เคล็ดลับ สำหรับการสนับสนุนการจดจำสำหรับรูปภาพรูปแบบ png สีดำโปร่งใสบางภาพ: วิธี classification
ใช้พารามิเตอร์ png_fix
ค่าเริ่มต้นคือเท็จ
ocr.การจัดประเภท (รูปภาพ, png_fix=True)
สังเกต
ก่อนหน้านี้ผมพบว่าหลายๆ คนชอบที่จะเริ่มต้น ddddocr ใหม่ทุกครั้งที่รู้จัก OCR นั่นก็คือ ดำเนินการ ocr = ddddocr.DdddOcr()
ทุกครั้ง ซึ่งโดยทั่วไปแล้วจะต้องเริ่มต้นเพียงครั้งเดียวเท่านั้น เพราะในแต่ละครั้ง การเริ่มต้นและความเร็วในการรับรู้ครั้งแรกหลังจากการเริ่มต้นจะช้ามาก
อ้างอิงภาพตัวอย่าง
รวมถึงแต่ไม่จำกัดเฉพาะรูปภาพต่อไปนี้
ส่วนใหญ่จะใช้เพื่อตรวจจับตำแหน่งวัตถุเป้าหมายที่เป็นไปได้ในภาพอย่างรวดเร็ว เนื่องจากเป้าหมายที่ตรวจพบไม่จำเป็นต้องเป็นข้อความ ฟังก์ชันนี้จึงให้เฉพาะตำแหน่ง bbox ของเป้าหมายเท่านั้น (ในการตรวจจับเป้าหมาย เรามักจะใช้ bbox (กล่องขอบเขต ตัวย่อ) คือ bbox) เพื่ออธิบายตำแหน่งเป้าหมาย bbox คือกล่องสี่เหลี่ยมซึ่งสามารถกำหนดได้โดยพิกัดแกน x และ y ของมุมซ้ายบนของสี่เหลี่ยมและพิกัดแกน x และ y ของมุมขวาล่าง)
หากไม่จำเป็นต้องเรียกใช้ฟังก์ชัน ocr ระหว่างการใช้งาน คุณสามารถปิดฟังก์ชัน ocr ได้โดยส่งพารามิเตอร์ ocr=False
ในระหว่างการกำหนดค่าเริ่มต้น หากต้องการเปิดใช้งานการตรวจจับเป้าหมาย คุณต้องส่งพารามิเตอร์ det=True
นำเข้า ddddocrimport cv2det = dddddocr.DdddOcr(det=True) พร้อม open("test.jpg", 'rb') as f:image = f.read()bboxes = det.detection(image)print(bboxes)im = cv2 .imread("test.jpg")สำหรับ bbox ใน bboxes:x1, y1, x2, y2 = bboxim = cv2.rectangle(im, (x1, y1), (x2, y2), color=(0, 0, 255 ), ความหนา=2)cv2.imwrite("result.jpg", im)
อ้างอิงภาพตัวอย่าง
รวมถึงแต่ไม่จำกัดเฉพาะรูปภาพต่อไปนี้
ฟังก์ชันการตรวจจับแถบเลื่อนของโปรเจ็กต์นี้ไม่ได้ใช้งานโดยการจดจำ AI แต่ใช้งานโดยอัลกอริธึมในตัวของ opencv อาจไม่เป็นมิตรกับผู้ใช้ที่ถ่ายภาพหน้าจอมากนัก หากไม่จำเป็นต้องเรียกใช้ฟังก์ชัน ocr หรือฟังก์ชันการตรวจจับเป้าหมายระหว่างการใช้งาน คุณสามารถปิดฟังก์ชัน ocr หรือ det=False
ocr=False
ระหว่างการกำหนดค่าเริ่มต้นไปที่ ปิดฟังก์ชั่นการตรวจจับเป้าหมาย
ฟังก์ชันนี้มีการใช้งานอัลกอริธึมในตัวสองแบบ ซึ่งเหมาะสำหรับสองสถานการณ์ที่แตกต่างกัน โปรดดูคำแนะนำต่อไปนี้สำหรับรายละเอียด
ก. อัลกอริทึม 1
หลักการของอัลกอริทึม 1 คือการคำนวณตำแหน่งหลุมที่สอดคล้องกันในภาพพื้นหลังผ่านขอบของภาพตัวเลื่อน สามารถรับภาพตัวเลื่อนและภาพพื้นหลังได้ตามลำดับ ภาพตัวเลื่อนเป็นภาพพื้นหลังโปร่งใส
แผนภูมิแบบเลื่อน
ภาพพื้นหลัง
det = dddddocr.DdddOcr(det=False, ocr=False) โดยเปิด('target.png', 'rb') เป็น f:target_bytes = f.read() โดยเปิด('พื้นหลัง.png', 'rb') เป็น f:พื้นหลัง_ไบต์ = f.read() res = det.slide_match(target_bytes, background_bytes) พิมพ์ (res)
เนื่องจากแผนภูมิตัวเลื่อนอาจมีปัญหาเส้นขอบโปร่งใส ผลการคำนวณจึงอาจไม่ถูกต้อง คุณต้องประมาณความกว้างของเส้นขอบโปร่งใสของแผนภูมิตัวเลื่อนด้วยตนเองเพื่อแก้ไข bbox ที่เป็นผลลัพธ์
เคล็ดลับ: หากแถบเลื่อนไม่มีพื้นหลังมากเกินไป คุณสามารถเพิ่มพารามิเตอร์ simple_target ซึ่งโดยปกติจะเป็นรูปภาพในรูปแบบ jpg หรือ bmp
slide = dddddocr.DdddOcr(det=False, ocr=False) โดยเปิด('target.jpg', 'rb') as f:target_bytes = f.read() โดยเปิด('พื้นหลัง.jpg', 'rb') เป็น f:พื้นหลัง_ไบต์ = f.read() res = สไลด์.slide_match(target_bytes, background_bytes, simple_target=True) พิมพ์ (res)
ก. อัลกอริทึม 2
อัลกอริทึมที่ 2 คือการกำหนดตำแหน่งของหลุมเป้าหมายของแถบเลื่อนโดยการเปรียบเทียบความแตกต่างระหว่างรูปภาพทั้งสอง
อ้างอิงถึงรูป A ซึ่งเป็นภาพเต็มที่มีเงาของหลุมเป้าหมาย
รูปภาพอ้างอิง b, รูปภาพเต็ม
slide = dddddocr.DdddOcr(det=False, ocr=False)with open('bg.jpg', 'rb') as f:target_bytes = f.read() with open('fullpage.jpg', 'rb') เป็น f:พื้นหลัง_ไบต์ = f.read() img = cv2.imread("bg.jpg") res = slide.slide_comparison(target_bytes, background_bytes)พิมพ์(res)
เพื่อให้การควบคุมผลลัพธ์ OCR และการจำกัดขอบเขตมีความยืดหยุ่นมากขึ้น โปรเจ็กต์จึงสนับสนุนการจำกัดขอบเขตของผลลัพธ์ OCR
คุณสามารถส่งผ่าน probability=True
เมื่อเรียกวิธี classification
ในขณะนี้ วิธี classification
จะส่งคืนความน่าจะเป็นของตารางอักขระทั้งหมด แน่นอนว่า คุณยังสามารถตั้งค่าช่วงอักขระเอาต์พุตผ่านวิธี set_ranges
เพื่อจำกัดการส่งคืนได้ ผลลัพธ์.
Ⅰ เมธอด set_ranges
จำกัดอักขระส่งคืนที่จะส่งคืน
วิธีการนี้ยอมรับ 1 พารามิเตอร์ หากอินพุตเป็นประเภท int จะเป็นขีดจำกัดชุดอักขระในตัว และหากประเภทสตริงเป็นชุดอักขระแบบกำหนดเอง
หากเป็นประเภท int โปรดดูตารางต่อไปนี้
ค่าพารามิเตอร์ | ความสำคัญ |
---|---|
0 | จำนวนเต็มบริสุทธิ์ 0-9 |
1 | ภาษาอังกฤษตัวพิมพ์เล็กแท้ az |
2 | ภาษาอังกฤษตัวพิมพ์ใหญ่ล้วน AZ |
3 | ภาษาอังกฤษตัวพิมพ์เล็ก az + ภาษาอังกฤษตัวพิมพ์ใหญ่ AZ |
4 | ภาษาอังกฤษตัวพิมพ์เล็ก az + จำนวนเต็ม 0-9 |
5 | ตัวพิมพ์ใหญ่ภาษาอังกฤษ AZ + จำนวนเต็ม 0-9 |
6 | ภาษาอังกฤษตัวพิมพ์เล็ก az + ภาษาอังกฤษตัวพิมพ์ใหญ่ AZ + จำนวนเต็ม 0-9 |
7 | ไลบรารีอักขระเริ่มต้น - ภาษาอังกฤษตัวพิมพ์เล็ก az - AZ ภาษาอังกฤษตัวพิมพ์ใหญ่ - จำนวนเต็ม 0-9 |
หากเป็นประเภทสตริง โปรดส่งข้อความที่ไม่มี "0123456789+-x/=""
ว่าง
นำเข้า ddddocrocr = dddddocr.DdddOcr()image = open("test.jpg", "rb").read()ocr.set_ranges("0123456789+-x/=")result = ocr.classification(image, probability=True )s = ""for i in result['probability']:s += result['charsets'][i.index(max(i))]print(s)
โปรเจ็กต์นี้รองรับการนำเข้าโมเดลที่ได้รับการฝึกแบบกำหนดเองจาก dddd_trainer รหัสการนำเข้าอ้างอิงคือ
นำเข้า ddddocrocr = dddddocr.DdddOcr(det=False, ocr=False, import_onnx_path="myproject_0.984375_139_13000_2022-02-26-15-34-13.onnx", charsets_path="charsets.json") พร้อม open('test.jpg ', 'rb') เป็น f:image_bytes = f.read()res = ocr.classification(image_bytes)print(res)
โปรเจ็กต์นี้ใช้ Git สำหรับการจัดการเวอร์ชัน คุณสามารถดูเวอร์ชันที่มีอยู่ในปัจจุบันได้ในพื้นที่เก็บข้อมูล
นำ OCR น้องชายของคุณมาด้วย ซึ่งเป็นโซลูชันโดยรวมสำหรับรับรหัสยืนยันเครือข่ายภายในเครื่องโดยใช้ VBA ล้วนๆ
dddddocr เวอร์ชันสนิม
captcha-killer เวอร์ชันดัดแปลง
ฝึกโมเดล CAPTCHA แบบตัวอักษรและตัวเลขและระบุการเรียกใช้การปรับใช้ผ่าน ddddocr
-
ยินดีต้อนรับสู่การส่งกรณีหรือบทช่วยสอนที่ยอดเยี่ยมเพิ่มเติม คุณสามารถสร้างชื่อฉบับใหม่ได้โดยตรงโดยเริ่มต้นด้วย [การส่ง] และแนบลิงก์ไปยังไซต์บทช่วยสอนสาธารณะ ฉันจะเลือกแสดง readme ตามเนื้อหาของบทความซึ่งค่อนข้างจะ ไม่ซ้ำกันหรือมีเนื้อหาสำคัญ ขอบคุณเพื่อนทุกคน ~
หากคุณมีเพื่อนมากเกินไปคุณอาจไม่สามารถผ่านได้หากคุณมีคำถามใด ๆ คุณสามารถสื่อสารในประเด็นได้
โครงการนี้ได้รับอนุญาตภายใต้ใบอนุญาต MIT โปรดดูใบอนุญาตสำหรับรายละเอียด