Перейти к основному содержимому
Версия: 3.26.0 (последняя)

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

Для начала работы с Face SDK вам нужно добавить библиотеку libfacerec в свой проект. libfacerec — это основная библиотека, в которой реализованы ключевые функции Face SDK, включая детекцию, оценку атрибутов и идентификацию/верификацию.

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

C++

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

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

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

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

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

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

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

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

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

Чтобы подробнее узнать о работе Face SDK в проектах на C++, ознакомьтесь с набором C++ сэмплов].

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.

Чтобы подробнее узнать о работе Face SDK в проектах на Java, ознакомьтесь с набором Java сэмплов].

C#

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

Чтобы подробнее узнать о работе Face SDK в проектах на C#, ознакомьтесь с набором C# сэмплов].

Python

Примечание. Поддерживается Python 3.6 или выше. Перед началом установки необходимо установить пакет setuptools.

Пакет face_sdk_3divi позволяет использовать библиотеку libfacerec в проекте на Python. Чтобы установить пакет, перейдите в каталог python_api и выполните команду pip3 install .

Чтобы подробнее узнать о работе Face SDK в проектах на Python, ознакомьтесь с набором Python сэмплов].

NodeJS

Примечание. Поддерживается Node v18.20.8 или выше.

Пакет face_sdk_3divi позволяет использовать библиотеку libfacerec в проекте на NodeJS. Чтобы установить пакет, вызовите в своем проекте npm install /path/to/FaceSDK/node_js.

Go

Поддерживается только Linux.

Для сборки и запуска исполняемого файла вам понадобятся переменные:

  • CGO_LDFLAGS="-L<path_to_face_sdk_lib_directory> -lfacerec"
  • LD_LIBRARY_PATH=<path_to_face_sdk_lib_directory>

Пакет facesdk позволяет использовать библиотеку libfacerec в проекте на языке Go. Чтобы использовать пакет, добавьте следующую строку в ваш проект:

import (facesdk "github.com/3DiVi/Go-API")

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

Работа с библиотекой libfacerec начинается с вызова статического метода FacerecService.createService, который динамически загрузит библиотеку. Результатом работы метода является интерфейсный объект FacerecService, который используется для создания других интерфейсных объектов, в том числе Contexts, ProcessingBlocks и DynamicTemplateIndexes.

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

Для инициализации библиотеки libfacerec вызовите метод FacerecService.createService со следующими аргументами:

  • dll_path: Абсолютный или относительный путь до файла библиотеки - libfacerec.so на Linux или facerec.dll на Windows.
  • facerec_conf_dir: Абсолютный или относительный путь до каталога с конфигурационными файлами (каталог face_sdk/conf/facerec/ в дистрибутиве).
  • license_dir: Абсолютный или относительный путь до директории с лицензией, иначе остается пустая строка. В случае пустой строки поиск файла лицензии выполняется сначала в каталоге face_sdk/license/, затем в каталоге face_sdk/conf/facerec/.
примечание

В NodeJS нужно вызвать функцию Init из пакета face_sdk_3divi с теми же параметрами.

Пример

В примере показана инициализация библиотеки libfacerec с использованием метода FacerecService.createService.

#include <iostream>
#include <exception>
#include <facerec/import.h>
#include <facerec/libfacerec.h>
int main (int argc, char** argv)
{
try
{
std::string faceSDKRootDir = "/path/to/face_sdk";

#ifdef _WIN32
std::string dll_path = faceSDKRootDir + "/bin/facerec.dll";
#else
std::string dll_path = faceSDKRootDir + "/lib/libfacerec.so";
#endif
std::string conf_dir = faceSDKRootDir + "/conf/facerec/";
std::string license_dir = faceSDKRootDir + "/license/";

pbio::FacerecService::Ptr service;
service = pbio::FacerecService::createService(dll_path, conf_dir, license_dir);

pbio::Context detectorConfig = service->createContext();
pbio::Context fitterConfig = service->createContext();
pbio::Context faceExtractorConfig = service->createContext();

detectorConfig["unit_type"] = "FACE_DETECTOR";
fitterConfig["unit_type"] = "FACE_FITTER";
faceExtractorConfig["unit_type"] = "FACE_TEMPLATE_EXTRACTOR";

pbio::ProcessingBlock faceDetector = service->createProcessingBlock(detectorConfig);
pbio::ProcessingBlock faceFitter = service->createProcessingBlock(fitterConfig);
pbio::ProcessingBlock faceExtractor = service->createProcessingBlock(faceExtractorConfig);
// ...
}
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;
}
}