OCR-Operationen

Dieses Kapitel beschreibt, wie Sie OCR zur Unterstützung von UI-Operationen verwenden können. In Situationen wie bei Spieleanwendungen sind herkömmliche UI-Selektoren möglicherweise nicht verwendbar. In solchen Fällen können Sie OCR-Methoden für Operationen wählen. Die OCR-Erkennungsmethode unterstützt nur Operationen wie die Überprüfung der Existenz eines Elements, Klicks, Screenshots usw. Die OCR-Backend-Bibliothek unterstützt die Verwendung von paddleocr, easyocr sowie benutzerdefinierten HTTP-Backend-Schnittstellen.

OCR-Backend einrichten

Bevor Sie die OCR-Erkennungsmethode verwenden, müssen Sie zuerst das OCR-Backend einrichten. Sie müssen die Abhängigkeitsbibliotheken im Voraus selbst installieren.

Achtung

Wenn Sie einen Cluster betreiben, d.h. mehrere Geräte auf demselben Computer steuern müssen, stellen Sie sicher, dass Sie dies selbst als OCR-HTTP-Schnittstelle kapseln. Die direkte Verwendung von paddleocr oder easyocr verbraucht eine große Menge an lokalem Speicher oder Rechenressourcen, da jeder Prozess die Bibliotheken wiederholt lädt.

Verwenden Sie paddleocr als Backend, mit einer Screenshot-Qualität von 80 für die Erkennung und GPU-Beschleunigung.

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

Verwenden Sie easyocr als Backend, mit einer Screenshot-Qualität von 80 für die Erkennung von vereinfachtem Chinesisch und Englisch.

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

Die zusätzlichen Parameter in setup_ocr_backend sollten die Parameter zur Initialisierung der Instanz sein. Wenn Sie nicht verstehen, wie die obigen Parameter geschrieben werden, sehen Sie sich bitte die folgenden offiziellen Instanziierungsparameter an und vergleichen Sie sie mit den obigen.

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

Ein benutzerdefiniertes OCR-Backend wird hauptsächlich für die Steuerung einer großen Anzahl von Geräten oder in Situationen ohne GPU-Beschleunigung auf dem lokalen Rechner verwendet. Sie können die geschriebene Erkennung als HTTP-Dienst bereitstellen und innerhalb des benutzerdefinierten Backends eine Fern-Erkennung anfordern. Sie müssen MyCustomOcrBackend selbst erben und schreiben und die Erkennungsergebnisse gemäß dem erforderlichen Format formatieren. Die Definition des Antwortformats finden Sie auch in der von uns bereitgestellten Datei paddle_ocr_http_backend.py. Sie können diesen Dienst auch mit geringfügigen Änderungen direkt bereitstellen.

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

Anschließend setzen Sie den OCR-Erkennungs-Backend-Dienst einfach auf die benutzerdefinierte Dienstklasse.

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

OCR-Selektoren

Derzeit unterstützt der OCR-Erkennungs-Selektor nur die folgenden Typen.

text

Stimmt mit dem vollständigen Text überein.

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

textContains

Übereinstimmung, wenn der Text den Wert enthält.

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

textMatches

Übereinstimmung mit regulärem Ausdruck im Text.

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

OCR-Operationen

Derzeit unterstützt der OCR-Erkennungs-Selektor nur die folgenden zugehörigen Operationen.

click

Klickt auf das ausgewählte Element.

element.click()

click_exists

Klickt auf das ausgewählte Element, falls es existiert.

element.click_exists()

exists

Prüft, ob das Element existiert.

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

screenshot

Erstellt einen Screenshot des übereinstimmenden Elements.

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

info

Ruft die Informationen der übereinstimmenden OCR-Erkennung ab.

element.info()

Tipp

Wenn OCR Ihr Problem immer noch nicht lösen kann, können Sie auch versuchen, die Schnittstelle für den Bildmerkmalsabgleich zu verwenden.