Классы и методы плагинов
В этом разделе:
Базовые классы
- class facerouter.plugin.Plugin
 Данный класс предоставляет базовые методы для написания плагина, описанные в разделе Принципы написания плагина. Пользовательский класс, выполняющий роль оболочки для плагина, должен наследовать от класса
Plugin.- preprocess(self, request: FrHTTPRequest, labels: Mapping[str, str]) Tuple[str]
 Возвращает кортеж, включающий в себя одну или несколько строк:
‘facen’,‘gender’,‘age’,‘emotions’, что соответственно означает, что компонентfindface-facerouterдолжен запросить у компонентаfindface-sf-apiизвлечение вектора признаков, распознать пол, возраст и/или эмоции.- Параметры
 FrHTTPRequest (tornado.httpserver.HTTPRequest) – HTTP API запрос, который включает в себя дополнительный аргумент
paramslabels (dictionary) – пользовательские метки из
request.params
- Результат
 одна или несколько строк
'facen','gender','age','emotions'- Тип результата
 
Аргумент
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и затем присваивается кадру
- process(self, request: FrHTTPRequest, photo: bytes, bbox: List[int], event_id: int, detection: DetectFace)
 Принимает атрибуты обнаруженного лица.
- Параметры
 request (tornado.httpserver.HTTPRequest) – HTTP API-запрос от
findface-video-workerphoto (bytes) – кадр с лицом в формате JPEG из
request.paramsbbox (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) – координаты рамки с лицом в кадре изrequest.paramsevent_id (uint64) – id обнаруженного на видео лица (автоматически задается компонентом
findface-facerouterпри получении лица отfindface-video-worker). Может использоваться в качестве пользовательского идентификатора лица в базе данных.detection (objects.DetectFace) – результат детекции, полученный от компонента
findface-sf-api, включающий в себя запрошенные параметры лица, такие как вектор признаков, пол, возраст, эмоции.
- Результат
 н/п
- Тип результата
 n/a
- shutdown(self)
 Данный метод вызывается только перед завершением работы компонента
findface-facerouter.- Параметры
 н/п
- Результат
 н/п
Классы объектов
- class objects.BBox
 Представляет собой координаты рамки с лицом.
- class objects.DetectFace
 Представляет собой результат детекции со следующими полями:
- Параметры
 id (string) – id результата детекции в memcached
bbox (objects.Bbox) – координаты рамки с лицом
features (dictionary) – информация о поле (gender), возрасте (age) и эмоциях (emotions) (опционально)
- class objects.DetectResponse
 Представляет собой список объектов
objects.DetectionFaceс дополнительным полемorientation, содержащим информацию об ориентации EXIF лица.- Параметры
 orientation (EXIF orientation) – ориентация обнаруженного лица
- class objects.FaceId(namedtuple('FaceId', ('gallery', 'face')))
 Представляет собой объект пользовательского идентификатора лица в галерее.
- Параметры
 gallery (string) – имя галереи
face (integer) – пользовательский идентификатор лица в галерее
- class objects.Face
 Представляет собой результат поиска лица в базе данных по биометрическому образцу
- Параметры
 id (objects.FaceId) – объект Faceid
features (dictionary) – информация о поле, возрасте и эмоциях
meta (dictionary) – метаданные лица
confidence (float) – степень схожести лица с заданным биометрическим образцом
- class objects.ListResponse
 Представляет собой список объектов
objects.Face(т. е. список результатов поиска по биометрическому образцу) с дополнительным полемnext_page, содержащим информацию о следующей странице с результатами.- Параметры
 next_page (string) – курсор следующей страницы с результатами поиска
Обнаружение лица и работа с галереями
- class ntech.sfapi_client.client.Client
 Предоставляет базовые методы для обнаружения лиц на изображении и работы с галереями.
- detect(self, *, url=None, image=None, facen=False, gender=False, age=False, emotions=False, return_facen=False, autorotate=False, detector: str = None, timeout=None) DetectResponse
 Обнаруживает лица на изображении и возвращает обнаруженные лица.
- Параметры
 url (URL) – URL изображения, если вы передаете общедоступное изображение из интернета
