> 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/ios-sdk/modulos/video-identificacion.md).

# Videoidentificação - VideoID

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

A Captura Facial é realizada com o ***Componente VideoID***.

Este componente é responsável por realizar a gravação de um usuário se identificando, mostrando seu rosto e seu Documento de identidade.

* Gestão interna de câmeras, microfone e permissões.
* Conexão com os serviços.
* Leitura do OCR e captura do documento.

Na seção de [Lançamento simplificado](/docs.facephi-pt-br/sdks/sdk-mobile/ios-sdk/inicializacion/lanzamiento-simplificado.md) são detalhados os passos necessários para a integração básica do SDK. Nesta seção é adicionada a informação para o lançamento deste componente.

## Dependência

Para evitar conflitos e problemas de compatibilidade, caso queira instalar o componente em um projeto que contenha uma Versão antiga das bibliotecas da Facephi (*Widgets*), eles deverão ser removidos completamente antes da instalação dos componentes da ***SDKMobile***.

### **CocoaPods**

* As dependências obrigatórias que devem ter sido instaladas previamente (adicionando-as no arquivo Podfile do projeto) são:

```
pod 'FPHISDKMainComponent', '~> $VERSION'
```

* Para instalar o componente de NFC, deverá ser incluída a seguinte entrada no Podfile do aplicativo:

```
pod 'FPHISDKVideoIDComponent', '~> $VERSION'
```

### **SPM**

* As dependências obrigatórias que deverão ter sido instaladas previamente são:

```
//HTTPS
https://github.com/facephi-clienters/SDK-SdkPackage-SPM.git
//SSH
git@github.com:facephi-clienters/SDK-SdkPackage-SPM.git

```

* Para instalar o componente de VideoID, deverá ser incluído nos módulos do projeto:

```
//HTTPS
https://github.com/facephi-clienters/SDK-VideoIDPackage-SPM.git
//SSH
git@github.com:facephi-clienters/SDK-VideoIDPackage-SPM.git
```

## Permissões

No aplicativo cliente em que os componentes forem integrados, é necessário incorporar os seguintes elementos no arquivo **Info.plist**:

```
É necessário permitir o uso da câmera (Privacy - Camera Usage Description)
É necessário permitir o uso do microfone (NSMicrophoneUsageDescription - Privacy - Microphone Usage Description)
```

## Controladores disponíveis <a href="#id-4-controladores-disponibles" id="id-4-controladores-disponibles"></a>

| **Controlador**            | **Descrição**                                        |
| -------------------------- | ---------------------------------------------------- |
| VideoIdController          | Controlador principal de videoidentificação          |
| SignatureVideoIdController | Controlador para assinar um processo com uma captura |

## 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, será possível lançar o componente. Será possível fazer uso de qualquer um de seus controladores para executar sua funcionalidade.

Lançamento:

```
let controller = VideoIdController(
  data: videoIdConfigurationData,
  output: { sdkResult in
    // Do whatever with the result
    ...
  }, viewController: viewController)
SDKController.shared.launch(controller: controller)
```

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

Para iniciar o componente atual, deverá ser criado um objeto *VideoIdConfigurationData* que será a configuração do controlador do componente.

A configuração básica necessária é a seguinte:

```swift
static var videoIDConfiguration: VideoIDConfigurationData {
    return VideoIDConfigurationData(mode: .FACE_DOCUMENT_FRONT_BACK)
}
```

Os diferentes modos são:

* .ONLY\_FACE
* .FACE\_DOCUMENT\_FRONT
* .FACE\_DOCUMENT\_FRONT\_BACK

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

Os controllers devolverão as informações necessárias no formato SdkResult.

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

Na parte do erro, teremos o enumerado comum *ErrorType*:

