Принципы написания плагина
В этом разделе:
Архитектура плагина
После того как компонент 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 запрос, который включает в себя дополнительный аргумент
paramslabels (dictionary) – пользовательский набор меток кадра, который задается в параметрах задания для компонента
findface-video-workerи затем присваивается кадруАргумент
paramsFrHTTPRequest содержит следующие поля:
- Параметры
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)