image (bytes) – файл PNG/JPG/WEBP, если вы передаете изображение в виде файла
facen (boolean) – извлечь вектор признаков из обнаруженного лица. Для сохранения результата детекции в memcached передайте
facen=True.gender (boolean) – извлечь и вернуть информацию о поле
age (boolean) – извлечь и вернуть информацию о возрасте
emotions (boolean) – извлечь и вернуть информацию об эмоциях
return_facen (boolean) – вернуть вектор признаков в результате работы метода
autorotate (boolean) – автоматически повернуть изображение в 4-х разных ориентациях для обнаружения лиц в каждой их них. Пересекающиеся направления с IOU > 0.5 будут объединены
detector (boolean) – может принимать значение
nndилиnormalized. Детекторnormalizedиспользуется для обработки нормализованных изображений, например, поступающих от видеодетектора лицtimeout (number) – максимальное время ожидания ответа от ядра FindFace в секундах (если
none, используется время ожидания ответа, заданное по умолчанию)
- Результат
 Результат детекции
- Тип результата
 Объект DetectorResponse
- gallery(self, name)
 Возвращает объект
sfapi_client.Galleryдля последующей с ним работы (например, получения списка лиц).- Параметры
 name (string) – имя галереи
- Результат
 объект типа «галерея»
- Тип результата
 sfapi_client.Gallery
- list_galleries(self, timeout=None):
 Возвращает список галерей.
- Параметры
 timeout (number) – максимальное время ожидания ответа от ядра FindFace в секундах (если
none, используется время ожидания ответа, заданное по умолчанию)- Результат
 список галерей со свойствами
name(имя галереи, строка) иnumber(количество лиц в галереи, число)- Тип результата
 list of GalleryListItem
- class ntech.sfapi_client.gallery.Gallery
 Предоставляет методы для работы с галереями и лицами в них.
- list(self, *, filters: Iterable[filters.Filter] = None, limit: int = 1000, sort: str = '', page=None, ignore_errors=False, timeout=None) ListResponse
 Возвращает объект типа список с лицами из галереи, удовлетворяющими заданным фильтрам. Возвращаемый объект типа список содержит дополнительное свойство
next_page, которое может использоваться как значение параметраpageв последующих запросах.- Параметры
 filters (sfapi_client.filters.Filter) – список фильтров
limit (integer) – максимальное количество лиц в ответе
sort (string) – метод сортировки лиц. Возможные значения:
id(по возрастанию id),-id(по убыванию id),-confidence(по убыванию степени схожести лиц). Сортировка по id возможна только при отключенном фильтреfacen, который задает вектор признаков для поиска в базе данных (т.н. идентификация лица). Наоборот, сортировка по степени схожести лиц (confidence) возможна только при включенном фильтреfacen. По умолчанию метод использует сортировку по возрастанию id (вектор признаков не задан) и по убыванию степени схожести лиц (вектор признаков задан).page – вернуть результаты, начиная с указанной страницы. Номер следующей страницы с результатами возвращается в ответе сервера в виде
next_page.ignore_errors (boolean) – Игнорировать ошибку обращения к базе данных, если поиск по галерее выполняется, когда некоторые сервера базы данных недоступны. В этом случае поиск будет выполнен с использованием доступных серверов.
timeout (number) – максимальное время ожидания ответа от ядра FindFace в секундах (если
none, используется время ожидания ответа, заданное по умолчанию)
- Результат
 список с лицами из галереи, удовлетворяющими заданным фильтрам.
- Тип результата
 ListResponse object
- add(self, new_id: Union[int, Callable], source: Union[DetectFace, Face, str], *, meta: Dict[str, Union[int, str, List[str]]] = None, regenerate_attempts=None, timeout=None) Face
 Создает лицо в галерее.
- Параметры
 new_id (integer or callable) – пользовательский идентификатор лица в базе данных. Может быть (async) callable, который возвращает id. Для генерации id может использоваться функция
ctx.idgen()из контекста.source (sfapi_client.DetectFace, sfapi_client.Face, sfapi_client.FaceId, or string) – источник, из которого лицо добавляется в базу данных, может представлять собой лицо в базе данных или результат детекции.
meta (dictionary) – метаданные лица. Ключи могут быть строками, а значения – целыми числами, строками или списками строк. Перед добавлением метаданных в базе данных должна быть создана соответствующая структура.
regenerate_attempts – количество попыток генерации уникального id функцией
ctx.idgen(), если new_id callable.timeout (number) – максимальное время ожидания ответа от ядра FindFace в секундах (если
none, используется время ожидания ответа, заданное по умолчанию)
- Результат
 представление созданного лица
- Тип результата
 Face object
- delete(self, face: Union[Face, int], timeout=None) None
 Удаляет лицо из галереи.
