Принципы написания плагина
В этом разделе:
Архитектура плагина
После того как компонент findface-video-worker
обнаруживает лицо, он отправляет его в компонент findface-facerouter
в виде HTTP API запроса. Для обработки запроса каждый плагин должен экспортировать функцию activate(app, ctx, plugin_name, plugin_source)
.
Параметры функции activate
:
app
: сущностьtornado.web.Application
компонентаfindface-facerouter
.ctx
: контекст, передаваемый плагину при активации.plugin_name
: имя активируемого плагина.plugin_source
: объект источника, из которого загружается плагин.
При активации плагину передается следующий контекст:
request.ctx.sfapi
: настроенный экземплярntech.sfapi_client.Client
, к которому можно обращаться напрямую для обработки результата видеодетекции (создание новой галереи, добавление лица в галерею и т. д.).plugins
:OrderedDict
со всеми плагинами (key
: имя плагина,value
: результат, возвращенный функциейactivate
).idgen
: генератор id, который может вызываться какctx.idgen()
.
Функция activate(app, ctx, plugin_name, plugin_source)
должна вернуть объект со следующими методами:
preprocess
,process
,shutdown
(опционально).
Метод preprocess
В данном методе плагин решает, интересует ли его полученное лицо, и если да, возвращает кортеж или список, содержащий одну или несколько строк: ‘facen’
, ‘gender’
, ‘age’
, ‘emotions’
, что соответственно означает, что нужно извлечь вектор признаков, распознать пол, возраст и/или эмоции. Если возвращенные кортеж или список непусты, компонент findface-facerouter
перенаправляет обнаруженное лицо в компонент findface-sf-api
в запросе /detect POST
с соответствующими параметрами в query string (facen=on
, gender=on
, age=on
, emotions=on
).
Синтаксис базового метода preprocess
, от которого следует наследоваться (см. класс Plugin
):
- preprocess(self, request: FrHTTPRequest, labels: Mapping[str, str]) Tuple[str]
- Параметры
FrHTTPRequest (tornado.httpserver.HTTPRequest) – HTTP API запрос, который включает в себя дополнительный аргумент
params
labels (dictionary) – пользовательский набор меток кадра, который задается в параметрах задания для компонента
findface-video-worker
и затем присваивается кадруАргумент
params
FrHTTPRequest содержит следующие поля:
- Параметры
photo (bytes) – кадр с лицом в формате JPEG
face0 (bytes) – нормализованное изображение лица
bbox (list of integers [[x1,y1,x2,y2]], where
x1
: x coordinate of the top-left corner,y1
: y coordinate of the top-left corner,x2
: x coordinate of the bottom-right corner,y2
: y coordinate of the bottom-right corner) – координаты рамки с лицом в кадреcam_id (string) – id видеокамеры
timestamp (datetime.datetime) – временная метка кадра
detectorParams (dictionary) – словарь со служебно-отладочной информацией от детектора
bs_type (string) – режим поиска лучшего кадра. Доступные опции: overall (буферный режим: на сервер отправляется кадр, который был лучшим за весь период нахождения лица в поле зрения видеокамеры), realtime (режим реального времени: на сервер отправляются кадры, считающиеся лучшими в последовательных интервалах).
labels (dictionary) – (дублирует params.labels) пользовательский набор меток кадра, который задается в параметрах задания для компонента
findface-video-worker
и затем присваивается кадру
Решение об обработке лица принимается на основании данных из request.params
, в том числе пользовательского набора меток, а также из любых других соображений.
Метод process
Данный метод вызывается, если метод preprocess
вернул непустой кортеж или список (’facen’, ‘gender’, ‘age’, ‘emotions’). После того, как компонент findface-sf-api
вернул ответ с результатом детекции (см. запрос /detect POST
) со всеми запрошенными параметрами лица, компонент findface-facerouter
вызывает метод `process
плагина для выполнения собственно обработки лица.
Для выполнения обработки лица плагин использует request.ctx.sfapi
.
Синтаксис базового метода process
, от которого следует наследоваться (см. класс Plugin
):
Метод shutdown
Данный метод вызывается только перед завершением работы компонента findface-facerouter
.
Синтаксис базового метода shutdown
, от которого следует наследоваться (см. класс Plugin
):
- shutdown(self)