* VID\_CANCEL\_BY\_USER: O usuário cancelou o processo
* VID\_CANCEL\_LAUNCH: Foi feito um cancelamento geral do SDK
* VID\_COMPONENT\_LICENSE\_ERROR: A licença do componente não está correta
* VID\_EMPTY\_LICENSE: A String de licença está vazia
* VID\_FACE\_DETECTION\_TIMEOUT: Não foi detectado rosto
* VID\_INITIALIZATION\_ERROR: Erro de Inicialização
* VID\_MANAGER\_NOT\_INITIALIZED: Os managers são nulos
* VID\_NETWORK\_CONNECTION: Erro na conexão com a internet
* VID\_NO\_DATA\_ERROR: Os dados de entrada são nulos
* VID\_OPERATION\_NOT\_CREATED: Não há nenhuma operação em curso
* VID\_PERMISSION\_DENIED: O usuário recusou as permissões
* VID\_SOCKET\_ERROR: Erro na conexão dos serviços
* VID\_TIMEOUT: Timeout no processo
* VID\_VIDEO\_ERROR: Erro no processamento do vídeo
* VID\_VIDEO\_RECORDING\_ACTIVE: Não é possível iniciar porque o processo de gravação de vídeo está ativo

### Recebimento de execução correta - *data* <a href="#id-62-recepcion-de-ejecucion-correcta-data" id="id-62-recepcion-de-ejecucion-correcta-data"></a>

Na parte de SdkResult.Success - *data*, teremos a classe VideoIdResult.

O resultado retorna as imagens no formato **SdkImage**, é possível extrair o bitmap acessando *image.bitmap*. Se quiser convertê-lo para base64, pode-se utilizar a função:

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

Os campos retornados no resultado são os seguintes:

**frontDocumentData**

Dados da frente do documento. Inclui:

* documentImage: Imagem do documento
* documentFullImage: Imagem completa capturada
* documentFaceImage: Se for encontrado um rosto no documento, a imagem dele é retornada.
* iqaOverExposure: Valor numérico entre 0 e 1 que indica o nível de superexposição da imagem; um valor alto sugere que a imagem está iluminada demais, o que pode dificultar a leitura do documento.
* iqaReadable: Valor numérico entre 0 e 1 que indica a legibilidade do texto do documento; valores mais altos significam que o texto está mais claro e fácil de reconhecer.
* iqaSharpness: Valor numérico entre 0 e 1 que indica a nitidez da imagem do documento; valores altos refletem uma imagem mais focada, o que melhora a capacidade de extração de dados.
* documentFaceImageTokenized: Se for encontrado um rosto no documento, a imagem criptografada dele é retornada.

**backDocumentData**

Dados do verso do documento. Inclui:

* documentImage: Imagem do documento
* documentFullImage: Imagem completa capturada
* documentFaceImage: Se for encontrado um rosto no documento, a imagem dele é retornada.
* iqaOverExposure: Valor numérico entre 0 e 1 que indica o nível de superexposição da imagem; um valor alto sugere que a imagem está iluminada demais, o que pode dificultar a leitura do documento.
* iqaReadable: Valor numérico entre 0 e 1 que indica a legibilidade do texto do documento; valores mais altos significam que o texto está mais claro e fácil de reconhecer.
* iqaSharpness: Valor numérico entre 0 e 1 que indica a nitidez da imagem do documento; valores altos refletem uma imagem mais focada, o que melhora a capacidade de extração de dados.
* documentFaceImageTokenized: Se for encontrado um rosto no documento, a imagem criptografada dele é retornada.

**faceImage**

Imagem do usuário capturada na primeira seção do processo.

**ocrMap**

Mapa do OCR extraído do documento.

**ocrDiagnostic**

Dicionário com o diagnóstico OCR do documento. As chaves são os campos a validar e os valores são instâncias de OcrDiagnostic.

Diagnóstico OCR extraído do documento.

* OK: O OCR está correto.
* NOT\_FOUND: A chave OCR não foi encontrada.
* TOLERANCE\_ERROR: O OCR não está correto.
* WARNING: O OCR não está correto, mas é apenas um aviso porque é um campo opcional.

**matchingSidesScore**

Valor numérico entre 0 e 1 que estima o nível de correspondência entre as faces do documento (frontal e traseira).

**documentType**

Tipo de documento obtido.

**personalData**

Conjunto reduzido de dados obtidos do usuário:

* issuer
* documentNumber
* issueDate
* expiryDate
* name
* surname
* fullName
* gender
* birthDate
* birthPlace
* nationality
* address
* nfcKey
* numSupport
* mrz

**speechText**

Texto que o usuário deverá pronunciar durante a gravação do vídeo.