- Параметры
 face (sfapi_client.Face, sfapi_client.FaceId or id in integer) – лицо, которое нужно удалить из базы данных
timeout (number) – максимальное время ожидания ответа от ядра FindFace в секундах (если
none, используется время ожидания ответа, заданное по умолчанию)
- Результат
 None
- get(self, face: Union[Face, int], timeout=None) Face
 Возвращает лицо из галереи.
- Параметры
 face (sfapi_client.Face, sfapi_client.FaceId or id in integer) – лицо, которое нужно извлечь из базы данных
timeout (number) – максимальное время ожидания ответа от ядра FindFace в секундах (если
none, используется время ожидания ответа, заданное по умолчанию)
- Результат
 представление лица
- Тип результата
 Face object
- create(self, timeout=None) None
 Создает галерею в
findface-sf-apiв виде объектаsfapi_client.Gallery. Объектsfapi_client.Galleryпредставляет собой промежуточный объект, и для работы с ним не требуется наличии галереи на сервере.- Параметры
 timeout (number) – максимальное время ожидания ответа от ядра FindFace в секундах (если
none, используется время ожидания ответа, заданное по умолчанию)- Результат
 None
- drop(self, timeout=None) None:
 Удаляет галерею из
findface-sf-api.- Параметры
 timeout (number) – максимальное время ожидания ответа от ядра FindFace в секундах (если
none, используется время ожидания ответа, заданное по умолчанию)- Результат
 None
- update(self, face: Union[Face, str], *, meta: Dict[str, Union[int, str, List[str]]] = None, timeout=None) Face
 Редактирует метаданные лица в галерее.
- Параметры
 face (sfapi_client.Face, sfapi_client.FaceId or id in integer) – лицо, метаданные которого нужно заменить в базе данных
meta (dictionary) – метаданные лица, которые нужно заменить. Ключи могут быть строками, а значения – целыми числами, строками или списками строк. Если поля meta не передаются или null, они не изменяются в базе данных.
timeout (number) – максимальное время ожидания ответа от ядра FindFace в секундах (если
none, используется время ожидания ответа, заданное по умолчанию)
- Результат
 представление измененного лица
- Тип результата
 Face object
Фильтры для поиска по базе данных
- class ntech.sfapi_client.filters.Filter
 Общий класс. Представляет собой сводный список фильтров (со значениями), которые должны быть применены к содержимому галереи.
- class ntech.sfapi_client.filters.Id
 Предоставляет методы для фильтрации содержимого галереи по id. Для использования фильтра нужно напрямую вызвать соответствующий classmethod, не создавая экземпляр класса.
- classmethod lte(cls, value: int) Filter
 Фильтр LTE. Выбрать все лица с
id, меньшим или равным указанному.- Параметры
 value (integer) – значение id
- Результат
 имя фильтра (LTE) и его значение.
- Тип результата
 объект класса Filter.
Пример:
Id.lte(1234)выбирает лица с id, меньшим или равным1234.
- classmethod gte(cls, value: int) Filter
 Фильтр GTE. Выбрать все лица с
id, большим или равным указанному.- Параметры
 value (integer) – значение id
- Результат
 имя фильтра (GTE) и его значение.
- Тип результата
 объект класса Filter.
Пример:
Id.gte(1234)выбирает лица с id, большим или равным1234.
- classmethod oneof(cls, *value: Union[int]) Filter
 Фильтр IN. Выбрать лица с id из заданной последовательности.
- Параметры
 value (list of integers) – список значений id
- Результат
 имя фильтра (IN) и его значение.
- Тип результата
 объект класса Filter.
Пример:
Id.oneof(1234, 5678)выбирает лицо с id1234и/или5678.
- class ntech.sfapi_client.filters.Meta
 Предоставляет методы для фильтрации содержимого галереи по метаданным. Для использования фильтра нужно напрямую вызвать соответствующий метод, не создавая экземпляр класса.
- classmethod lte(self, value: Union[str, int]) Filter
 Фильтр LTE. Выбрать все лица, у которых определенная строка в метаданных меньше или равна указанному значению.
- Параметры
 value (string or integer) – значение строки с метаданными
- Результат
 имя фильтра (LTE) и его значение.
- Тип результата
 объект класса Filter.
