> 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/docs.facephi-pt-br/sdks/sdk-mobile/android-sdk/componentes-modulos/captura-facial-con-iad.md).

# Captura facial com IAD - Selphi

> #### **Diferenças em relação à captura facial padrão**
>
> O **Componente Selphi IAD** é funcionalmente equivalente ao **Componente Selphi** padrão, incorporando controles adicionais de segurança voltados à detecção de ataques de injeção de vídeo e ambientes de captura não confiáveis.
>
> A integração, configuração e fluxo de uso do componente são os mesmos. A principal diferença funcional é a inclusão do campo `iad` no resultado (`SelphiResult`), que contém as informações da análise antifraude preparadas para verificação no servidor.
>
> Para seu uso, é necessária uma nova licença e substituir a dependência do componente padrão por:
>
> ```java
> implementation "com.facephi.androidsdk:selphi_iad_component:$version"
> ```

{% hint style="info" %}
Este componente tem duas restrições importantes:

* Dispositivos com **mínimo de 3 GB de RAM**.
* **Câmera frontal** com preview de **1920x1080 ou superior**.
  {% endhint %}

## Introdução <a href="#id-1-introduccion" id="id-1-introduccion"></a>

A captura facial com detecção de ataques de injeção de vídeo é realizada por meio do **Componente Selphi IAD**.

Este componente é responsável por capturar uma selfie do usuário e extrair suas características faciais mais relevantes, incorporando um conjunto de controles de segurança preventivos voltados para detectar ambientes não confiáveis. Durante o processo, são realizados, entre outros, os seguintes passos:

* Gestão interna de câmeras e permissões.
* Detecção de tentativas de suplantação por meio de vídeos ou fontes de câmera manipuladas.
* Assistência guiada durante a captura facial.
* Geração de templates biométricos e imagens do usuário.

