การดำเนินการรู้จำข้อความ (OCR)

บทนี้จะแนะนำวิธีการใช้ OCR เพื่อช่วยในการดำเนินการกับอินเทอร์เฟซ ในสถานการณ์เช่นแอปพลิเคชันเกม selector ของอินเทอร์เฟซทั่วไปอาจไม่สามารถใช้งานได้ ในกรณีนี้ คุณสามารถเลือกใช้วิธีการของ OCR เพื่อดำเนินการได้ วิธีการรู้จำด้วย OCR รองรับเฉพาะการดำเนินการเช่น ตรวจสอบว่า element มีอยู่หรือไม่, คลิก, จับภาพหน้าจอ เป็นต้น ไลบรารี OCR backend รองรับการใช้งาน paddleocr, easyocr และอินเทอร์เฟซ HTTP backend ที่กำหนดเอง

การตั้งค่า OCR Backend

ก่อนที่จะใช้วิธีการรู้จำด้วย OCR คุณต้องตั้งค่า OCR backend ก่อน โดยคุณจำเป็นต้องติดตั้งไลบรารีที่จำเป็นล่วงหน้าด้วยตนเอง

ข้อควรสนใจ

หากเป็นการทำงานแบบคลัสเตอร์ กล่าวคือต้องควบคุมอุปกรณ์หลายเครื่องบนคอมพิวเตอร์เครื่องเดียวกัน โปรดสร้าง OCR HTTP interface ของคุณเอง การใช้ paddleocr หรือ easyocr โดยตรงจะใช้หน่วยความจำหรือทรัพยากรการคำนวณของเครื่องจำนวนมาก เนื่องจากแต่ละ process จะทำการโหลดซ้ำ

ใช้ paddleocr เป็น backend, คุณภาพของภาพหน้าจอที่ใช้ในการรู้จำคือ 80, และใช้การเร่งความเร็วด้วย GPU

d.setup_ocr_backend("paddleocr", quality=80, use_gpu=True, drop_score=0.85, use_space_char=True)

ใช้ easyocr เป็น backend, คุณภาพของภาพหน้าจอที่ใช้ในการรู้จำคือ 80, รู้จำภาษาจีนตัวย่อและภาษาอังกฤษ

d.setup_ocr_backend("easyocr", ["ch_sim", "en"], quality=80)

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

paddleocr.PaddleOCR(use_gpu=True, drop_score=0.85, use_space_char=True)
easyocr.Reader(["ch_sim", "en"])

OCR backend ที่กำหนดเอง ส่วนใหญ่ใช้สำหรับควบคุมอุปกรณ์จำนวนมากหรือในกรณีที่เครื่องไม่มีการเร่งความเร็วด้วย GPU คุณสามารถ deploy โค้ดการรู้จำที่คุณเขียนขึ้นเป็น HTTP service และร้องขอการรู้จำระยะไกลภายใน backend ที่กำหนดเองได้ คุณจำเป็นต้องสืบทอดและเขียน MyCustomOcrBackend ด้วยตนเอง และจัดรูปแบบผลลัพธ์การรู้จำตามรูปแบบที่กำหนด คุณยังสามารถค้นหาคำจำกัดความของรูปแบบการตอบกลับได้ในไฟล์ paddle_ocr_http_backend.py ที่เรามีให้ และคุณยังสามารถแก้ไขเล็กน้อยเพื่อ deploy service นี้ได้โดยตรง

class HttpOcrBackend(CustomOcrBackend):
    def __init__(self, url, auth):
        self.auth = auth
        self.url = url
    def ocr(self, image: bytes):
        r = requests.post(url, headers={"X-Auth": self.auth},
                                                    data=image)
        return r.json()

จากนั้นตั้งค่าบริการ backend สำหรับการรู้จำ OCR เป็นคลาสบริการที่คุณกำหนดเอง

d.setup_ocr_backend(HttpOcrBackend, "http://server/ocr", "Secret")

OCR Selector

ปัจจุบัน OCR selector รองรับเฉพาะประเภทต่อไปนี้

text

จับคู่ text ทั้งหมด

element = d.ocr(text="我的")

textContains

จับคู่ข้อความที่包含 (contains)

element = d.ocr(textContains="我的")

textMatches

จับคู่ข้อความด้วย Regular Expression

element = d.ocr(textMatches=".*?我的")

การดำเนินการ OCR

ปัจจุบัน OCR selector รองรับเฉพาะการดำเนินการที่เกี่ยวข้องต่อไปนี้

click

คลิกที่ element ที่เลือก

element.click()

click_exists

หากมีอยู่ ให้คลิกที่ element ที่เลือก

element.click_exists()

exists

ตรวจสอบว่า element มีอยู่หรือไม่

element = d.ocr(textMatches=".*?我的")

screenshot

จับภาพหน้าจอของ element ที่ตรงกัน

element.screenshot(100, ).save("element.png")

info

รับข้อมูล OCR ที่ตรงกัน

element.info()

เคล็ดลับ

หาก OCR ยังคงไม่สามารถแก้ปัญหาของคุณได้ คุณยังสามารถลองใช้อินเทอร์เฟซการจับคู่คุณลักษณะของภาพ (image feature matching) เพื่อทำการจับคู่ภาพได้