Пример:
Meta(‘foo’).lte(1234)выбирает лица с мета-строкойfoo, имеющей значение меньшее или равное1234.
- classmethod gte(self, value: Union[str, int]) Filter
 Фильтр GTE. Выбрать все лица, у которых определенная строка в метаданных больше или равна указанному значению.
- Параметры
 value (string or integer) – значение строки с метаданными
- Результат
 имя фильтра (GTE) и его значение.
- Тип результата
 объект класса Filter.
Пример:
Meta(‘foo’).gte(1234)выбирает лица с мета-строкойfoo, имеющей значение большее или равное1234.
- classmethod oneof(self, *value: Union[str, int]) Filter
 Фильтр IN. Выбрать все лица, у которых определенная строка в метаданных совпадает с одним из значений из заданной последовательности.
- Параметры
 value (list of strings or integers) – список строк с метаданными
- Результат
 имя фильтра (IN) и его значение.
- Тип результата
 объект класса Filter.
Пример:
Meta.oneof(1234, 5678)выбирает лица с мета-строкой, имеющей значение1234и/или5678.
- classmethod subset(self, *value: str) Filter
 Фильтр SUBSET. Выбрать все лица, у которых определенная строка содержит все значения из указанной последовательности.
- Параметры
 value (list of strings or integers) – список строк с метаданными
- Результат
 имя фильтра (SUBSET) и его значение.
- Тип результата
 объект класса Filter.
Пример:
Meta(‘foo’).subset(“male”, “angry”)выбирает лица с мета-строкойfoo, содержащей все значения из последовательности [“male”, “angry”].
- class ntech.sfapi_client.filters.Detection(Filter)
 Предоставляет метод для идентификации (поиска похожих лиц в базе данных) обнаруженного лица.
- __init__(self, id: Union[str, objects.DetectFace], threshold: float)
 - Параметры
 id (
objects.DetectFaceor temporary face id in memcached returned by sfapi_client.Client.detect(), string) – лицо (результат детекции), которое нужно найти в базе данныхthreshold (float) – минимальная степень схожести лиц от 0 до 1
Пример:
Detection(det1, 0.77)выбирает лица, похожие на результат детекцииdet1со степенью схожести, большей или равной0.77.
- class ntech.sfapi_client.filters.Face(Filter)
 Предоставляет метод для поиска лиц в базе данных, похожих на лицо из галереи.
- __init__(self, id: Union[str, objects.Face], threshold: float)
 - Параметры
 id (
objects.Face,objects.FaceIdor custom face id in the gallery, string) – лицо из базы данных, которое нужно найтиthreshold (float) – минимальная степень схожести лиц от 0 до 1
Пример:
Detection(FaceId(“gal1”, 1234), 0.77)выбирает лица, похожие на лицо с пользовательским идентификатором face1234из галереиgal1со степенью схожести, большей или равной0.77.
Пример использования нескольких фильтров
filters=[filters.Id.gte(123456), filters.Meta('age').gte(45), filters.Meta('camera').oneof('abc', 'def')]
Отображение сообщений об ошибках
- class sfapi_client.SFApiRemoteError
 Данное сообщение об ошибке появляется, если ошибка произошла по причине, отличной от сетевого сбоя.
Сообщение об ошибке содержит как минимум два поля:
code— это код ошибки в видеCAPS_AND_UNDERSCORES, который может быть использован для автоматического преобразования.reason— это описание ошибки, предназначенное для прочтения человеком.
Полный список ошибок
Код ошибки  | 
Описание  | 
|---|---|
  | 
Ошибка неизвестного происхождения.  | 
  | 
Запрос может быть прочитан, однако некоторые параметры метода недействительны. Данный тип ответа содержит дополнительные атрибуты   | 
  | 
Конфликт.  | 
  | 
Ошибка при извлечении из лица вектора признаков.  | 
  | 
Конфигурация системы не соответствует лицензии.  | 
  | 
Запрос неправильно сформирован и не может быть прочитан.  | 
  | 
Превышен размер очередей в компоненте   | 
  | 
В параметре   | 
  | 
В параметре   | 
  | 
Биометрическая база данных недоступна.  | 
  | 
Хранилище memcached недоступно.  | 
  | 
Подходящие лица не найдены.  | 
  | 
Функционал не реализован.  | 
  | 
Подходящие галереи не найдены.  | 
- class sfapi_client.SFApiMalformedResponseError
 Это сообщение об ошибке появляется, если ошибка произошла из-за сбоя в сети, или если Клиент не смог прочитать API-ответ от
findface-sf-api.