Na seção [Lançamento simplificado](#id-4-lanzamiento-simplificado) são descritos os passos básicos para a Integração do SDK. Nesta página são detalhadas as informações específicas necessárias para iniciar e configurar este componente.

***

## Dependência <a href="#id-2-dependencia" id="id-2-dependencia"></a>

A dependência específica do componente é:

```kotlin
implementation "com.facephi.androidsdk:selphi_iad_component:$version"
```

***

## Controladores disponíveis

Este componente inclui vários controladores, cada um voltado para uma funcionalidade específica.

| Controlador                 | Descrição                                               |
| --------------------------- | ------------------------------------------------------- |
| `SelphiController`          | Controlador principal de Reconhecimento Facial          |
| `RawTemplateController`     | Geração de um `RawTemplate` a partir de uma imagem      |
| `SignatureSelphiController` | Assinatura de um processo utilizando uma Captura Facial |

***

## Lançamento simplificado <a href="#id-4-lanzamiento-simplificado" id="id-4-lanzamiento-simplificado"></a>

Uma vez iniciado o SDK e criada uma nova operação, o componente pode ser iniciado utilizando qualquer um de seus controladores.

```kotlin
val response = SDKController.launch(
    SelphiController(SelphiConfigurationData(...))
)
when (response) {
    is SdkResult.Error -> Napier.d("Selphi: ERROR - ${response.error.name}")
    is SdkResult.Success -> response.data
}
```

***

## Configuração básica <a href="#id-5-configuracion-basica" id="id-5-configuracion-basica"></a>

Para iniciar o componente é necessário criar um objeto `SelphiConfigurationData`, que define o comportamento do Widget.

```kotlin
SelphiConfigurationData(
  resourcesPath = "resources_file.zip",
  livenessMode = SelphiFaceLivenessMode.NONE
)
```

O componente permite os seguintes modos de detecção de vida:

* `SelphiFaceLivenessMode.NONE`
* `SelphiFaceLivenessMode.PASSIVE`
* `SelphiFaceLivenessMode.MOVE`

***

## Recebimento do resultado <a href="#id-6-recepcion-del-resultado" id="id-6-recepcion-del-resultado"></a>

O resultado da inicialização é retornado como um objeto `SdkResult`, que pode indicar um resultado correto ou um erro (nos dados do resultado virá o campo que contém as informações associadas ao IAD [Recebimento do resultado correto - data](https://app.gitbook.com/o/-M73Nx_oBKHNUEMhXiku/s/Uo71Qbj6jZQDavjc0U5X/~/edit/~/changes/537/soluciones-y-sdks/sdk-mobile/android-sdk/componentes-modulos/captura-facial-con-iad#id-62-recepcion-del-resultado-correcto-data))

```kotlin
when (response) {
    is SdkResult.Error -> Napier.d("ERROR - ${response.error}")
    is SdkResult.Success -> response.data
}
```

### Recebimento de erros <a href="#id-61-recepcion-de-errores" id="id-61-recepcion-de-errores"></a>

Os erros serão retornados como um objeto 'SelphiError'.

Lista de erros:

* SPI\_ACTIVITY\_RESULT\_ERROR: O resultado da activity está incorreto.
* SPI\_ACTIVITY\_RESULT\_MSG\_ERROR: O resultado da activity recebido em msg está incorreto.
* SPI\_APPLICATION\_CONTEXT\_ERROR: O contexto de aplicação necessário é nulo.
* SPI\_BAD\_EXTRACTOR\_CONFIGURATION\_ERROR: Widget: Configuração incorreta do extrator.
* SPI\_CAMERA\_PERMISSION\_DENIED: O usuário recusou as permissões.
* SPI\_CANCEL\_BY\_USER: O usuário cancelou o processo.
* SPI\_CANCEL\_LAUNCH: Foi realizado um cancelamento geral do SDK.
* SPI\_COMPONENT\_LICENSE\_ERROR: A licença do componente não está correta.
* SPI\_CONTROL\_NOT\_INITIALIZATED\_ERROR: Widget: Erro de inicialização.
* SPI\_EMPTY\_LICENSE: A String da licença está vazia.
* SPI\_EXTRACTION\_LICENSE\_ERROR: Widget: Erro de licença.
* SPI\_FETCH\_DATA\_ERROR: Erro na coleta do resultado.
* SPI\_FLOW\_ERROR: Erro no processo de fluxo.
* SPI\_HARDWARE\_ERROR: Widget: Erro de hardware.
* SPI\_INITIALIZATION\_ERROR: Erro de inicialização.
* SPI\_MANAGER\_NOT\_INITIALIZED: Os managers estão nulos.
* SPI\_NO\_DATA\_ERROR: Os dados de entrada estão nulos.
* SPI\_OPERATION\_NOT\_CREATED: Não há nenhuma operação em andamento.
* SPI\_RESOURCES\_NOT\_FOUND: Não foi encontrado o zip de recursos.
* SPI\_SETTINGS\_PERMISSION\_ERROR: Widget: Erro de permissões.
* SPI\_TEMPLATE\_ERROR:
* SPI\_TIMEOUT: Timeout no processo.
* SPI\_UNEXPECTED\_CAPTURE\_ERROR: Widget: Erro na captura.
* SPI\_UNKNOWN\_ERROR: Erro desconhecido.
* SPI\_WIDGET\_RESULT\_DATA\_ERROR: Erro nos dados de saída do widget.

### Recebimento do resultado correto - *data* <a href="#id-62-recepcion-del-resultado-correcto-data" id="id-62-recepcion-del-resultado-correcto-data"></a>

Quando o resultado é correto (`SdkResult.Success`), obtém-se um objeto `SelphiResult`.

As imagens são retornadas no formato `SdkImage`. É possível acessar o bitmap por meio de `image.bitmap`.\
Para converter uma imagem para Base64:

```kotlin
Base64.encodeToString(this.toByteArray(), Base64.NO_WRAP)
```

#### Campos retornados

* `templateRaw`\
  Template bruto gerado após a extração. Válido para processos de Matching.
* `template`\
  Template processado após a extração. Válido para processos de Matching.
* `bestImage`\
  Melhor imagem capturada na resolução original. Esta imagem tem o tamanho original extraído da câmera. Válida para o processo de Liveness.
* `bestImageCropped`\
  Imagem recortada centralizada no rosto do usuário. É obtida a partir da *bestImage*.
* `logImages`\
  Lista com as 5 melhores imagens (requer `logImages = true`).
* `bestImageTokenized`\
  Melhor imagem criptografada do processo. Válida para o processo de Liveness.
* `bestImageTokenized`\
  Melhor imagem criptografada do processo. Válida para o processo de Liveness.
* `iad`\
  Informações obtidas na análise de ataques de injeção de vídeo, preparadas para envio ao serviço de verificação.
* `livenessDiagnostic`\
  Informações do processo de verificação que confirmam que a pessoa está fisicamente presente e é real.

***

## Informações avançadas <a href="#id-7-informacion-avanzada" id="id-7-informacion-avanzada"></a>

### Controladores Adicionais <a href="#id-71-controladores-adicionales" id="id-71-controladores-adicionales"></a>

**SignatureSelphiController**

Funciona de forma equivalente a `SelphiController`, com a diferença de que gera um arquivo de assinatura na plataforma.

**RawTemplateController**

Permite gerar um `RawTemplate` a partir de uma imagem (`Bitmap`).

Exemplo de uso:

```kotlin
val result = SDKController.launch(
    RawTemplateController(SdkImage(image))
)
when (result) {
    is SdkResult.Error -> Napier.d("GenerateRaw: KO - ${result.error}")
    is SdkResult.Success -> result.data
}
```

### Configuração avançada

O comportamento do componente é definido por `SelphiConfigurationData`.

#### Parâmetros disponíveis

* `resourcesPath`\
  Nome do arquivo ZIP de recursos (localizado em `assets`). Exemplo: “resources-selphi-2-0.zip“.

<div align="center"><figure><img src="/files/abc495fbb6dc31dd0f1807595067d37007b5e247" alt=""><figcaption></figcaption></figure></div>

* `cropPercent`\
  Percentual de corte do rosto. Quanto maior o número, maior será o corte do retângulo em relação ao rosto.
* `cropImageDebug`\
  Mostra informações de depuração do corte.
* `showResultAfterCapture`\
  Mostra uma tela de confirmação após a captura. É dada ao usuário a possibilidade de repetir o processo de captura se a imagem obtida não estiver correta.
* `showTutorial`\
  Ativa a tela de tutorial. Explica de forma intuitiva como a captura é realizada.
* `livenessMode`\
  Modo de detecção de vida (`NONE`, `PASSIVE`, `MOVE`).
  * SelphiFaceLivenessMode.NONE: Indica que o modo de detecção de foto não deve ser ativado nos processos de autenticação.
  * SelphiFaceLivenessMode.PASSIVE: Indica que o teste de vida passivo é realizado no servidor, enviando para esse fim a “BestImage” ou o “TemplateRaw” correspondente.
  * SelphiFaceLivenessMode.MOVE: Indica que o teste de vida é ativo, exibindo instruções durante a captura e retornando o resultado correspondente do processo.
* `stabilizationMode`\
  Obriga o usuário a manter a cabeça estável antes da captura, olhando para a frente e sem mover a cabeça.
* `cameraFlashEnabled`\
  Ativa o flash da câmera.
* `fullscreen`\
  Prioriza a visualização em tela cheia.
* `templateRawOptimized`\
  Otimiza o `templateRaw` gerado.
* `qrMode`\
  Ativa a leitura de Código QR prévia ao processo de autenticação.
* `videoFilename`\
  Caminho absoluto para gravar o vídeo do processo. A aplicação é responsável por solicitar as permissões necessárias ao telefone, caso sejam requeridas.
* `viewsContent`\
  Configuração avançada de views por meio de XML. Esta propriedade não altera o conteúdo do arquivo de recursos.
* `showDiagnostic`\
  Mostra telas de diagnóstico.
* `logImages`\
  Retorna as 5 melhores imagens capturadas.
* `showPreviousTip`\
  Mostra uma tela informativa antes da captura.
* `extractionDuration`\
  Duração do processo de extração.
* `cameraPreferred`\
  Câmera preferida (`FRONT`, `BACK`).
* `vibrationEnabled`\
  Feedback de vibração ao finalizar.
* `moveSuccessfulAttempts`\
  Tentativas permitidas em capturas corretas (por padrão 1).
* `moveFailedAttempts`\
  Tentativas permitidas em capturas incorretas (por padrão 2).

***

## Personalização do componente <a href="#id-8-personalizacion-del-componente" id="id-8-personalizacion-del-componente"></a>

Além das alterações que podem ser feitas no nível do SDK (explicadas em [Personalização do SDK](/docs.facephi-pt-br/sdks/sdk-mobile/android-sdk/personalizacion.md)), este componente permite sua própria Personalização.

### Textos <a href="#id-81-textos" id="id-81-textos"></a>

Os textos podem ser personalizados sobrescrevendo os valores em um arquivo XML de strings.

| **Name**                                        | **Valor**                                                                                                      |
| ----------------------------------------------- | -------------------------------------------------------------------------------------------------------------- |
| selphi\_component\_timeout\_title               | Tempo esgotado                                                                                                 |
| selphi\_component\_timeout\_desc                | Não conseguimos identificá-lo. Tente novamente                                                                 |
| selphi\_component\_internal\_error\_title       | Houve um problema técnico                                                                                      |
| selphi\_component\_internal\_error\_desc        | Pedimos desculpas. Não foi possível fazer a captura                                                            |
| selphi\_component\_tip\_message                 | Coloque seu rosto no centro do círculo                                                                         |
| selphi\_component\_tip\_message\_alt            | Coloque seu rosto no centro do círculo                                                                         |
| selphi\_component\_tip\_anim\_alt               | Uma pessoa mostra seu rosto dentro do círculo e a aplicação tira uma foto dela.                                |
| selphi\_component\_tip\_title                   | Reconhecimento Facial                                                                                          |
| selphi\_component\_tip\_button                  | COMEÇAR                                                                                                        |
| selphi\_component\_tip\_button\_alt             | Iniciar captura de rosto                                                                                       |
| selphi\_component\_tip\_move\_message           | Coloque seu rosto no centro do círculo e siga as instruções                                                    |
| selphi\_component\_tip\_move\_message\_alt      | Coloque seu rosto no centro do círculo e siga as instruções                                                    |
| selphi\_component\_tip\_move\_anim\_alt         | Uma pessoa mostra seu rosto dentro do círculo, o move levemente para um lado e a aplicação tira uma foto dela. |
| selphi\_component\_tip\_move\_title             | Reconhecimento Facial                                                                                          |
| selphi\_component\_tip\_move\_button            | COMEÇAR                                                                                                        |
| selphi\_component\_qr\_tip\_title               | Escaneie o Código QR                                                                                           |
| selphi\_component\_qr\_tip\_message             | Aponte o Código QR dentro da moldura                                                                           |
| selphi\_component\_qr\_tip\_anim\_alt           | Aponte o Código QR dentro da moldura                                                                           |
| selphi\_component\_qr\_tip\_button              | Começar                                                                                                        |
| selphi\_component\_tip\_close\_button\_alt      | Voltar                                                                                                         |
| selphi\_component\_tip\_info\_button\_alt       | Ver dicas                                                                                                      |
| selphi\_component\_tutorial\_message\_1         | Coloque seu rosto no centro e olhe de frente para a câmera.                                                    |
| selphi\_component\_tutorial\_message\_2         | Remova qualquer elemento que cubra seu rosto.                                                                  |
| selphi\_component\_tutorial\_message\_3         | Procure um ambiente bem iluminado, sem sombras sobre o seu rosto.                                              |
| selphi\_component\_tutorial\_1\_anim\_alt       | A foto é tirada quando a pessoa está no centro.                                                                |
| selphi\_component\_tutorial\_2\_anim\_alt       | Uma pessoa tira os óculos de sol e afasta o cabelo dos olhos.                                                  |
| selphi\_component\_tutorial\_3\_anim\_alt       | A imagem aparece escura e uma pessoa acende a luz.                                                             |
| selphi\_component\_tutorial\_close\_button\_alt | Voltar ao tutorial anterior                                                                                    |

### Animações <a href="#id-82-animaciones" id="id-82-animaciones"></a>

As animações Lottie podem ser sobrescritas adicionando os arquivos com o mesmo nome em `res/raw/`.

```
selphi_anim_prev_tip.json
selphi_anim_prev_tip_move.json
selphi_anim_tuto_m_1.json
selphi_anim_tuto_m_2.json
selphi_anim_tuto_m_3.json
```
