Skip to content

Использование системы 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

alt_text

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

alt_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

alt_text

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'