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

Подключение Face SDK к проекту

Добавление библиотеки в проект

Требуемые зависимости

Для работы с Face SDK Вам необходимо установить следующие зависимости:

  • Windows: библиотека sense4.dll. Эта библиотека находится в дистрибутиве Face SDK в папке bin и должна оставаться рядом с библиотекой facerec.dll в случае перемещения.
  • Windows 64-bit: библиотека tensorflow.dll при ускорении GPU/AVX2. Эта библиотека находится в дистрибутиве Face SDK в папке bin. Она должна располагаться в директории, из которой запускается приложение, либо необходимо добавить путь до директории с этой библиотекой в системную перемнную PATH
  • Windows 64-bit: Microsoft Visual C++ Redistributable for Visual Studio 2019
  • Linux библиотека libusb-0.1.so.4
  • Linux 64-bit: библиотека libtensorflow.so.2 при ускорении GPU/AVX2. Эта библиотека находится в дистрибутиве Face SDK в папке lib

C++

Бибилотека libfacerec загружается динамически во время выполнения при вызове статического метода pbio::FacerecService::createService, поэтому не нужно линковать программу с libfacerec.so (Linux) или facerec.dll (Windows). Необходимо только добавить каталог include к директориям заголовочных файлов и для проектов под Linux – слинковать с библиотекой libdl с флагом -export-dynamic.

Предупреждение: Вызывать pbio::FacerecService::createService можно только один раз, иначе может произойти сбой.

Все объявления libfacerec находятся в двух заголовочных файлах:

  • facerec/import.h – должен быть включен ровно один раз (например, в main.cpp)
  • facerec/libfacerec.h – должен быть включен в каждом файле, использующем библиотеку

Библиотека libfacerec не имеет фактических сторонних зависимостей, т.к. все использованные сторонние библиотеки (см. Лицензии свободного ПО) слинкованы статически, поэтому для примеров, в которых используется OpenCV или boost, должны подходить любые версии указанных библиотек.

* – за исключением дистрибутивов linux_x86_64 и windows_x86_64 при использовании ускорения GPU/AVX2 в таких случаях используется зависимость от libtensorflow.so.2 или tensorflow.dll соответственно.

Версия библиотеки

Текущая версия библиотеки может быть получена путем вызова метода get_version от созданного объекта FacerecService. При этом будет возвращена строка формата x.yy.zz, где x – основная версия, yy – дополнительная версия, zz – версия патча.

Для C++ версию дополнительно можно получить из констант препроцессора:

  • LIBFACEREC_VERSION – строковое представление, аналогично формату FacerecService.get_version()
  • LIBFACEREC_VERSION_HEX – трехбайтовое представление версии, удобное для численного сравнения, например, 0x010234

Java

Для использования facerec.jar в проекте укажите путь до этого файла в classpath. Java-библиотека facerec.jar является оберткой над C++ библиотекой, поэтому необходимо наличие libfacerec_jni.so и libfacerec.so для Linux и Android или facerec_jni.dll и facerec.dll для Windows во время выполнения. Путь до директории, содержащей libfacer_jni.so или facerec_jni.dll, должен быть указан в java.library.path.

C#

Для использования библиотеки необходимо добавить ссылку на FacerecCSharpWrapper.dll в ваш проект. После сборки проекта добавьте facerec.so (для Linux) или facerec.dll (для Windows) и FacerecCSharpWrapper.dll в директорию с исполняемым файлом.

Использование библиотеки libfacerec

Работа с библиотекой libfacerec начинается с вызова статического метода FacerecService.createService, который динамически загрузит библиотеку.

Метод FacerecService.createService иммеет перегруженную сигнатуру и может быть вызван:

  • с указанием пути до директории с лицензией (из которой будет подгружена лицензия 3divi_face_sdk.lic)
  • с передачей лицензии в виде специальной структуры: FacerecService.License

Предупреждение: Вызывать FacerecService.createService можно только один раз, иначе может произойти сбой.

Примечание: Вам не обязательно удерживать объект FacerecService все время работы с библиотекой. Библиотека libfacerec автоматически выгрузится, когда не останется интерфейсных объектов.

Примеры

#include <iostream>
#include <exception>
#include <facerec/import.h>
#include <facerec/libfacerec.h>
int main (int argc, char** argv)
{
try
{
pbio::FacerecService::Ptr service;
#ifdef _WIN32
service = pbio::FacerecService::createService("../bin/facerec.dll", "../conf/facerec/");
#else
service = pbio::FacerecService::createService("../lib/libfacerec.so", "../conf/facerec/");
#endif
const pbio::Recognizer::Ptr recognizer = service->createRecognizer("method7v7_recognizer.xml");
pbio::FacerecService::Config capturer_config("common_capturer4_fda.xml");
capturer_config.overrideParameter("min_size", 200);
pbio::Capturer::Ptr capturer = service->createCapturer(capturer_config);
// ...
}
catch(const pbio::Error &e)
{
std::cerr << "facerec exception catched: '" << e.what() << "' code: " << std::hex << e.code() << std::endl;
}
catch(const std::exception &e)
{
std::cerr << "exception catched: '" << e.what() << "'" << std::endl;
}
}

Примеры вызова метода createService с предварительно загруженной (сохраненной в строковой переменной) лицензией

std::string license_body = "<?xml version="1.0" encoding="utf-8"?><License>........"; // contents of your license
auto license = pbio::FacerecService::License(license_body);
const pbio::FacerecService::Ptr service = pbio::FacerecService::createService("../bin/facerec.dll", "../conf/facerec/", license);