**faceImageTokenized**

Imagem criptografada do usuário capturada na primeira seção do processo.

## 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 (as quais são explicadas no documento de *Personalização do SDK*), este componente específico permite a modificação de sua interface.

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

Os textos podem ser personalizados sobrescrevendo o valor das seguintes chaves em um **Localizable.strings**. As chaves que contêm o sufixo ***\_alt*** são os literais utilizados nas etiquetas de acessibilidade necessárias para a funcionalidade de ***VoiceOver***.

| **Name**                                                      | **Valor**                                                                                   |
| ------------------------------------------------------------- | ------------------------------------------------------------------------------------------- |
| video\_id\_component\_init\_message\_face\_content\_desc      | Coloque seu rosto e a frente do seu documento nas marcações                                 |
| video\_id\_component\_finish\_message                         | A gravação de vídeo foi finalizada!                                                         |
| video\_id\_component\_finish\_button                          | FINALIZAR                                                                                   |
| video\_id\_component\_restart\_button                         | REPETIR GRAVAÇÃO                                                                            |
| video\_id\_component\_ready\_button                           | CONTINUAR                                                                                   |
| video\_id\_component\_exit\_alert\_cancel                     | Cancelar                                                                                    |
| video\_id\_component\_exit\_alert\_question                   | Tem certeza de que deseja finalizar o processo?                                             |
| video\_id\_component\_exit\_alert\_finish                     | Encerrar                                                                                    |
| video\_id\_component\_exit\_alert\_accept                     | Aceitar                                                                                     |
| video\_id\_component\_timeout\_title                          | Tempo esgotado                                                                              |
| video\_id\_component\_timeout\_desc                           | Não conseguimos fazer a gravação a tempo. Vamos tentar novamente.                           |
| video\_id\_component\_internal\_error\_title                  | Ocorreu um erro                                                                             |
| video\_id\_component\_internal\_error\_desc                   | Vamos tentar novamente.                                                                     |
| video\_id\_component\_close\_button\_alt                      | Fechar                                                                                      |
| video\_id\_component\_back\_button\_alt                       | Voltar                                                                                      |
| video\_id\_component\_logo\_alt                               | Logo                                                                                        |
| video\_id\_component\_document\_front\_message                | Posicione a frente do seu documento nas marcações                                           |
| video\_id\_component\_document\_front\_message\_readable      | Mantenha a frente do seu documento nas marcações                                            |
| video\_id\_component\_document\_front\_message\_not\_readable | Aproxime a frente do seu documento das marcações                                            |
| video\_id\_component\_document\_back\_message                 | Agora posicione o verso do seu documento                                                    |
| video\_id\_component\_document\_back\_message\_readable       | Mantenha o verso do seu documento nas marcações                                             |
| video\_id\_component\_document\_back\_message\_not\_readable  | Aproxime o verso do seu documento das marcações                                             |
| video\_id\_component\_switch\_camera\_message                 | Prepare o documento enquanto ocorre a troca de câmera                                       |
| video\_id\_component\_face\_message                           | Coloque seu rosto dentro da moldura.                                                        |
| video\_id\_component\_multiple\_face\_message                 | Vários rostos detectados. Coloque apenas seu rosto dentro da moldura                        |
| video\_id\_component\_speech\_message                         | Diga em voz alta: "Eu (nome e sobrenome) aceito os termos e condições".                     |
| video\_id\_component\_front\_document\_captured\_message      | Frente do documento capturada corretamente                                                  |
| video\_id\_component\_document\_back\_finish\_message         | Verso do documento capturado corretamente                                                   |
| video\_id\_component\_face\_timeout\_title                    | Não detectamos seu rosto                                                                    |
| video\_id\_component\_face\_timeout\_desc                     | Por favor, coloque seu rosto na marca para iniciar o processo                               |
| video\_id\_component\_ocr\_error\_desc                        | Não foi possível ler o documento. Por favor, verifique a iluminação e a distância da câmera |

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

Se desejar modificar as animações (lottie) do SDK, é preciso incluir as animações com o mesmo nome na pasta res/raw/ da aplicação.

```
video_id_anim_doc_and_face.json
video_id_anim_face.json
video_id_anim_loading.json
```
