Использование системы NeuroControl¶
Введение¶
Так как система NeuroControl является микросервисной, для удобства обращение выделен отдельный сервис. Сервис Gateway - шлюз и связующее звено между сервисами системы NeuroControl. Сервис предоставляет API для выполнения запросов на локализацию компонентов и распознавания текста.
Фреймворк авто тестирования напрямую взаимодействует только с сервисом Gateway. Gateway, в свою же очередь, отправляет запросы в сервисы, получает и обрабатывает ответы от сервисов в зависимости от входных данных запроса.
Ниже будут приведены объяснения и примеры как использовать систему NeuroControl
Распознавание элементов¶
Основная функция системы NeuroControl это распознавание компонентов UI на скриншотах изображения
Система предоставляет как распознавания различных компонентов, таких как кнопки, выпадающие списки, таблицы с помощью нейронной сети локализации компонентов, так и распознавание областей на изображении, содержащий текст с помощью нейронной сети локализации текста. Каждый из этих видов локализации не совместим с другим, хотя для обоих возможно распознавание текста. Сам текст распознается с помощью OCR на локализованных компонентах
Info
Хотя локализация текстовых элементов и не совместима с локализацией стандартных компонентов, локализация текста в уже найденных компонентах используется для улучшения распознавания текста. Также можно самому выбрать тип локализации текста: нашей нейронной сетью или OCR!
Рассмотрим сначала локализацию с помощью нейронной сети локализации компонентов
Распознавание элементов (без TextElement)¶
Функционал распознания доступен на эндпоинте find_by
Классы, которые может распознать система (и их наименования) зависят от обученной нейронной сети. По умолчанию, в предоставляемой сети заданы следующие классы:
ButtonCheckboxLabelRadioTableListTreeViewInputTextAreaScrollbarCalendar
Для локализации всех компонентов на изображении следует отправить следующий запрос к системе.
curl -X 'POST' \
'http://192.168.88.102:9464/find_by' \
-H 'accept: application/json' \
-H 'Content-Type: multipart/form-data' \
-F 'file=@image.png;type=image/png'
Это же соответствует пустому (без изменения параметров по-умолчанию) запросу в swagger

Info
Увидеть Swagger сервиса вы можете на странице {host}{service_port}/docs Для Gateway порт по умолчанию 9464.
В ответ вернется JSON с результатами распознавания. Подробнее про схему JSON здесь
Info
Все эти запросы вернут локализацию элементов, их атрибуты, но не вернут их текст. Для получения текста необходимо
явно задать искомый текст в параметр text, или же использовать поиск TextElement. Подробнее ниже.
Фильтрация компонентов¶
Для получения не всех компонентов, а только некоторых классов, надо добавить требуемые классы в query-параметр type_ui
Например, следующий запрос вернет только элементы с классом Button
curl -X 'POST' \
'http://192.168.88.102:9464/find_by?type_ui=Button' \
-H 'accept: application/json' \
-H 'Content-Type: multipart/form-data' \
-F 'file=@image.png;type=image/png'
Несколько классов задаются через разделитель |
curl -X 'POST' \
'http://192.168.88.102:9464/find_by?type_ui=Button|Input|Label' \
-H 'accept: application/json' \
-H 'Content-Type: multipart/form-data' \
-F 'file=@image.png;type=image/png'
Этот запрос вернет компоненты, относящиеся к классам Button, Input, Label
Warning
В следующих версиях конкатенация посредством | будет убрана. Выбор нескольких компонентов будет заменен на
множественные query-параметры
Получение текста¶
До сих пор мы получали только локализацию компонентов и его атрибуты, перейдем к получению текста
Получение текста c локализацией на стандартных компонентах¶
Получение текста на всех компонентах по-умолчанию отключено для экономии времени так как операция распознавания текста
довольно трудозатратная. Поэтому, получить текст можно при условии, что вы ищете какой-то определенный текст. Для
этого необходимо передать в query-параметр text
curl -X 'POST' \
'http://192.168.88.102:9464/find_by?type_ui=Button&text=OK' \
-H 'accept: application/json' \
-H 'Content-Type: multipart/form-data' \
-F 'file=@image.png;type=image/png'
В результате этого запроса, вернутся элементы, на которых удалось обнаружить текст, который содержит в себе текст "OK".
Локализация TextElement¶
Как говорилось выше, возможна локализация не на заданные классы нейронной сети, а на отдельные области содержащие текст.
Для этого используется тип элемент TextElement. Запрос с параметром type-ui=TextElement вернет список (с
координатами и текстом) областей на изображении с текстом.
curl -X 'POST' \
'http://192.168.88.102:9464/find_by?type_ui=TextElement' \
-H 'accept: application/json' \
-H 'Content-Type: multipart/form-data' \
-F 'file=@image.png;type=image/png'
Для выбора элементов только с заданным текстом, также необходимо передать в параметр text искомый текст. Также
передача заданного текста позволит запустить прогон всех стратегий
curl -X 'POST' \
'http://192.168.88.102:9464/find_by?type_ui=TextElement&text=ОК' \
-H 'accept: application/json' \
-H 'Content-Type: multipart/form-data' \
-F 'file=@image.png;type=image/png'
Info
Распознавание текста одна из самых сложных операций с множеством параметров и отдельных концепций. Описание как система находит текст, какие при этом используются настройки и как можно их применять находится здесь
Info
Для всех элементов нейронной сети кроме TextElement для получения текста необходимо передавать параметр text.
Для типа TextElement параметр text необязателен. Переданный параметр text позволяет запустить прогон
стратегий.
Получение текста на одном компоненте¶
Допустим мы хотим получить текст уже на полученном компоненте. Этот функционал реализован в энподинте POST /find_text
и альтернативном варианте POST /api/v2/find/text
/find_text¶

