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

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

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

  • 10.30 – для real-time идентификации по видео на мобильных платформах (arm)
  • 10.100 – для real-time идентификации по видео на настольных платформах (x86)
  • 9.300, 11.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

Применение/версия SDK Экспертные системы Идентификация в видеопотоке Мобильные платформы
SDK-2.0 method7 method6v2
SDK-2.1 method7 method6v3
SDK-2.2 method7v2 method6v4
SDK-2.3 method7v3 method6v5
SDK-2.5 method7v6 method6v6
SDK-3.0 method7v6 method6v6 method8v6
SDK-3.1 method7v7 method6v7 method8v7
SDK-3.3 method9v300
method9v1000
method6v7 method9v30
SDK-3.4 method9v300
method9v1000
method9v300mask
method9v1000mask
method6v7 method9v30
method9v30mask
SDK-3.11 method9v300
method10v1000
method9v300mask
method9v1000mask
method10v100 method10v30
method9v30mask
SDK-3.13 method9v300
method11v1000
method9v300mask
method9v1000mask
method10v100 method10v30
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
  • method10v30_recognizer.xml – метод 10.30
  • method10v100_recognizer.xml – метод 10.100
  • method10v1000_recognizer.xml – метод 10.1000
  • method11v1000_recognizer.xml – метод 11.1000

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

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

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

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

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

  • recognizer_latest_v30.xml
  • recognizer_latest_v100.xml
  • recognizer_latest_v300.xml
  • recognizer_latest_v1000.xml

При помощи объекта 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 не копируют данные шаблона, они копируют только умные указатели на данные.