Использование системы NeuroControl¶
Введение¶
Так как система NeuroControl является микросервисной, для удобства обращение выделен отдельный сервис. Сервис Gateway - шлюз и связующее звено между сервисами системы NeuroControl. Сервис предоставляет API для выполнения запросов на локализацию компонентов и распознавания текста.
Фреймворк авто тестирования напрямую взаимодействует только с сервисом Gateway. Gateway, в свою же очередь, отправляет запросы в сервисы, получает и обрабатывает ответы от сервисов в зависимости от входных данных запроса.
Ниже будут приведены объяснения и примеры как использовать систему NeuroControl
Распознавание элементов¶
Основная функция системы NeuroControl это распознавание компонентов UI на скриншотах изображения
Система предоставляет как распознавания различных компонентов, таких как кнопки, выпадающие списки, таблицы с помощью нейронной сети локализации компонентов, так и распознавание областей на изображении, содержащий текст с помощью нейронной сети локализации текста. Каждый из этих видов локализации не совместим с другим, хотя для обоих возможно распознавание текста. Сам текст распознается с помощью OCR на локализованных компонентах
Info
Хотя локализация текстовых элементов и не совместима с локализацией стандартных компонентов, локализация текста в уже найденных компонентах используется для улучшения распознавания текста. Также можно самому выбрать тип локализации текста: нашей нейронной сетью или OCR!
Рассмотрим сначала локализацию с помощью нейронной сети локализации компонентов
Распознавание элементов (без TextElement)¶
Функционал распознания доступен на эндпоинте find_by
Классы, которые может распознать система (и их наименования) зависят от обученной нейронной сети. По умолчанию, в предоставляемой сети заданы следующие классы:
Button
Checkbox
Label
Radio
Table
List
TreeView
Input
TextArea
Scrollbar
Calendar
Для локализации всех компонентов на изображении следует отправить следующий запрос к системе.
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'