API процессинг-блоков
API процессинг-блоков (блоков обработки) является альтернативным масштабируемым интерфейсом, замещающим существующие API, для более легкой интеграции возможностей SDK в ваше приложение.
Основные возможности API процессинг-блоков:
- Объединение многих компонентов в единую интеграцию
- Простота и легкость изучения
- Быстрое внедрение
- Долгосрочная поддержка и обновления
API процессинг-блоков является частью будущих решений 3DiVi. Для получения более подробной информации обратитесь к торговому представителю 3DiVi.
#
Набор процессинг-блоковnote
Сэмпл processing_block_demo демонстрирует использование API процессинг-блоков.
#
Human Body DetectorHuman Body Detector — это компонент, используемый для обнаружения человеческих тел на изображении. Результатом обнаружения является ограничивающий прямоугольник (рамка) вокруг обнаруженного тела.
Временные характеристики Human Body Detector:
- CPU (Intel Core i5-9400 @ 4.10GHz Turbo, 1 core) ~170ms
- GPU (GeForce GTX 1080 Ti) ~16ms
Информацию об использовании Human Body Detector вы можете найти на странице Детекция тел.
#
Object DetectorObject Detector — это компонент, используемый для обнаружения объектов разных типов на изображении.
Результатом обнаружения является ограничивающий прямоугольник (рамка) вокруг обнаруженного объекта с классификационным именем.
Object Detector используется для детекции на изображении объектов следующих классов: "body"
- человеческое тело, "bicycle"
- велосипед, "car"
- автомобиль,
"motorcycle"
- мотоцикл, "bus"
- автобус, "train"
- поезд, "truck"
- грузовик, "traffic_light"
- светофор, "fire_hydrant"
- пожарный гидрант,
"stop_sign"
- сигнал "стоп", "bird"
- птица, "cat"
- кошка, "dog"
- собака, "horse"
- лошадь, "sheep"
- овца, "cow"
- корова, "bear"
- медведь,
"backpack"
- рюкзак, "umbrella"
- зонт, "handbag"
- сумка, "suitcase"
- чемодан, "sports_ball"
- спортивный мяч, "baseball_bat"
- бейсбольная бита,
"skateboard"
- скейтборд, "tennis_racket"
- теннисная ракетка, "bottle"
- бутылка, "wine_glass"
- бокал вина, "cup"
- чашка, "fork"
- вилка,
"knife"
- нож, "laptop"
- ноутбук, "phone"
- телефон, "book"
- книга, "scissors"
- ножницы.
Временные характеристики Object Detector:
- CPU (Intel Core i5-11400H @ 2.70GHz, 1 core) ~55ms
- GPU (GeForce GTX 1080 Ti) ~15ms
Информацию об использовании Object Detector вы можете найти на странице Детекция объектов.
#
Emotion EstimatorEmotion Estimator — компонент, используемый для оценки эмоций человека по кадрированному изображению лица. Результатом оценки является числовое значения степени проявления для каждой оцениваемой эмоции.
Временные характеристики Emotion Estimator:
- CPU (Intel Core i5-9400 @ 4.10GHz Turbo, 1 core) ~18ms
- GPU (GeForce GTX 1080 Ti) ~8ms
Информацию об использовании Emotion Estimator вы можете найти на странице Оценка эмоций.
#
Gender EstimatorGender Estimator — это компонент, используемый для оценки пола человека по кадрированному изображению с лицом. Результат оценки — вердикт о половой идентичности.
Временные характеристики Gender Estimator:
- CPU (Intel Core i5-9400 @ 4.10GHz Turbo, 1 core) ~5ms
- GPU (GeForce GTX 1080 Ti) ~1ms
Информацию об использовании Gender Estimator вы можете найти на странице Оценка пола.
#
2D RGB Liveness Estimator2D RGB Liveness Estimator - компонент, используемый для оценки принадлежности лица на RGB-изображении реальному человеку. Результатом обнаружения является ограничивающий прямоугольник (рамка) вокруг обнаруженного лица, вердикт о принадлежности реальному человеку и числовое значение вероятности. Информацию об использовании 2D RGB Liveness Estimator вы можете найти на странице Оценка принадлежности лица реальному человеку.
#
ContextКлючевой концепцией API процессинг-блоков является использование контейнеров Context.
Context - это гетерогенный контейнер, состоящий из набора иерархически организованных данных, представленных как пары ключ-значение. Ближайший аналог Context - объект JSON. Каждый объект Context может содержать: скалярный объект (integer, real, boolean, string), указатель на область памяти, массив объектов Context, ассоциативный контейнер пар <string, Context> с неограниченной вложенностью.
#
Как создать и использовать ContextСоздайте Context-контейнер:
- Общий набор операций с Context:
- создание ассоциативного контейнера по ключу
["key"]
на пустом контейнере Context:
- getters:
- создание массива вызовом метода
push_back
на пустом контейнере Context:
- итерации по массиву:
- операции со вложенными ассоциативными контейнерами:
- другие удобные методы Context:
#
Бинарный формат изображенийБольшинство процессинг-блоков выполняют операции с контейнерами Context, содержащими изображения в бинарном формате:
Ключ "blob"
содержит умный указатель на данные. Указатель устанавливается функцией void Context::setDataPtr(void* ptr, int copy_sz)
,
где copy_sz
- размер памяти в байтах, который будет скопирован, и затем автоматически освобождается когда заканчивается время жизни объекта Context. Копирование не будет выполнено, если в качестве аргумента copy_sz
будет передан 0
.
В этом случае объект Context не контролирует время жизни объекта, на который он указывает.
Ключ "blob"
содержит умный указатель на данные. Указатель устанавливается функцией void Context::setDataPtr(void* ptr, int copy_sz)
,
где copy_sz
- это размер памяти в байтах, которая будет скопирована и далее автоматически освобождена.
Копирование не выполняется если в качестве аргумента copy_sz
передан 0.
Вы также можете аллоцировать "сырую" память, например, чтобы скопировать данные позже, передавая nullptr и размер в качестве аргументов setDataPtr
.
Ключ "dtype"
может содержать одно из следующих значений: "uint8_t"
, "int8_t"
, "uint16_t"
, "int16_t"
, "int32_t"
, "float"
, "double"
.
Каждому значению соответствует определенный тип OpenCV: CV_8U
, CV_8S
, CV_16U
, CV_16S
, CV_32S
, CV_32F
, CV_64F
.
#
Создание контейнера Context c RGB-изображениемСоздайте контейнер Context для изображения используя метод
createContext()
:
- Прочитайте RGB-изображение из файла:
- a. Поместите изображение в контейнер ИЛИ
- b. ИЛИ скопируйте изображение из
pbio::RawImage
,pbio::CVRawImage
,pbio::InternalImageBuffer
в бинарный формат и положите его в контейнер Context:
#
Создание процессинг-блокаВ этом разделе описаны шаги по созданию любого процессинг блока.
Для создания блока необходимо указать соответствующие значения для ключей unit_type
и model_path
(см. описание выбранного процессинг-блока).
Создайте контейнер Context:
- Определите значения ключей контейнера Context, специфичных для выбранного процессинг-блока:
- Создание процессинг-блока:
#
Ускорение на GPUПроцессинг-блоки могут быть использованы с ускорением на GPU. Для этого необходимо определить ключ "use_cuda"
со значением true
для Context-контейнера блока обработчика
(см. Создание процессинг-блока).
- Системные требования:
- Nvidia GPU Driver >= 410.48
- CUDA Toolkit 10.1
- cuDNN 7
- (Для Windows) Microsoft Visual C++ Redistributable for Visual Studio 2019
- Требования к оборудованию:
- графический процессор (GPU) с поддержкой CUDA (NVIDIA GTX 1050 Ti и выше)