> For the complete documentation index, see [llms.txt](https://docs.facephi.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.facephi.com/sdks/backend-sdk/selphid/installation/installation_instructions.md).

# Instalación y despliegue del SDK

## 1. Introducción

Este documento incluye la descripción de los componentes proporcionados en el producto **FacePhi SelphID SDK**.

Este producto incorpora varias librerías cuya API permite incorporar en sus soluciones de autenticación e identificación biométrica funcionalidades que utilizan imágenes y/o plantillas faciales, diagnóstico de vida pasivo, validación de datos y extracción de información de documentos de identidad.

A continuación se detallan los componentes proporcionados y los pasos necesarios para instalar el SDK en los sistemas operativos **Windows** y **Linux**.

## 2. Contenido de SelphID SDK

El Software Development Kit, **FacePhi SelphID SDK**, contiene un conjunto de librerías disponibles para los lenguajes de programación Java, .NET y C++ que permiten al desarrollador integrar las principales funcionalidades ofrecidas por este producto:

* Lectura y validación de información de documentos de identidad digitales (OCR).
* Autenticación (1:1) e Identificación (1:N) de usuarios mediante reconocimiento facial, utilizando imágenes o plantillas.
* Diagnóstico de vida pasivo del usuario mediante imágenes (sin necesidad de colaboración del usuario).

El contenido de **SelphID SDK** es el siguiente:

* Librerías en los lenguajes de programación C++, Java y .Net (.Net solo en la versión de Windows).
* Documentación de la Api de Java y de la Api de .Net, ambas en formato html, con información sobre todos los métodos soportados en cada una de las clases.
* Fichero de configuración para la licencia del producto y ficheros de uso y de log.
* Ejemplo de programación de servicios web en .Net/Java.
* Ficheros de cabecera (header) de C++.

Se proporcionan distintos productos para los sistemas operativos Windows y Linux.

* Productos disponibles para Windows.
* **fphi-selphid-sdk-win64\_x.x.x.x** (Windows 64 bits).
* Productos disponibles para Linux.
* **fphi-selphid-sdk-linux64\_x.x.x.x** (distribuciones basadas en Linux Ubuntu).

{% hint style="info" %}
**x.x.x.x** puede variar, y corresponde a la versión del producto proporcionada por **FacePhi**.
{% endhint %}

![](/files/rPUiC5XntgrThIVwXk5F)

## 3. Instalación del SDK

En este capítulo se describen los pasos para instalar SelphID SDK.

### 3.1 Instalación del Software Development Kit

La instalación de SelphID SDK se realiza descomprimiendo el contenido proporcionado en un directorio de su sistema. Los directorios recomendados son los siguientes:

* Directorios de instalación recomendados en Windows: **C:\Program Files\FacePhi\Sdk\SelphId\x.x.x.x**
  * Para descomprimir el SDK de Windows, únicamente es necesario descomprimir el zip en la ruta indicada.
* Directorios de instalación recomendados en Linux: **/opt/facephi/sdk/selphid/x.x.x.x**
  * Para descomprimir el SDK de Linux, es imprescindible hacerlo en el mismo servidor Linux donde se crean los enlaces simbólicos. Para ello, utilice el siguiente comando:

    ```bash
    $ tar -xvzf fphi-selphid-sdk-linux64-x.x.x.x.tar.gz
    ```

{% hint style="info" %}
Siendo "x.x.x.x" la versión del producto suministrada por FacePhi.
{% endhint %}

{% hint style="warning" %}
Tras la instalación, deberían aparecer las siguientes carpetas en el directorio seleccionado:

* Api: Contiene la descripción de la API de programación.
* Bin: Contiene los ficheros binarios.
  * Windows: Librerías de ejecución y aplicaciones.
  * Linux: Aplicaciones.
* Config: Contiene los ficheros de configuración.
* Data: Contiene los ficheros de datos necesarios para el correcto funcionamiento en tiempo de ejecución.
* Doc: Contiene la documentación de la eula y el fichero de versión del sdk.
* Examples: Contiene ejemplos de programación.
* Lib: Contiene los ficheros y librerías necesarios para los procesos de compilación.
  {% endhint %}

### 3.2 Configuración del SDK

Para que las librerías incluidas en el SDK estén disponibles en el sistema, es necesario realizar las acciones descritas a continuación:

* **Crear la variable de entorno FACEPHI\_SELPHID\_INSTALL\_PATH**

  El valor de esta variable de entorno debe contener el directorio de instalación seleccionado en el [punto anterior 3.1](#31-instalación-del-software-development-kit).

  ```bash
  # Windows
  set FACEPHI_SELPHID_INSTALL_PATH=C:\Program Files\FacePhi\Sdk\SelphId\x.x.x.x
  ```

  ```bash
  # Linux
  export FACEPHI_SELPHID_INSTALL_PATH=/opt/facephi/sdk/selphid/x.x.x.x
  ```
* **Añadir el directorio de librerías a la variable de entorno PATH**

  Una vez creada la variable de entorno anterior, incluya el directorio "bin" (para Windows) o "lib/lib" (para Linux) del SDK en la variable de entorno `PATH` (Windows) o `LD_LIBRARY_PATH` (Linux) del sistema:

  ```bash
  # Windows
  set PATH=%PATH%;%FACEPHI_SELPHID_INSTALL_PATH%\bin
  ```

  ```bash
  # Linux
  export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$FACEPHI_SELPHID_INSTALL_PATH/lib/lib
  ```

### 3.3 Variables de entorno

Se pueden establecer distintas variables de entorno para configurar el funcionamiento del SDK:

* `FACEPHI_SELPHID_FACIAL_LICPATH_KEY` (obligatoria). Ruta al fichero `license.lic`. Ej. `/opt/facephi/sdk/selphid/x.x.x.x/config/license.lic`.
* `FACEPHI_SELPHID_DEBUGPATH_KEY` (obligatoria). Ruta al fichero donde se escribirá el log. Ej. `/opt/facephi/sdk/selphid/x.x.x.x/config/selphidDebug.log`.
* `FACEPHI_SELPHID_USAGEPATH_KEY` (obligatoria). Ruta donde se almacenará el fichero de datos de uso. Ej. `/opt/facephi/sdk/selphid/x.x.x.x/config/selphidUsage.db`.
* `FACEPHI_SELPHID_FACIALLIVENESS_PATH_KEY` (obligatoria). Ruta a la carpeta `/data` en su sistema de ficheros local. Ej. `/opt/facephi/sdk/selphid/x.x.x.x/data`.
* `FACEPHI_SELPHID_FACIALAUTHENTICATION_THRESHOLD` (opcional). Valor de similitud 0-100 para determinar si una autenticación es positiva o negativa. Por defecto `65`.
* `FACEPHI_SELPHID_FACIALLIVENESS_THRESHOLD` (opcional). Umbral 0-100 para determinar si una operación de vida es positiva (Live) o negativa (NoLive). Por defecto `50`.
* `FACEPHI_SELPHID_FACIALEXTRACTOR_NUM_THREADS` (opcional) 1-8 Número de hilos (cores) asignados para las operaciones de extracción y autenticación. Por defecto `4`.
* `FACEPHI_SELPHID_FACIALLIVENESS_NUM_THREADS` (opcional) 1-8 Número de hilos (cores) asignados para las operaciones de vida. Por defecto `4`.
* `FACEPHI_SELPHID_FACIALLIVENESS_IAD` (opcional) (`enable` o `disable`) Activa los filtros de `Inyection Attack Detection` para las operaciones de vida. Por defecto `enable`.
* `FACEPHI_SELPHID_FACIALLIVENESS_DEPTH` (opcional) (`partial` o `full`) Especifica la profundidad de las pruebas de vida: `partial` (FPAD *Presentation Attack Detection*), `full` (FPAD + FMAD *Manipulation Attack Detection*). Por defecto `partial`.
* `FACEPHI_SELPHID_GALLERY_REMOVE_METHOD` (opcional) (`erase` o `noerase`) Especifica si los elementos de la galería se eliminarán completamente mediante `SelphIDIdentifier::RemoveWithGalleryIndex()` o se marcarán como no válidos sin ser eliminados. Por defecto `erase`.
* `FACEPHI_SELPHID_FUTURE_TIME_ALLOWED` (opcional) 0-N Especifica el tiempo en segundos durante el cual será válido un token con una fecha futura. Se trata de un valor global que puede sobrescribirse por operación mediante `SelphIDVerifierOptions::SetFutureTimeAllowed()`. Por defecto 0, lo que significa que todos los tokens con fecha futura serán rechazados.

## 4. Licenciamiento del SDK

Para licenciar el producto SelphID SDK, es necesario realizar las acciones descritas a continuación:

### 4.1 Generación de identificadores de máquina

Los identificadores de máquina pueden obtenerse utilizando un terminal y ejecutando el siguiente comando en el directorio donde se encuentra la utilidad: `FACEPHI_SELPHID_INSTALL_PATH\bin` (tanto en Windows como en Linux)

{% hint style="warning" %}
A partir de la versión `6.20.0`, `selphid-license-activator` se ejecuta como una aplicación independiente, sin necesidad de configurar variables de entorno y sin depender de SelphID-SDK.
{% endhint %}

```bash
# Windows ( selphid-license-activator.exe )
cd C:\Program Files\FacePhi\Sdk\SelphId\x.x.x.x\bin
selphid-license-activator.exe -hostid SN > hostid.txt
```

```bash
# Linux ( selphid-license-activator.sh )
$ cd /opt/facephi/sdk/selphid/x.x.x.x/bin
$ ./selphid-license-activator -hostid SN > hostid.txt
```

{% hint style="warning" %}
SN es el número de serie de la licencia que se va a activar y que le proporciona su proveedor de licencias.

El formato del número de serie "SN" es XXXXXX-XXXXXX-XXXXXX-XXXXXX-XXXXXX-XXXXXX.

Ejemplo con el número de serie anterior:

```bash
# Windows ( selphid-license-activator.exe )
selphid-license-activator.exe -hostid XXXXXX-XXXXXX-XXXXXX-XXXXXX-XXXXXX-XXXXXX > hostid.txt
```

```bash
# Linux ( selphid-license-activator.sh )
$ ./selphid-license-activator -hostid XXXXXX-XXXXXX-XXXXXX-XXXXXX-XXXXXX-XXXXXX > hostid.txt
```

{% endhint %}

{% hint style="warning" %}
A partir de la versión `6.15.0`, se habilita el licenciamiento basado en las direcciones MAC de las interfaces de red. En estos casos, las direcciones MAC de las interfaces implicadas en el licenciamiento deben declararse mediante el parámetro `-addr`.

```bash
# Windows ( selphid-license-activator.exe )
selphid-license-activator.exe -hostid HOSTID -addr "74:04:F1:60:EE:A7" -addr "9C:2D:CD:E8:2A:E5" hostid.txt
```

```bash
# Linux ( selphid-license-activator.sh )
$ ./selphid-license-activator -hostid HOSTID -addr "00:15:5D:01:8C:01" > hostid.txt
```

{% endhint %}

Una vez obtenidos los identificadores de máquina, el fichero **hostid.txt** debe enviarse a su proveedor de licencias, para que se pueda generar su licencia (fichero con extensión .lic).

{% hint style="warning" %}
A partir de la versión 6.2.0, existe la posibilidad de **activación en línea** de la licencia. En este caso, el proveedor de licencias le proporcionará un fichero `.lic` sin necesidad de generar identificadores de máquina (no es necesario ejecutar `selphid-license-activator`).
{% endhint %}

### 4.2 Instalación de la licencia

A continuación se describen los pasos necesarios para la instalación de la licencia:

* **Copiar la licencia en el directorio config**

  Para instalar la licencia, simplemente copie el fichero `license.lic` que recibirá de su distribuidor en el directorio `config` situado en la ruta de instalación del SDK: `FACEPHI_SELPHID_INSTALL_PATH\config`
* **Configurar la licencia en el fichero selphid.cfg**

  Una vez copiado el fichero de licencia, establezca el valor de la variable contenida en el fichero **selphid.cfg** con el valor de la ruta donde se encuentra la licencia:

  ```
  # Windows
  FACEPHI_SELPHID_FACIAL_LICPATH_KEY=C:\Program Files\FacePhi\Sdk\SelphId\x.x.x.x\config\license.lic
  ```

  ```
  # Linux
  FACEPHI_SELPHID_FACIAL_LICPATH_KEY=/opt/facephi/sdk/selphid/x.x.x.x/config/license.lic
  ```

{% hint style="info" %}
El directorio `config` es el directorio por defecto para instalar la licencia, aunque es posible instalar la licencia en otro directorio del servidor. Simplemente, será necesario reflejar dicho directorio en el fichero de configuración.
{% endhint %}

<br>

{% hint style="warning" %}
Es imprescindible verificar que los valores de las siguientes variables estén correctamente configurados con rutas existentes en el sistema operativo:

* FACEPHI\_SELPHID\_FACIAL\_LICPATH\_KEY: Ruta al fichero `license.lic`.
* FACEPHI\_SELPHID\_FACIALLIVENESS\_PATH\_KEY: Ruta a la carpeta `/data` de la instalación de SelphID. Necesaria para el diagnóstico de vida pasivo.
* FACEPHI\_SELPHID\_USAGEPATH\_KEY: Ruta al fichero donde se almacenan las estadísticas de uso.
* FACEPHI\_SELPHID\_DEBUGPATH\_KEY: Ruta al fichero donde se almacena la información de depuración. Si se omite, no se generará información de depuración.

Asimismo, es necesario comprobar la fecha de caducidad de la licencia (se encuentra dentro del fichero de licencia, en el campo "dateEnd") para asegurarse de que la licencia es válida y no ha caducado.
{% endhint %}

### 4.3 Instalación del servicio de licencias

El servidor de licencias de SelphID SDK es una aplicación de terminal que se ejecuta en Windows o Linux.

Esta aplicación permite servir licencias de SelphID a nodos cliente sin hostID estático. Sin embargo, este servidor debe ejecutarse en una máquina que disponga tanto de **hostID** como de un puerto de servicio **TCP/UDP** estáticos.

Requisitos:

* Hardware:
  * HostID estático
  * Puerto estático
* Software:
  * SelphID SDK
* **Ejecución del servicio de licencias en un terminal Linux**

  Pasos para ejecutar el servicio de licencias en un terminal de usuario en Linux:

  1. Descomprima SelphID SDK. Ejemplo:

     ```bash
     $ /opt/fphi-selphid-sdk-linux64_X.X.X
     ```

  2. Copie la licencia del servidor al directorio del servidor con permisos `rw`. Ejemplo:

     ```bash
     $ /opt/facephi/fphi-selphid-sdk-linux64_X.X.X/bin
     ```

  3. Exporte la ruta de la librería de SelphID SDK a `LD_LIBRARY_PATH`. Ejemplo:

     ```bash
     $ export \
         LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/opt/facephi/fphi-selphid-sdk-linux64_X.X.X/lib/lib/
     ```

  4. Ejecute la aplicación del servicio de licencias indicando el puerto (-port), la ruta al fichero de licencia del servidor (-lic) y, opcionalmente, la ruta del log del servicio de licencias (-log).

     <div data-gb-custom-block data-tag="hint" data-style="warning" class="hint hint-warning"><p>El servidor de licencias debe iniciarse en modo administrador.</p><pre class="language-bash"><code class="lang-bash">$ sudo LD_LIBRARY_PATH="$LD_LIBRARY_PATH" ./selphid-license-server -lic license-server.lic -port 15000
     </code></pre></div>

  * Ejemplo escribiendo el log en disco y en consola:

    ```bash
    $ cd /opt/facephi/fphi-selphid-sdk-linux64_X.X.X/bin
    $ sudo LD_LIBRARY_PATH="$LD_LIBRARY_PATH" ./selphid-license-server -lic license-server.lic -port 15000 -log /home/user/serverlogs
    ```

    <div data-gb-custom-block data-tag="hint" data-style="warning" class="hint hint-warning"><p>El parámetro <code>-log</code> hará referencia a un directorio y no a un fichero. Esto se debe a la implementación de la rotación de logs.</p></div>

  * Ejemplo con log en consola:

    ```bash
    $ cd /home/user/facephi/fphi-selphid-sdk-linux64_X.X.X/bin
    $ sudo LD_LIBRARY_PATH="$LD_LIBRARY_PATH" ./selphid-license-server -lic license-server.lic -port 15000
    ```

  5. El servidor de licencias puede haberse configurado para activación en línea o sin conexión. El modo de licenciamiento estará embebido en el fichero `.lic`. En el caso de la activación sin conexión, el servidor proporcionará una clave de activación la primera vez que arranque.

     ```bash
     $ sudo LD_LIBRARY_PATH="$LD_LIBRARY_PATH" ./selphid-license-server -lic license-server.lic -port 15000 -log /home/user/serverlogs

     Activation code
     ---------------
     eZPm5npMD2pYwV71uRDcWBcv7wLSoPh/4de763Lo5V7IPYMnhjj03foGyqTu180dT...
     ```

  * Esta clave de activación debe enviarse a su proveedor de licencias, para que su licencia `.lic` pueda actualizarse.
  * La actualización de la licencia incluirá el código de activación para el servidor, que ya podrá iniciarse sin necesidad de conexión a Internet.

    ```bash
    $ sudo LD_LIBRARY_PATH="$LD_LIBRARY_PATH" ./selphid-license-server -lic license-server.lic -port 15000 -log /home/user/serverlogs

    [2023-10-03 15:44:47+02:00] INF Starting floating license server...
    [2023-10-03 15:44:47+02:00] INF Total number of available floating licenses: 20
    [2023-10-03 15:44:47+02:00] INF Listening on port: 15000
    ```

  <div data-gb-custom-block data-tag="hint" data-style="warning" class="hint hint-warning"><p>En el caso de la <strong>activación en línea</strong>, el servidor se iniciará la primera vez sin que el fichero <code>.lic</code> requiera actualizaciones.</p></div>
* **Ejecución del servicio de licencias como servicio del sistema Linux**

  Pasos para ejecutar el servicio de licencias como un servicio del sistema en Linux:

  1. Siga los pasos 1 y 2 de las instrucciones anteriores.
  2. Ejecute la aplicación como una aplicación de arranque del sistema editando el crontab: `$crontab -e:`
* **Configuración de variables de entorno**

  ```bash
  $ export \
      LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/opt/facephi/fphi-selphid-sdk-linux64_X.X.X/lib/lib/
  ```
* **Ejecutar el servidor de licencias de SelphID al reiniciar el sistema**

  ```bash
  $ @reboot \
      /opt \
      /facephi/fphi-selphid-sdk-linux64_X.X.X/bin/selphid-license-server \
      -lic /opt/ facephi/fphi-selphid-sdk-linux64_X.X.X/bin/license-server.lic \
      -port 15000 \
      -log /opt/facephi/fphi-selphid-sdk-linux64_X.X.X/bin/logFile.txt
  ```

  1. Reinicie el sistema. Ejemplo: `$sudo shutdown -r now`
  2. Compruebe en el fichero de log que las licencias se están sirviendo correctamente. Ejemplo:

     ```bash
     $ cat \
         /opt/facephi/fphi-selphid-sdk-linux64_X.X.X/bin/logFile.txt

     # Output
     <Date> - Listening: 127.0.0.1:15000
     <Date> - Listening: \<IP>:15000
     ```