Прежде чем перейти к параметрам запроса необходимо уточнить, как именно локализуется и распознается текст
1) Локализация с помощью OCR
В этом случае локализация и распознавание текста ложится целиком на OCR, мы не уточняем локализацию текста с помощью других технологий.
2) Локализация с помощью нейронной сети и распознавание OCR
Также существует возможность сначала более точно определять границы текста, и затем уже уточненное изображение передать на обработку OCR. В большинстве случаем точность распознавания текста при этом повышается.
Сам же метод принимает два query-параметра:
yolo_loc- использовать ли локализацию текста с помощью нейронной сети. По умолчанию True.use_ocr_cache- использовать ли кэш. Если данное изображение уже подвергалось обработке с данными параметрами, приuse_ocr_cacheрезультаты будут получены из кэша. Это очень сильно ускоряет время работа. Не стоит беспокоиться, что кэш не даст получить актуальные данные: изображение идет в обработку при любом его изменении или же изменении входных параметров.token- токен. Используется для выбора модели сети локализации текста, исходя из конфигурации токена
Info
Подробнее про токены и конфигурацию моделей можно прочитать здесь
Само же изображение, как и в методе POST find_by идет как multipart-form/data.
Пример запроса:
curl -X 'POST' \
'http://192.168.88.102:9464/find_text?yolo_loc=true&use_ocr_cache=false' \
-H 'accept: application/json' \
-H 'Content-Type: multipart/form-data' \
-F 'file=@canvas.png;type=image/png'
На выходе мы получим словарь JSON components, где значением будем список словарей с полями:
- name - наименование стратегии
- text - распознанный текст, полученный с использованием стратегии, указанной в name

Info
Информация о том, что такое стратегии, логику их работу, как ими управлять и больше подробностей про распознавание текста можно найти здесь
/api/v2/find/text¶
Метод аналогичный /find_text с отличием в том, что заменяет собой два запроса различными значениями
параметра yolo_loc (True и False), затрачивая при этом меньше времени за счет асинхронности запросов к OCR, а
также возвращает список только уникальных значений полученных с прогона стратегий.
Таким образом, этот метод просто облегчает взаимодействие и за один запрос выполняет двойной функционал, но с
уменьшением по времени, если бы посылали на /find_text два различных запроса.
Принимает такие же параметры как /find_text, кроме параметра yolo_loc
Пример запроса
curl -X 'POST' \
'http://192.168.88.102:9464/api/v2/find/text?use_ocr_cache=false' \
-H 'accept: application/json' \
-H 'Content-Type: multipart/form-data' \
-F 'file=@canvas.png;type=image/png'