Перейти к основному содержимому
Версия: 3.10.0

Идентификация лиц

Face SDK содержит несколько методов идентификации, отличающихся по характеристикам качества распознавания и времени работы.
Менее быстрые методы имеют лучшие показатели по качеству распознавания (характеристики методов представлены в пункте Характеристики идентификации).
В зависимости от качества распознавания и времени работы методы можно разделить на 3 группы в привязке к вариантам использования:

  • 9.30 – для real-time идентификации по видео на мобильных платформах (arm)
  • 6.7 – для real-time идентификации по видео на настольных платформах (x86)
  • 9.300, 9.1000 – для экспертных систем поиска лица по фото

Устаревшая система нумерации методов, используемая в SDK до версии 3.3 (deprecated)

Первая цифра(6.x/7.x/8.x) указывает на качество/скорость метода:

  • 7.x - самые качественные методы, но и самые медленные, используются для идентификации лиц в серверных системах на больших базах данных (более 1 млн лиц).
  • 6.x - более быстрые методы, предназначены для идентификации лиц в видеопотоке в режиме реального вермени на десктопных/серверных платформах (x86). Также эти методы можно применять для идентификации лиц в видеопотоке в современных мобильных платформах (arm) с количеством ядер не менее 4-х и частотой ядер не менее 1.6 ГГц.
  • 8.х - самые быстрые методы, предназначены для идентификации лиц в видеопотоке на мобильных платформах (arm).

Вторая цифра означает версию метода. Более старшие версии выпущены позже и, соответственно, они более качественные, на них можно переходить при обновлении SDK c соответствующих младших версий. Например, если использовался распознаватель 6.6, то при обновлении SDK рекомендуется перейти на его новую версию 6.7, при этом размеры шаблонов и скорость построения шаблона остаются такими же, а качество идентификации повысится.

Актуальная система нумерации методов, используемая в SDK начиная с версии 3.3

Первая цифра(начиная с 9) указывает на версию метода. Чем выше версия, тем лучше качество.
Вторая цифра указывает на примерное время построения шаблона в миллисекундах на современном процессоре x86 с частотой порядка 3ГГц. Чем медленнее метод, тем он качественнее.

  • х.1000 и x.300 - самые качественные методы, но и самые медленные.* Используются для идентификации лиц в серверных системах на больших базах данных (более 1 млн лиц).
  • x.100 - более быстрые методы, предназначены для идентификации лиц в видеопотоке в режиме реального времени на десктопных/серверных платформах (x86). Также эти методы можно применять для идентификации лиц в видеопотоке в современных мобильных платформах (arm) с количеством ядер не менее 4-х и частотой ядер не менее 1.6 ГГц.
  • х.30 - самые быстрые методы, предназначены для идентификации лиц в видеопотоке на мобильных платформах (arm).

В очередной версии SDK могут присутствовать обновления не всех групп методов идентификации, в этом случае можно либо остаться на старом методе идентификации, либо сравнить его качество с новыми методами из более быстрой группы и в случае улучшения качества перейти на новые более быстрые методы. Кроме этого, мы предоставляем рекомендации по использованию конкретных методов идентификации при переходе на более новую версию SDK.

Таблица методов идентификации по применимости в зависимости от версии SDK

Применение/версия SDKSDK-2.0SDK-2.1SDK-2.2SDK-2.3SDK-2.5SDK-3.0SDK-3.1SDK-3.3SDK-3.4
Экспертные системыmethod7method7method7v2method7v3method7v6method7v6method7v7method9v300 method9v1000method9v300 method9v1000 method9v300mask method9v1000mask
Идентификация в видеопотокеmethod6v2method6v3method6v4method6v5method6v6method6v6method6v7method6v7method6v7
Мобильные платформыmethod8v6method8v7method9v30method9v30 method9v30mask

* - Методы могут быть ускорены за счет использования AVX2 (доступно только на Linux x86 64-bit). Для использования набора инструкций AVX2 переместите содержимое директории lib/tensorflow_avx2 в директорию lib. Доступные инструкции Вы можете проверить, выполнив команду grep flags /proc/cpuinfo

