Opérations OCR

Ce chapitre vous présente comment utiliser l'OCR (Reconnaissance Optique de Caractères) pour assister les opérations d'interface. Dans des situations telles que les applications de jeu, les sélecteurs d'interface conventionnels peuvent ne pas être utilisables. Dans ce cas, vous pouvez choisir d'utiliser les méthodes OCR pour effectuer des opérations. La méthode de reconnaissance OCR ne prend en charge que des opérations telles que la vérification de l'existence d'un élément, le clic, la capture d'écran, etc. La bibliothèque backend OCR prend en charge l'utilisation de paddleocr, easyocr, ainsi que des interfaces backend HTTP personnalisées.

Configuration du backend OCR

Avant d'utiliser la méthode de reconnaissance OCR, vous devez d'abord configurer le backend OCR. Vous devez installer vous-même les bibliothèques de dépendances à l'avance.

Attention

S'il s'agit d'un cluster, c'est-à-dire que vous devez contrôler plusieurs appareils sur le même ordinateur, assurez-vous de l'encapsuler vous-même en une interface HTTP OCR. L'utilisation directe de paddleocr ou easyocr consommera une grande quantité de mémoire locale ou de ressources de calcul, car chaque processus les rechargera.

Utiliser paddleocr comme backend, avec une qualité de capture d'écran de 80 pour la reconnaissance et l'accélération GPU.

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

Utiliser easyocr comme backend, avec une qualité de capture d'écran de 80, pour reconnaître le chinois simplifié et l'anglais.

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

Les paramètres supplémentaires dans setup_ocr_backend doivent être les paramètres d'initialisation de cette instance. Si vous ne comprenez pas comment les paramètres ci-dessus sont écrits, veuillez consulter les paramètres d'instanciation officiels ci-dessous et les comparer avec ceux ci-dessus.

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

Backend OCR personnalisé, principalement utilisé pour le contrôle d'un grand nombre d'appareils ou lorsque la machine locale ne dispose pas d'accélération GPU. Vous pouvez déployer la reconnaissance que vous avez écrite en tant que service HTTP et demander une reconnaissance à distance depuis le backend personnalisé. Vous devez hériter et écrire vous-même MyCustomOcrBackend et formater les résultats de la reconnaissance selon le format requis. Vous pouvez également trouver la définition du format de réponse dans le fichier paddle_ocr_http_backend.py que nous fournissons. Vous pouvez aussi le modifier légèrement et déployer ce service directement.

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()

Ensuite, il suffit de définir le service backend de reconnaissance OCR sur la classe de service personnalisée.

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

Sélecteurs OCR

Actuellement, le sélecteur de reconnaissance OCR ne prend en charge que les types suivants.

text

Correspondance avec le texte complet.

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

textContains

Correspondance si le texte contient.

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

textMatches

Correspondance par expression régulière sur le texte.

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

Opérations OCR

Actuellement, le sélecteur de reconnaissance OCR ne prend en charge que les opérations suivantes.

click

Clique sur l'élément sélectionné.

element.click()

click_exists

Clique sur l'élément sélectionné s'il existe.

element.click_exists()

exists

Vérifie si l'élément existe.

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

screenshot

Prend une capture d'écran de l'élément correspondant.

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

info

Obtient les informations OCR correspondantes.

element.info()

Conseil

Si l'OCR ne parvient toujours pas à résoudre votre problème, vous pouvez également essayer d'utiliser l'interface de correspondance de caractéristiques d'image pour la correspondance d'images.