OCR ของกล้องทำงาน OCR บนอุปกรณ์โดยใช้แพ็กเกจ vision_text_recognition ที่ fork แล้วซึ่งรองรับตัวอักษรละติน จีน (ตัวย่อและตัวเต็ม) ญี่ปุ่น และเกาหลี ไม่มีการอัปโหลดข้อมูลใด ๆ สำหรับการรู้จำ บล็อกที่ OCR engine ส่งคืนแต่ละบล็อกมี bounding box และข้อความที่ตรวจพบของตัวเอง หน้าผลลัพธ์จะวาดคำแปลทับลงบนพิกัดเดียวกันเพื่อรักษาเลย์เอาต์ดั้งเดิม
ไปป์ไลน์การถ่าย
- การเริ่มต้นกล้อง ตัวควบคุมกล้องจะเริ่มต้นแบบ async พร้อมสถานะที่ชัดเจน
initializing / ready / failedเมื่อล้มเหลว ปุ่มลองใหม่จะแสดงขึ้นเพื่อเริ่มต้นใหม่โดยไม่เข้าinitializingguard ซ้ำ - การจัดแนวจริง
DeviceOrientationของ iOS และ EXIF ไม่น่าเชื่อถือเมื่อแอปถูกล็อกเป็นแนวตั้ง แอปอ่าน accelerometer ดิบผ่านsensors_plusและแคชเฟรมล่าสุด เพื่อให้ชัตเตอร์จับทิศทางการจับที่แท้จริงแม้ UI จะถูกล็อก จากนั้วจึงปรองดองการจัดแนว EXIF กับความจริงภาคพื้นนี้ - ชัตเตอร์ แตะเพื่อจับภาพตามอัตราส่วนภาพของตัวอย่างภาพ ณ ปัจจุบัน เฟรมที่จับได้จะลดขนาดลงเหลือขอบสูงสุดที่กำหนดได้ก่อน OCR — หน้าส่วนใหญ่ต้องการ 1500–2000 พิกเซลที่ขอบยาวเพื่อให้ engine อ่านตัวอักษรเล็ก ๆ โดยไม่ทำให้หน่วยความจำบวม
- แฟลช มีสี่โหมดในช่องมองภาพ — อัตโนมัติ ปิด เปิด และไฟฉาย — พร้อมสวิตช์ผูกกับ API แฟลชของระบบ
สิ่งที่ OCR ส่งคืน
- bounding box ต่อบล็อก แต่ละ TextBlock มีสี่เหลี่ยมของตัวเอง หน้าผลลัพธ์ใช้สิ่งเหล่านี้เพื่อวางข้อความที่แปลแล้วทับบนข้อความต้นฉบับอย่างแม่นยำ
- ข้อความบล็อกและลำดับ ข้อความภาษาต้นทางต่อบล็อก ในลำดับที่ engine ส่งออก (บนลงล่าง ซ้ายไปขวา ตามค่าเริ่มต้น)
- ความเชื่อมั่น แต่ละบล็อกมีความเชื่อมั่นของตัวเอง บล็อกที่ต่ำกว่าเกณฑ์จะแสดงในหน้าผลลัพธ์แต่ถูกติดธงว่า "ความเชื่อมั่นต่ำ" เพื่อให้ผู้ใช้ตรวจสอบ
ทำไมต้องบนอุปกรณ์
- ความเป็นส่วนตัว ภาพถ่ายป้ายถนน สัญญา หรือแบบฟอร์มทางการแพทย์ไม่เคยออกจากอุปกรณ์เพื่อทำ OCR
- ความหน่วง ไม่มีการเดินทางไปกลับของเครือข่าย OCR ของหน้าทั่วไปที่ถ่ายด้วยโทรศัพท์เสร็จสิ้นในเวลาไม่ถึงหนึ่งวินาทีบนอุปกรณ์ล่าสุด
- ออฟไลน์ OCR ทำงานบนเครื่องบิน ในชั้นใต้ดิน และในภูมิภาคที่ไม่มีสัญญาณ engine เดียวกันที่รันการรู้จำทำงานทั้งหมดจากโมเดลบนอุปกรณ์
แนวปฏิบัติที่ดีที่สุดสำหรับ OCR ที่แม่นยำ
- แสงสม่ำเสมอทางอ้อม แสงจากหน้าต่างเหนือกว่าไฟส่องด้านบน เงาที่พาดผ่านหน้าเป็นสาเหตุที่พบบ่อยที่สุดของการอ่านตัวอักษรผิด
- แตะเพื่อโฟกัส หากออโต้โฟกัสเลือกวัตถุผิด (โต๊ะ นิ้ว ขอบหน้า) ให้แตะตรงกลางข้อความก่อนถ่าย
- หน้าเรียบ หน้าที่โค้งเข้าหาสันหนังสือจะสูญเสียตัวอักษรใกล้รอยต่อ ใช้อีกมือหนึ่งกดให้หน้าเรียบเมื่อทำได้
- หนึ่งภาษาต่อการถ่าย หน้าที่มีสคริปต์ผสมทำงานได้ในครั้งเดียว แต่หน้าที่ผสมละตินกับญี่ปุ่นแนวตั้งควรแบ่งเป็นสองการถ่าย