Для идентификации лиц необходимо создать объект Recognizer, вызвав метод FacerecService.createRecognizer с указанием файла конфигурации.

Для создания компонента Encoder для одного потока необходимо указать параметры processing_threads_count=true, matching_threads_count=false.
Для создания компонента MatcherDB для одного потока необходимо указать параметры processing_threads_count=false, matching_threads_count=true.

На данный момент существуют следующие файлы конфигурации и методы распознавания:

  • method6_recognizer.xml – метод 6
  • method6v2_recognizer.xml – метод 6.2
  • method6v3_recognizer.xml – метод 6.3
  • method6v4_recognizer.xml – метод 6.4
  • method6v5_recognizer.xml – метод 6.5
  • method6v6_recognizer.xml – метод 6.6
  • method6v7_recognizer.xml – метод 6.7
  • method7_recognizer.xml – метод 7
  • method7v2_recognizer.xml – метод 7.2
  • method7v3_recognizer.xml – метод 7.3
  • method7v6_recognizer.xml – метод 7.6
  • method7v7_recognizer.xml – метод 7.7
  • method8v6_recognizer.xml – метод 8.6
  • method8v7_recognizer.xml – метод 8.7
  • method9v30_recognizer.xml – метод 9.30
  • method9v300_recognizer.xml – метод 9.300
  • method9v1000_recognizer.xml – метод 9.1000

Также доступны следующие файлы конфигурации для распознавания лиц в масках:

  • method9v30mask_recognizer.xml
  • method9v300mask_recognizer.xml
  • method9v1000mask_recognizer.xml

Данные методы позволяют улучшить качество идентификации лиц в масках. Например, для лиц в масках стандартный метод 9v1000 показывает TAR=0.72, а оптимизированный метод 9v1000mask показывает TAR=0.85 при FAR=1E-6.

Примечание: Узнайте, как детектировать и распознавать лица в масках, в нашем туториале.

При помощи объекта Recognizer вы можете:

  • получить имя метода (Recognizer.getMethodName)
  • создать шаблон лица (Recognizer.processing) – вы получите объект Template
  • сравнить два шаблона (Recognizer.verifyMatch) – сравнивать можно только шаблоны, созданные этим же методом (т.е. с таким же конфигурационным файлом)
  • загрузить (десериализовать) шаблон (Recognizer.loadTemplate) – загружать можно только шаблоны, созданные этим же методом (т.е. с таким же конфигурационным файлом)
  • создать индекс TemplatesIndex для быстрого поиска в больших базах (Recognizer.createIndex)
  • выполнить поиск шаблонов в индексе (Recognizer.search)

Пример идентификации 1:N

В примере ниже показано формирование TemplateIndex на основании детекций лиц с одного изображения. Recognizer.search выдает результаты поиска запросного шаблона в индексе в количестве search_k_nearest.

// capture the faces
const std::vector<pbio::RawSample::Ptr> samples = capturer.capture(...);

// make templates
std::vector<pbio::Template::Ptr> templates;
for(size_t i = 0; i < samples.size(); ++i)
{
const pbio::Template::Ptr templ = recognizer.processing(*samples[i]);
templates.push_back(templ);
}

const int search_k_nearest = 1;
const pbio::TemplatesIndex::Ptr index = recognizer->createIndex(templates);
const std::vector<pbio::Recognizer::SearchResult> search_results = recognizer->search(*templates[0], *index, search_k_nearest, pbio::Recognizer::SEARCH_ACCELERATION_1);

При помощи объекта Template вы можете:

  • получить имя метода (Template.getMethodName)
  • сохранить (сериализовать) шаблон (Template.save)

При помощи объекта TemplatesIndex вы можете:

  • получить имя метода (TemplatesIndex.getMethodName)
  • получить количество шаблонов в индексе (TemplatesIndex.size)
  • получить шаблон из индекса по номеру (TemplatesIndex.at)
  • зарезервировать память для поиска (TemplatesIndex.reserveSearchMemory)

Примечание: Методы Recognizer.createIndex и TemplatesIndex не копируют данные шаблона, они копируют только умные указатели на данные.