Распознавание текста¶
В этой главе рассказывается, как использовать 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 всё ещё не решает вашу проблему, вы также можете попробовать использовать интерфейс сопоставления по признакам изображения для сопоставления изображений.