Распознавание текста

В этой главе рассказывается, как использовать OCR для вспомогательных операций с интерфейсом. В играх и других приложениях обычные селекторы интерфейса могут не работать, в таких случаях можно выбрать метод OCR. Метод распознавания OCR поддерживает только такие операции, как проверка существования элемента, клик, создание скриншота и т.д. Библиотеки OCR-бэкенда поддерживают paddleocr, easyocr и пользовательский HTTP-бэкенд интерфейс.

Настройка OCR-бэкенда

Перед использованием метода распознавания OCR необходимо сначала настроить OCR-бэкенд; вам нужно самостоятельно заранее установить зависимости.

Внимание

Если это кластер, то есть необходимо управлять несколькими устройствами на одном компьютере, обязательно самостоятельно оберните OCR в HTTP-интерфейс. Прямое использование paddleocr или easyocr займёт много локальной памяти или вычислительных ресурсов, поскольку каждый процесс будет загружать их повторно.

Использование paddleocr в качестве бэкенда: качество скриншотов для распознавания равно 80, включено ускорение GPU.

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

Использование easyocr в качестве бэкенда: качество скриншотов для распознавания равно 80, распознавание упрощённого китайского и английского языков.

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

Дополнительные параметры в setup_ocr_backend должны быть параметрами при инициализации соответствующего экземпляра. Если вы не уверены в написании указанных выше параметров, обратитесь к официальным параметрам инициализации ниже и сравните с кодом выше.

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

Пользовательский OCR-бэкенд в основном используется для управления большим количеством устройств или когда на локальной машине отсутствует ускорение GPU. Вы можете развернуть написанную функцию распознавания как HTTP-сервис и запрашивать удалённое распознавание через пользовательский бэкенд. Вам необходимо унаследовать и написать CustomOcrBackend и отформатировать результаты распознавания в соответствии с требуемым форматом. Вы также можете найти определение формата ответа в предоставленном нами paddle_ocr_http_backend.py, немного изменить его и сразу развернуть этот сервис.

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

Затем установите сервис OCR-бэкенда как пользовательский класс сервиса.

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

OCR-селекторы

В настоящее время селекторы распознавания OCR поддерживают следующие виды.

text

Совпадение полного текста.

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

textContains

Совпадение по частичному вхождению текста.

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

textMatches

Совпадение текста по регулярному выражению.

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

Операции OCR

В настоящее время селекторы распознавания OCR поддерживают следующие связанные операции.

click

Клик по выбранному элементу.

element.click()

click_exists

Если элемент существует, то кликнуть.

element.click_exists()

exists

Проверка существования элемента.

element.exists()

screenshot

Сделать скриншот совпавшего элемента.

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

info

Получить информацию о совпадении OCR.

element.info()

Совет

Если OCR всё ещё не решает вашу проблему, вы также можете попробовать использовать интерфейс сопоставления по признакам изображения для сопоставления изображений.