> For the complete documentation index, see [llms.txt](https://portal-integracao.intelbras.com.br/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://portal-integracao.intelbras.com.br/cameras-and-gravadores/integracao-api-cftvip-e-mibo/cameras-e-gravadores/gestao-de-reconhecimento-facial.md).

# Gestão De Reconhecimento Facial

Integração: gerencie grupos e pessoas (CRUD), disposição em canais, buscas por filtro/imagem (token), reextração de features, alarmes/event handlers e eventos Face\* via streaming.

## Dicas & Boas Práticas <a href="#dicas-and-boas-praticas" id="dicas-and-boas-praticas"></a>

* Mantenha a conexão HTTP de assinatura **sempre ativa**, garantindo que o cliente esteja preparado para reconexão automática em caso de queda de rede.
* Utilize o campo **EventBaseInfo.Code** para identificar o tipo de evento e implementar tratamentos específicos para cada código no sistema assinante.
* Sempre valide o campo **EventBaseInfo.Action** (`Start`, `Stop` ou `Pulse`) antes de processar o evento, evitando interpretações incorretas do ciclo do evento.
* Ao lidar com múltiplos eventos simultâneos, utilize **GroupID**, **CountInGroup** e **IndexInGroup** para correlacionar corretamente eventos pertencentes ao mesmo grupo.

***

### Tabela de Parâmetros&#x20;

<table><thead><tr><th>Name</th><th>Type</th><th width="77.62969970703125">R/O</th><th>Description</th><th>Example</th></tr></thead><tbody><tr><td>Name</td><td>char[128]</td><td>R</td><td>Nome do evento</td><td><code>"SmokeDetection1"</code></td></tr><tr><td>Class</td><td>char[32]</td><td>O</td><td>Classe do evento inteligente</td><td><code>"ChangeDetection"</code></td></tr><tr><td>GroupID</td><td>int</td><td>O</td><td>Identificador do grupo do evento</td><td>123</td></tr><tr><td>RuleID</td><td>uint32</td><td>O</td><td>Identificador da regra inteligente</td><td>1</td></tr><tr><td>RuleType</td><td>char[32]</td><td>O</td><td>Tipo da regra associada ao evento</td><td><code>"SmokeDetection"</code></td></tr><tr><td>EventID</td><td>uint32</td><td>O</td><td>ID único do evento</td><td>5864</td></tr><tr><td>CountInGroup</td><td>int</td><td>O</td><td>Número de capturas dentro do grupo do evento</td><td>3</td></tr><tr><td>IndexInGroup</td><td>int</td><td>O</td><td>Índice da captura no grupo (inicia em 1)</td><td>1</td></tr><tr><td>Sequence</td><td>int</td><td>O</td><td>Sequência da captura (1 normal, 0 anormal)</td><td>3</td></tr><tr><td>FrameSequence</td><td>int</td><td>O</td><td>Número do frame analisado</td><td>12345</td></tr><tr><td>PTS</td><td>double</td><td>O</td><td>Timestamp relativo do evento (ms)</td><td>150.0</td></tr><tr><td>UTC</td><td>uint32</td><td>O</td><td>Horário UTC do evento (s)</td><td>152463285</td></tr><tr><td>UTCMS</td><td>uint32</td><td>O</td><td>Horário do evento em milissegundos</td><td>123</td></tr><tr><td>RealUTC</td><td>uint32</td><td>O</td><td>UTC padrão sem ajuste de fuso/DST</td><td>1678151817</td></tr><tr><td>DSTTune</td><td>uint8</td><td>O</td><td>Flag de horário de verão</td><td>0</td></tr><tr><td>TimeZone</td><td>uint8</td><td>O</td><td>Índice do fuso horário</td><td>8</td></tr><tr><td>TriggerType</td><td>enumint</td><td>O</td><td>Fonte do disparo (Radar, Vídeo, etc.)</td><td>2</td></tr><tr><td>Source</td><td>int</td><td>O</td><td>Endereço da fonte de análise</td><td>5678</td></tr><tr><td>Mark</td><td>int</td><td>O</td><td>Marca de frame capturado</td><td>10</td></tr><tr><td>PresetID</td><td>uint16</td><td>O</td><td>Preset que acionou o evento</td><td>1</td></tr><tr><td>Action</td><td>char[]</td><td>R</td><td>Ação do evento (Appear, Cross, Inside…)</td><td><code>"Disappear"</code></td></tr><tr><td>Direction</td><td>char[]</td><td>O</td><td>Direção do evento</td><td><code>"LeftToRight"</code></td></tr><tr><td>DrivingDirection</td><td>enumint</td><td>R</td><td>Direção do veículo (Enter/Out)</td><td>1</td></tr><tr><td>DetectRegion</td><td>uint16[20][2]</td><td>R</td><td>Região de detecção (polígono)</td><td><code>[[0,0],[4095,0]...]</code></td></tr><tr><td>DetectLine</td><td>int[20][2]</td><td>R</td><td>Linha de detecção</td><td><code>[[10,10],[100,10]]</code></td></tr><tr><td>AreaID</td><td>int</td><td>O</td><td>ID da área</td><td>2</td></tr><tr><td>Position</td><td>int32[3]</td><td>O</td><td>Coordenadas PTZ e zoom</td><td><code>[900,-900,5]</code></td></tr><tr><td>Distance</td><td>float[2]</td><td>O</td><td>Distância relativa no solo (m)</td><td><code>[2.0,-3.0]</code></td></tr><tr><td>Count</td><td>int</td><td>O</td><td>Número de violações da regra</td><td>100</td></tr><tr><td>MisReport</td><td>bool</td><td>O</td><td>Indica possível falso alarme</td><td>false</td></tr><tr><td>ViolationSnapSource</td><td>enumint</td><td>O</td><td>Origem da violação</td><td>3</td></tr><tr><td>SmokeColor</td><td>enumchar[16][32]</td><td>O</td><td>Cores detectadas de fumaça</td><td><code>["White","Black"]</code></td></tr><tr><td>ParkingNum</td><td>char[32]</td><td>R</td><td>Número da vaga</td><td><code>"A101"</code></td></tr><tr><td>ParkingSpaceStatus</td><td>int</td><td>O</td><td>Status da vaga (0 ocupado, 1 livre)</td><td>0</td></tr><tr><td>CarDoorState</td><td>int</td><td>O</td><td>Estado da porta do veículo</td><td>1</td></tr><tr><td>WorkerNum</td><td>int</td><td>O</td><td>Número de pessoas no compartimento</td><td>5</td></tr><tr><td>LoadingRate</td><td>int</td><td>O</td><td>Taxa de carga (%)</td><td>50</td></tr><tr><td>UnLoadLength</td><td>int</td><td>O</td><td>Comprimento descarregado (cm)</td><td>150</td></tr><tr><td>PersonIntrudeStatus</td><td>int</td><td>O</td><td>Intrusão de pessoas</td><td>1</td></tr><tr><td>ElevatorFloor</td><td>char[32]</td><td>O</td><td>Andar do elevador</td><td><code>"20"</code></td></tr><tr><td>ElevatorWorkState</td><td>uint32</td><td>O</td><td>Estado do elevador</td><td>1</td></tr><tr><td>ElevatorWorkSpeed</td><td>uint32</td><td>O</td><td>Velocidade do elevador (mm/s)</td><td>20</td></tr><tr><td>DoorState</td><td>uint32</td><td>O</td><td>Estado da porta (aberta/fechada)</td><td>1</td></tr><tr><td>Brightness</td><td>char[32]</td><td>O</td><td>Nível de iluminação</td><td><code>"Strong"</code></td></tr><tr><td>Temperature</td><td>float</td><td>O</td><td>Temperatura</td><td>20.3</td></tr><tr><td>TemperatureUnit</td><td>char[16]</td><td>O</td><td>Unidade de temperatura</td><td><code>"Centigrade"</code></td></tr><tr><td>GPS</td><td>object</td><td>O</td><td>Coordenadas GPS do dispositivo</td><td>—</td></tr><tr><td>+Longitude</td><td>int32</td><td>O</td><td>Longitude (1e-6 grau)</td><td>22222</td></tr><tr><td>+Latitude</td><td>int32</td><td>O</td><td>Latitude (1e-6 grau)</td><td>33333</td></tr><tr><td>+Altitude</td><td>double</td><td>O</td><td>Altitude (m)</td><td>66.666</td></tr><tr><td>SceneImage</td><td>object</td><td>O</td><td>Imagem panorâmica</td><td>—</td></tr><tr><td>+IndexInData</td><td>uint</td><td>O</td><td>Índice da imagem</td><td>0</td></tr><tr><td>+Offset</td><td>uint</td><td>R</td><td>Offset no bloco binário</td><td>0</td></tr><tr><td>+Length</td><td>uint</td><td>R</td><td>Tamanho da imagem (bytes)</td><td>52000</td></tr><tr><td>+Width</td><td>uint</td><td>O</td><td>Largura da imagem (px)</td><td>1920</td></tr><tr><td>+Height</td><td>uint</td><td>O</td><td>Altura da imagem (px)</td><td>1080</td></tr><tr><td>+FilePath</td><td>char[260]</td><td>O</td><td>Caminho do arquivo</td><td><code>"/var/local/1.jpg"</code></td></tr><tr><td>Object</td><td>object</td><td>O</td><td>Objeto detectado único</td><td>—</td></tr><tr><td>Objects</td><td>object[]</td><td>O</td><td>Lista de objetos detectados</td><td>—</td></tr><tr><td>BoundingBox</td><td>uint16[4]</td><td>R</td><td>Caixa delimitadora (x1,y1,x2,y2)</td><td><code>[2992,1136,4960,5192]</code></td></tr><tr><td>Tracks</td><td>int[][20][2]</td><td>O</td><td>Trilhas de movimento do objeto</td><td>—</td></tr><tr><td>HumanAttributes</td><td>object</td><td>O</td><td>Atributos humanos</td><td>—</td></tr><tr><td>FaceAttributes</td><td>object</td><td>O</td><td>Atributos faciais</td><td>—</td></tr><tr><td>Sex</td><td>string</td><td>O</td><td>Sexo detectado</td><td><code>"Woman"</code></td></tr><tr><td>Age</td><td>int</td><td>O</td><td>Idade estimada</td><td>23</td></tr><tr><td>Feature</td><td>char[][]</td><td>O</td><td>Expressões faciais</td><td><code>["Smile"]</code></td></tr><tr><td>Mask</td><td></td><td></td><td></td><td></td></tr></tbody></table>

***

### Criar Grupo Facial

**Tópicos:** Utilizada para criar um novo grupo facial no sistema de reconhecimento facial.

**Métodos: `GET`**` ``/cgi-bin/faceRecognitionServer.cgi?action=createGroup`

**Código da Ação**: `CreateFaceGroup`

#### Parâmetros da Requisição

| Nome        | Tipo   | R/O | Descrição                                                              | Exemplo  |
| ----------- | ------ | --- | ---------------------------------------------------------------------- | -------- |
| groupName   | string | R   | Nome do grupo facial. Tamanho máximo de 127 caracteres.                | Test1    |
| groupDetail | string | O   | Descrição detalhada do grupo facial. Tamanho máximo de 255 caracteres. | ForTest1 |

**Exemplo:**&#x20;

```http
http://<ip>/cgi-bin/faceRecognitionServer.cgi?action=createGroup&groupName=Test1&group
Detail=ForTest1
```

**Resposta:**

```json
groupID=10000
```

***

### Modificar Grupo Facial

**Tópicos:** Utilizada para modificar as informações de um grupo facial existente, incluindo nome, descrição e parâmetros de similaridade.

**Método:** `GET /cgi-bin/faceRecognitionServer.cgi?action=modifyGroup`

**Código da Ação:** `ModifyFaceGroup`

#### Parâmetros da Requisição

| Nome           | Tipo   | R/O | Descrição                                          | Exemplo  |
| -------------- | ------ | --- | -------------------------------------------------- | -------- |
| groupID        | string | R   | Identificador do grupo facial (máx. 63 caracteres) | 10000    |
| groupName      | string | R   | Nome do grupo facial (máx. 127 caracteres)         | Test1    |
| groupDetail    | string | O   | Descrição do grupo (máx. 255 caracteres)           | ForTest1 |
| Similarity     | uint8  | O   | Limite de similaridade (0–100)                     | 90       |
| Alive          | uint8  | O   | Limite de vivacidade (0–100)                       | 0        |
| MaskSimilarity | uint8  | O   | Limite de similaridade com máscara (0–100)         | 0        |

**Exemplo:**

```http
http://<ip>/cgi-bin/faceRecognitionServer.cgi?action=modifyGroup&groupID=10000&groupName=Test1&groupDetail=ForTest1
```

**Resposta:**

```
OK
```

***

### Excluir Grupo Facial

**Tópicos:** Utilizada para remover um grupo facial do sistema.

**Método:** `GET /cgi-bin/faceRecognitionServer.cgi?action=deleteGroup`

**Código da Ação:** `DeleteFaceGroup`

#### Parâmetros da Requisição

| Nome    | Tipo   | R/O | Descrição                     | Exemplo |
| ------- | ------ | --- | ----------------------------- | ------- |
| groupID | string | R   | Identificador do grupo facial | 10000   |

**Exemplo:**

```http
http://<ip>/cgi-bin/faceRecognitionServer.cgi?action=deleteGroup&groupID=10000
```

**Resposta:**

```
OK
```

***

### Implantar Grupo Facial

#### 1.  Associar Grupo a Canais

**Tópicos:** Implanta um grupo facial em um ou mais canais de vídeo, configurando o nível de similaridade.

**Método:** `GET /cgi-bin/faceRecognitionServer.cgi?action=putDisposition`

**Código da Ação:** `PutDisposition`

#### Parâmetros da Requisição

| Nome             | Tipo      | R/O | Descrição                      | Exemplo |
| ---------------- | --------- | --- | ------------------------------ | ------- |
| groupID          | string    | R   | Identificador do grupo facial  | 10000   |
| list             | object\[] | R   | Lista de canais e similaridade | —       |
| list\[].channel  | int       | R   | Índice do canal (inicia em 1)  | 1       |
| list\[].similary | int       | R   | Similaridade (0–100)           | 80      |

**Exemplo:**

```http
http://<ip>/cgi-bin/faceRecognitionServer.cgi?action=putDisposition&groupID=10000&list[0].channel=1&list[0].similary=80
```

**Resposta:**

```json
report[0]=true
report[1]=false
```

#### 2.  Remover Associação de Grupo

**Tópicos:** Remove a implantação de um grupo facial de canais específicos.

**Método:** `GET /cgi-bin/faceRecognitionServer.cgi?action=deleteDisposition`

**Código da Ação:** `DeleteDisposition`

#### Parâmetros da Requisição

| Nome    | Tipo   | R/O | Descrição                     | Exemplo |
| ------- | ------ | --- | ----------------------------- | ------- |
| groupID | string | R   | Identificador do grupo facial | 10000   |
| channel | int\[] | R   | Lista de canais               | \[1,2]  |

**Exemplo:**

```http
http://<ip>/cgi-bin/faceRecognitionServer.cgi?action=deleteDisposition&groupID=10000&channel[0]=1
```

**Resposta:**

```json
report[0]=true
report[1]=false
```

#### **3. Definir grupo de disposição para o canal**

**Tópicos:** Define grupo de disposição para o canal.

**Método:** `GET /cgi-bin/faceRecognitionServer.cgi?action=setGroup`

**Código da Ação:** `setGroup`

**Exemplo:**

```http
http://<ip>/cgi-bin/faceRecognitionServer.cgi?action=setGroup&channel=1&list[0].groupID=10 000&list[0].similary=80&list[1].groupID=10002&list[1].similary=75
```

**Resposta:**

```
OK
```

#### 4. Obter grupo de disposição do canal

**Tópicos:** Obter grupo de disposição do canal

**Método:** `GET /cgi-bin/faceRecognitionServer.cgi?action=getGroup`

**Código da Ação:** `getGroup`

**Exemplo:**

```http
http://<ip>/cgi-bin/faceRecognitionServer.cgi?action=getGroup&channel=1
```

**Resposta:**

```json
groupID[0]=10001
groupID[1]=10003
groupID[2]=10006
….
similary[0]=80
similary[1]=75
similary[2]=85
```

***

### Consultar Grupo Facial

**Tópicos:** Consulta grupos faciais existentes. Caso nenhum `groupID` seja informado, retorna todos os grupos.

**Método:** `GET /cgi-bin/faceRecognitionServer.cgi?action=findGroup`

**Código da Ação:** `FindFaceGroup`

#### Parâmetros da Requisição

| Nome    | Tipo   | R/O | Descrição                     | Exemplo |
| ------- | ------ | --- | ----------------------------- | ------- |
| groupID | string | O   | Identificador do grupo facial | 10000   |

**Exemplo:**

```http
http://<ip>/cgi-bin/faceRecognitionServer.cgi?action=findGroup
```

**Resposta:**

```json
GroupList[0].groupID=00001
GroupList[0].groupName=Test1
GroupList[0].groupDetail=ForTest1
GroupList[0].groupSize=30
GroupList[0].channels[0]=1
GroupList[0].channels[1]=2
…
GroupList[0].similarity[0]=80
GroupList[0].similarity[1]=75
…
GroupList[0].groupType=BlackListDB
GroupList[0].TimeSection[0][0]=1 00:00:00-23:59:59
GroupList[0].TimeSection[0][1]=0 00:00:00-23:59:59
GroupList[0].TimeSection[0][2]=0 00:00:00-23:59:59
GroupList[0].TimeSection[0][3]=0 00:00:00-23:59:59
GroupList[0].TimeSection[0][4]=0 00:00:00-23:59:59
GroupList[0].TimeSection[0][5]=0 00:00:00-23:59:59
GroupList[0].TimeSection[1][0]=1 00:00:00-23:59:59
GroupList[0].TimeSection[1][1]=0 00:00:00-23:59:59
GroupList[0].TimeSection[1][2]=0 00:00:00-23:59:59
GroupList[0].TimeSection[1][3]=0 00:00:00-23:59:59
GroupList[0].TimeSection[1][4]=0 00:00:00-23:59:59
GroupList[0].TimeSection[1][5]=0 00:00:00-23:59:59
GroupList[0].TimeSection[2][0]=1 00:00:00-23:59:59
GroupList[0].TimeSection[2][1]=0 00:00:00-23:59:59
GroupList[0].TimeSection[2][2]=0 00:00:00-23:59:59
GroupList[0].TimeSection[2][3]=0 00:00:00-23:59:59
GroupList[0].TimeSection[2][4]=0 00:00:00-23:59:59
GroupList[0].TimeSection[2][5]=0 00:00:00-23:59:59
GroupList[0].TimeSection[3][0]=1 00:00:00-23:59:59
GroupList[0].TimeSection[3][1]=0 00:00:00-23:59:59
GroupList[0].TimeSection[3][2]=0 00:00:00-23:59:59
GroupList[0].TimeSection[3][3]=0 00:00:00-23:59:59
GroupList[0].TimeSection[3][4]=0 00:00:00-23:59:59
GroupList[0].TimeSection[3][5]=0 00:00:00-23:59:59
GroupList[0].TimeSection[4][0]=1 00:00:00-23:59:59
GroupList[0].TimeSection[4][1]=0 00:00:00-23:59:59
GroupList[0].TimeSection[4][2]=0 00:00:00-23:59:59
GroupList[0].TimeSection[4][3]=0 00:00:00-23:59:59
GroupList[0].TimeSection[4][4]=0 00:00:00-23:59:59
GroupList[0].TimeSection[4][5]=0 00:00:00-23:59:59
GroupList[0].TimeSection[5][0]=1 00:00:00-23:59:59
GroupList[0].TimeSection[5][1]=0 00:00:00-23:59:59
GroupList[0].TimeSection[5][2]=0 00:00:00-23:59:59
GroupList[0].TimeSection[5][3]=0 00:00:00-23:59:59
GroupList[0].TimeSection[5][4]=0 00:00:00-23:59:59
GroupList[0].TimeSection[5][5]=0 00:00:00-23:59:59
GroupList[0].TimeSection[6][0]=1 00:00:00-23:59:59
GroupList[0].TimeSection[6][1]=0 00:00:00-23:59:59
GroupList[0].TimeSection[6][2]=0 00:00:00-23:59:59
GroupList[0].TimeSection[6][3]=0 00:00:00-23:59:59
GroupList[0].TimeSection[6][4]=0 00:00:00-23:59:59
GroupList[0].TimeSection[6][5]=0 00:00:00-23:59:59
GroupList[1].groupID=00003
GroupList[1].groupName=Test3
GroupList[1].groupDetail=ForTest3
GroupList[1].groupSize=50
GroupList[1].channels[0]=1
GroupList[1].channels[1]=2
…
GroupList[1].similarity[0]=70
GroupList[1].similarity[1]=85
```

***

### Extrair Características por Grupo

#### **1. Iniciar Extração**

**Método:** `GET /cgi-bin/faceRecognitionServer.cgi?action=groupReAbstract`

**Código da Ação:** `GroupReAbstract`

#### Parâmetros da Requisição

| Nome    | Tipo      | R/O | Descrição              | Exemplo    |
| ------- | --------- | --- | ---------------------- | ---------- |
| groupID | string\[] | R   | Lista de IDs de grupos | \["10000"] |

**Resposta:**

```json
token=12345
```

#### **2. Parar Extração**

**Método:** `GET /cgi-bin/faceRecognitionServer.cgi?action=stopGroupReAbstract`

**Resposta:**

```
OK
```

***

### Adicionar Pessoa

**Tópicos:** Adiciona uma pessoa a um grupo facial, incluindo imagem facial.

**Método:** `POST /cgi-bin/faceRecognitionServer.cgi?action=addPerson`

**Código da Ação:** `AddPerson`

#### Parâmetros da Requisição **(URL + Corpo)**

| Nome     | Tipo   | R/O | Descrição          |
| -------- | ------ | --- | ------------------ |
| groupID  | string | R   | Grupo facial       |
| name     | string | R   | Nome da pessoa     |
| birthday | string | O   | Data de nascimento |
| sex      | string | O   | Sexo               |
| country  | string | O   | País (ISO3166)     |
| image    | binary | R   | Imagem facial      |

**Resposta:**

```json
uid=0005
```

***

### Modificar Pessoa

**Tópicos:** Atualiza os dados cadastrais de uma pessoa.

**Método:** `POST /cgi-bin/faceRecognitionServer.cgi?action=modifyPerson`

**Código da Ação:** `ModifyPerson`

**Resposta:**

```
OK
```

***

### Excluir Pessoa

**Tópicos:** Remove uma pessoa de um grupo facial.

**Método:** `GET /cgi-bin/faceRecognitionServer.cgi?action=deletePerson`

**Código da Ação:** `DeletePerson`

**Resposta:**

```
OK
```

***

### Buscar Pessoa

#### 1. Iniciar Busca de Pessoa

**Método:** `GET /cgi-bin/faceRecognitionServer.cgi?action=startFind`

**Código da Ação:** `StartFind`

#### Parâmetros da Requisição

<table><thead><tr><th>Nome</th><th>Tipo</th><th width="93.1851806640625">R/O</th><th>Descrição</th><th>Exemplo</th></tr></thead><tbody><tr><td>condition</td><td>object</td><td>R</td><td>Condições de escopo da busca</td><td>—</td></tr><tr><td>condition.GroupID</td><td>char[][]</td><td>R</td><td>Lista de identificadores de grupos faciais</td><td>["10000","10001"]</td></tr><tr><td>condition.StartRegisterStorageTime</td><td>char[]</td><td>O</td><td>Data inicial de cadastro</td><td>"2010-05-25 00:00:00"</td></tr><tr><td>condition.EndRegisterStorageTime</td><td>char[]</td><td>O</td><td>Data final de cadastro</td><td>"2010-05-25 23:59:59"</td></tr><tr><td>person</td><td>object</td><td>O</td><td>Condições relacionadas à pessoa</td><td>—</td></tr><tr><td>person.Name</td><td>char[]</td><td>O</td><td>Nome da pessoa</td><td>xxx</td></tr><tr><td>person.Sex</td><td>char[]</td><td>O</td><td>Sexo (Male, Female, Unknown)</td><td>Male</td></tr><tr><td>person.Country</td><td>char[]</td><td>O</td><td>País (ISO3166)</td><td>CN</td></tr><tr><td>person.Province</td><td>char[]</td><td>O</td><td>Província</td><td>XXX</td></tr><tr><td>person.City</td><td>char[]</td><td>O</td><td>Cidade</td><td>YYY</td></tr><tr><td>person.CertificateType</td><td>char[]</td><td>O</td><td>Tipo de documento</td><td>Passport</td></tr><tr><td>person.ID</td><td>char[]</td><td>O</td><td>Número do documento</td><td>123456</td></tr><tr><td>person.FeatureState</td><td>int</td><td>O</td><td>Estado da feature (0:Unknown, 1:Failed, 2:OK)</td><td>1</td></tr><tr><td>className</td><td>char[]</td><td>O</td><td>Classe</td><td>—</td></tr><tr><td>academe</td><td>char[]</td><td>O</td><td>Instituição</td><td>—</td></tr></tbody></table>

**Exemplo:**

```http
http://<ip>/cgi-bin/faceRecognitionServer.cgi?action=startFind&condition.GroupID[0]=10000&person.Sex=Male&person.FeatureState=1
```

#### **Parâmetros de Resposta**&#x20;

| Nome       | Tipo | R/O | Descrição                                          | Exemplo   |
| ---------- | ---- | --- | -------------------------------------------------- | --------- |
| token      | uint | R   | Identificador da busca                             | 123456789 |
| totalCount | int  | R   | Total de resultados (-1 indica busca em andamento) | 24        |

**Resposta:**

```json
token=123456789totalCount=24
```

#### 2. Consultar Resultado da Busca

**Método:** `GET /cgi-bin/faceRecognitionServer.cgi?action=doFind`

**Código da Ação:** `DoFind`

#### Parâmetros da Requisição

| Nome  | Tipo | R/O | Descrição                                | Exemplo   |
| ----- | ---- | --- | ---------------------------------------- | --------- |
| token | uint | R   | Token retornado na etapa anterior        | 123456789 |
| index | uint | R   | Índice do resultado (0 até totalCount-1) | 0         |

**Exemplo:**

```http
http://<ip>/cgi-bin/faceRecognitionServer.cgi?action=doFind&token=123456789&index=0
```

#### Parâmetros da Resposta

<table><thead><tr><th>Nome</th><th>Tipo</th><th width="100.7408447265625">R/O</th><th>Descrição</th></tr></thead><tbody><tr><td>person</td><td>object</td><td>R</td><td>Informações da pessoa</td></tr><tr><td>person.UID</td><td>string</td><td>R</td><td>Identificador da pessoa</td></tr><tr><td>person.GroupID</td><td>string</td><td>R</td><td>Grupo facial associado</td></tr><tr><td>person.Name</td><td>string</td><td>R</td><td>Nome</td></tr><tr><td>person.Sex</td><td>string</td><td>O</td><td>Sexo</td></tr><tr><td>person.PicUrl</td><td>string</td><td>O</td><td>Caminho da imagem</td></tr><tr><td>person.Birthday</td><td>string</td><td>O</td><td>Data de nascimento</td></tr><tr><td>person.Country</td><td>string</td><td>O</td><td>País</td></tr><tr><td>person.Province</td><td>string</td><td>O</td><td>Província</td></tr><tr><td>person.City</td><td>string</td><td>O</td><td>Cidade</td></tr><tr><td>person.CertificateType</td><td>string</td><td>O</td><td>Tipo de documento</td></tr><tr><td>person.ID</td><td>string</td><td>O</td><td>Número do documento</td></tr><tr><td>person.FeatureState</td><td>int</td><td>O</td><td>Estado da feature</td></tr></tbody></table>

**Resposta:**

```http
HTTP/1.1 200 OK
Server: Device/1.0
Content-Type: multipart/x-mixed-replace; boundary=<boundary>
Content-Length: <length>
--<boundary>
Content-Type: text/plain
Content-Length: <length>
person.UID=0005
person.GroupID=10000
person.Name=ZhangSan
person.Birthday=1980-01-01
person.Sex=Male
person.Country=CN
person.Province=XXX
person.City=YYY
person.CertificateType=IC
person.ID=1234567890
person.FeatureState=0
--<boundary>
Content-Type: image/jpeg
Content-Length: <image size>
< jpeg image data ... >
--<boundary>--
```

#### 3. Finalizar Busca de Pessoa

**Método:** `GET /cgi-bin/faceRecognitionServer.cgi?action=stopFind`

**Código da Ação:** `StopFind`

#### Parâmetros da Requisição

| Nome  | Tipo | R/O | Descrição      | Exemplo   |
| ----- | ---- | --- | -------------- | --------- |
| token | uint | R   | Token da busca | 123456789 |

**Exemplo:**

```http
http://<ip>/cgi-bin/faceRecognitionServer.cgi?action=stopFind&token=123456789
```

**Resposta:**

```
OK
```

***

### Extrair Features por Pessoa

#### 1. Iniciar Extração

**Método: `GET`**` ``/cgi-bin/faceRecognitionServer.cgi?action=reAbstract`

**Código da Ação:** `ReAbstract`

#### Parâmetros da Requisição

| Nome | Tipo         | R/O | Descrição                            | Exemplo            |
| ---- | ------------ | --- | ------------------------------------ | ------------------ |
| UID  | char\[]\[31] | O   | Lista de identificadores das pessoas | \["10000","10001"] |

**Exemplo:**

```http
http://<ip>/cgi-bin/faceRecognitionServer.cgi?action=reAbstract&UID[0]=001&UID[1]=002
```

**Resposta:**

```
OK
```

#### 2.  Parar Extração

**Método:** `GET /cgi-bin/faceRecognitionServer.cgi?action=stopReAbstract`

**Código da Ação:** `StopReAbstract`

**Resposta:**

```
OK
```

***

#### Configuração de Saída de Alarme do Reconhecimento Facial

**Tópico:** Configura a saída de alarme físico (AlarmOut) associada aos eventos de reconhecimento facial.

### Parâmetros de Configuração

<table><thead><tr><th>Nome</th><th>Tipo</th><th width="62.81475830078125">R/O</th><th>Descrição</th><th>Exemplo</th></tr></thead><tbody><tr><td>FaceRecognitionAlarm</td><td>object[]</td><td>R</td><td>Configuração por grupo facial</td><td>—</td></tr><tr><td>GroupID</td><td>char[]</td><td>R</td><td>ID do grupo facial</td><td>0017</td></tr><tr><td>GroupName</td><td>char[]</td><td>R</td><td>Nome do grupo facial</td><td>wsd</td></tr><tr><td>AlarmOutEnable</td><td>bool</td><td>R</td><td>Habilita saída de alarme</td><td>true</td></tr><tr><td>AlarmChannel</td><td>object[]</td><td>R</td><td>Configuração por canal de alarme</td><td>—</td></tr><tr><td>AlarmRuleMask</td><td>int</td><td>R</td><td>Máscara de regra (Bit0: sucesso / Bit1: falha)</td><td>0</td></tr><tr><td>AlarmOutLatch</td><td>int</td><td>R</td><td>Tempo do alarme (segundos)</td><td>5</td></tr></tbody></table>

**Exemplo – Obter Configuração:**&#x20;

```
/cgi-bin/configManager.cgi?action=getConfig&name=FaceRecognitionAlarm
```

**Resposta:**

```json
table.FaceRecognitionAlarm[0].GroupID=0017
table.FaceRecognitionAlarm[0].GroupName=wsd
table.FaceRecognitionAlarm[0].AlarmOutEnable=true
table.FaceRecognitionAlarm[0].AlarmChannel[0].AlarmRuleMask=0
table.FaceRecognitionAlarm[0].AlarmChannel[0].AlarmOutLatch=5
table.FaceRecognitionAlarm[0].AlarmChannel[1].AlarmRuleMask=0
table.FaceRecognitionAlarm[0].AlarmChannel[1].AlarmOutLatch=8
…
table.FaceRecognitionAlarm[1].GroupID=0018
table.FaceRecognitionAlarm[1].GroupName=cst
table.FaceRecognitionAlarm[1].AlarmOutEnable=true
table.FaceRecognitionAlarm[1].AlarmChannel[0].AlarmRuleMask=0
table.FaceRecognitionAlarm[1].AlarmChannel[0].AlarmOutLatch=10
table.FaceRecognitionAlarm[1].AlarmChannel[1].AlarmRuleMask=0
table.FaceRecognitionAlarm[1].AlarmChannel[1].AlarmOutLatch=15
…
```

**Exemplo – Definir Configuração:**

```
/cgi-bin/configManager.cgi?action=setConfig&FaceRecognitionAlarm[0].GroupID=0017&FaceRecognitionAlarm[0].AlarmOutEnable=true
```

**Resposta:**

```
OK
```

***

### Buscar Pessoa por Imagem

#### 1. Iniciar Busca

**Método:** `POST /cgi-bin/faceRecognitionServer.cgi?action=startFindByPic`

#### Parâmetros da Requisição

| Nome         | Tipo       | R/O | Descrição                         | Exemplo    |
| ------------ | ---------- | --- | --------------------------------- | ---------- |
| GroupID      | char\[]\[] | R   | Grupos faciais para busca         | \["10000"] |
| Similarity   | int        | R   | Percentual mínimo de similaridade | 80         |
| MaxCandidate | int        | O   | Máximo de candidatos retornados   | 500        |
| Body         | binary     | R   | Imagem JPEG                       | —          |

#### Parâmetros de Resposta

| Nome       | Tipo | R/O | Descrição           |
| ---------- | ---- | --- | ------------------- |
| token      | uint | R   | Token da busca      |
| progress   | uint | R   | Progresso (0–100)   |
| totalCount | int  | R   | Total de resultados |

**Resposta:**

```http
HTTP/1.1 200 OK
Server: Device/1.0
Content-Type: multipart/x-mixed-replace; boundary=<boundary>
Connection: closed
--<boundary>
Content-Type: application/json
Content-Length: <length>
{ "token": 123456789,
"progress": 20
"totalCount": -1
}
--<boundary>
Content-Type: application/json
Content-Length: <length>
{ "token": 123456789,
"progress": 60
"totalCount": -1
}
--<boundary>
Content-Type: application/json
Content-Length: <length>
{ "token": 123456789,
"progress": 100
Video Analyse APIs 467
"totalCount": 350
}
--<boundary>-
```

#### 2.  Obter Resultado da Busca

**Método:**  `GET /cgi-bin/faceRecognitionServer.cgi?action=doFindByPic`

**Exemplo:**

```http
http://<ip>/cgi-bin/faceRecognitionServer.cgi?action=doFindByPic&token=123456789&index=0&co
unt=10
```

#### Parâmetros de Resposta

| Nome  | Tipo | R/O | Descrição                |
| ----- | ---- | --- | ------------------------ |
| token | uint | R   | Token da busca           |
| index | uint | R   | Índice inicial           |
| count | uint | R   | Quantidade de resultados |

**Resposta**

```http
HTTP/1.1 200 OK
Server: Device/1.0
Content-Type: multipart/x-mixed-replace; boundary=<boundary>
Connection: closed
--<boundary>
Content-Type: application/json
Content-Length: <length>
{ "Found" : 10,
 "Candidates" : [ 
 {
 "person" : {
 "UID" : "0001",
 "GroupID" : "001",
 "Name" : "ZhangSan",
 "Birthday" : "1980-01-05",
 "Sex" : "Male",
 ...
 },
 "Similarity" : 85
 },
 {
 "person" : {
 "UID" : "0002",
 "GroupID" : "002",
 "Name" : "LiSi",
 "Birthday" : "1980-01-06",
 "Sex" : "Male",
 ...
 },
 "Similarity" : 80
 },
 { ... }, ...
 ]
}
--<boundary>
Content-Info: UID=0001&GroupID=001
Content-Type: image/jpeg
Content-Length: <length>
< jpeg image data ... >
--<boundary>
Content-Info: UID=0002&GroupID=002
Content-Type: image/jpeg
Content-Length: <length>
< jpeg image data ... >
--<boundary>
..
```

#### 3. Parar Busca

**Método:**  `GET /cgi-bin/faceRecognitionServer.cgi?action=stopFindByPic`

**Resposta:**

```
OK
```

***

### Buscar Histórico por Imagem

#### 1.  Iniciar Busca

**Método:** `POST /cgi-bin/faceRecognitionServer.cgi?action=startFindHistoryByPic`

#### Parâmetros Principais

<table><thead><tr><th>Nome</th><th>Tipo</th><th width="98.5185546875">R/O</th><th>Descrição</th></tr></thead><tbody><tr><td>Channel</td><td>int</td><td>R</td><td>Canal de vídeo</td></tr><tr><td>StartTime / EndTime</td><td>string</td><td>O</td><td>Intervalo de tempo</td></tr><tr><td>Similarity</td><td>int</td><td>R</td><td>Similaridade mínima</td></tr><tr><td>ObjectType</td><td>int</td><td>O</td><td>Tipo do alvo</td></tr><tr><td>Ordered</td><td>int</td><td>O</td><td>Ordenação</td></tr></tbody></table>

**Resposta**:

```http
HTTP/1.1 200 OK
Server: Device/1.0
Content-Type: multipart/x-mixed-replace; boundary=<boundary>
Connection: closed
--<boundary>
Content-Type: application/json
Content-Length: <length>
{ "token": 123456789,
"progress": 20
"totalCount": -1
}
--<boundary>
Content-Type: application/json
Content-Length: <length>
{ "token": 123456789,
"progress": 60
"totalCount": -1
}
--<boundary>
Content-Type: application/json
Content-Length: <length>
{ "token": 123456789,
"progress": 100
"totalCount": 350
}
--<boundary>-
```

#### 2. Obter Resultado

**Método:** `GET /cgi-bin/faceRecognitionServer.cgi?action=doFindHistoryByPic`

**Resposta:**

```http
HTTP/1.1 200 OK
Server: Device/1.0
Content-Type: multipart/x-mixed-replace; boundary=<boundary>
Connection: closed
--<boundary>
Content-Type: application/json
Content-Length: <length>
{ 
"Found" : 12,
 "Candidates" : [ 
 {
 "person" : {
 "UID" : "0001",
 "Sex" : "Male",
 "Age" : 30,
 "Glasses": 1
 },
 "Similarity" : 85
 “Time”: “2013-09-02 00:00:00”
 },
 {
 "person" : {
 "UID" : "0002",
 "Sex" : "Male",
 "Age" : 50,
 "Glasses": 2
 },
 "Similarity" : 80
 “Time”: “2013-09-02 00:00:00”
 },
 { ... }, ...
 ]
}
--<boundary>
Content-Info: UID=0001
Content-Type: image/jpeg
Content-Length: <length>
< jpeg image data ... >
--<boundary>
Content-Info: UID=0002
Content-Type: image/jpeg
Content-Length: <length>
< jpeg image data ... >
--<boundary>
```

#### 3. Parar Busca

**Método:**  `GET` `/cgi-bin/faceRecognitionServer.cgi?action=stopFindHistoryByPic`

**Resposta:**

```
OK
```

***

### Evento Detecção Facial

**Tópico:** Enviado quando um rosto é detectado no canal de vídeo.

**Código do Evento:** `FaceDetection`

**Ação:** `Start / Stop`

#### Parâmetros do Evento

<table><thead><tr><th>Nome</th><th>Tipo</th><th width="94.8148193359375">R/O</th><th>Descrição</th></tr></thead><tbody><tr><td>Faces</td><td>object[]</td><td>R</td><td>Lista de rostos detectados</td></tr><tr><td>BoundingBox</td><td>int[4]</td><td>R</td><td>Área do rosto</td></tr><tr><td>Sex</td><td>char[]</td><td>O</td><td>Sexo</td></tr><tr><td>Age</td><td>int</td><td>O</td><td>Idade</td></tr><tr><td>Feature</td><td>char[][]</td><td>O</td><td>Atributos faciais</td></tr><tr><td>Eye</td><td>int</td><td>O</td><td>Estado dos olhos</td></tr><tr><td>Mouth</td><td>int</td><td>O</td><td>Estado da boca</td></tr><tr><td>Mask</td><td>int</td><td>O</td><td>Uso de máscara</td></tr><tr><td>Beard</td><td>int</td><td>O</td><td>Barba</td></tr></tbody></table>

**Resposta:**

```http
--<boundary>
Content-Type: text/plain
Content-Length: <length>
Code=FaceDetection;action=Start;index=0;data={
 "Faces": [ { "BoundingBox": [2992,136,6960,8192],
 "Sex": "Man",
 "Age": 40,
 "Feature": [ "WearGlasses", "Smile"],
 "Eye": 2,
 "Mouth": 1,
 "Mask": 1,
 "Beard": 2
 }, {…}, … ]
}
--<boundary>
```

***

### Evento de Reconhecimento Facial

**Tópico:** Enviado após o reconhecimento facial bem-sucedido ou falho.

**Código do Evento:** `FaceRecognition`

**Ação:** `Pulse`

#### Parâmetros do Evento

<table><thead><tr><th>Nome</th><th>Tipo</th><th width="96.2962646484375">R/O</th><th>Descrição</th></tr></thead><tbody><tr><td>UID</td><td>string</td><td>R</td><td>ID da pessoa reconhecida</td></tr><tr><td>Candidates</td><td>object[]</td><td>O</td><td>Lista de candidatos</td></tr><tr><td>Similarity</td><td>int</td><td>O</td><td>Similaridade</td></tr><tr><td>Face</td><td>object</td><td>O</td><td>Atributos do rosto</td></tr></tbody></table>

**Resposta:**

```http
--<boundary>
Content-Type: text/plain
Content-Length: <length>
Events[0].EventBaseInfo.Code=FaceRecognition
Events[0].EventBaseInfo.Action=Pulse
Events[0].EventBaseInfo.Index=0
Events[0].UID=00105
Events[0].Candidates[0].Person.UID=0012
Events[0].Candidates[0].Person.GroupID=10000
Events[0].Candidates[0].Person.Name=ZhangSan
Events[0].Candidates[0].Person.Birthday=1980-01-02
Events[0].Candidates[0].Person.Sex=Male
…
Events[0].Candidates[0].Similarity=80
Events[0].Candidates[1].Person.UID=0014
Events[0].Candidates[1].Person.GroupID=10000
Events[0].Candidates[1].Person.Name=Lisi
Events[0].Candidates[1].Person.Birthday=1980-01-05
Events[0].Candidates[1].Person.Sex=Male
…
Events[0].Candidates[1].Similarity=75
…
Events[0].Face.Sex=Man
Events[0].Face.Age=20
Events[0].Face.Feature[0]=SunGlasses
Events[0].Face.Feature[1]=Smile
Events[0].Face.Eye=2
Events[0].Face.Mouth=1
Events[0].Face.Mask=1
Events[0].Face.Beard=2
--<boundary>
Content-Type: image/jpeg
Content-Length: <image size>
<Jpeg image data>
--<boundary>

```

***

### Evento Recurso Facial Abstrato

**Tópico:** Reporta o progresso da Extração de features faciais.

**Código do Evento:** `FaceFeatureAbstract`

**Ação:** `Start / Stop`

#### Parâmetros do Evento

<table><thead><tr><th>Nome</th><th>Tipo</th><th width="87.407470703125">R/O</th><th>Descrição</th></tr></thead><tbody><tr><td>Infos</td><td>object[]</td><td>R</td><td>Detalhes do processo</td></tr><tr><td>State</td><td>string</td><td>R</td><td>Estado (Success / Failed / Process)</td></tr><tr><td>Progress</td><td>int</td><td>O</td><td>Progresso (%)</td></tr><tr><td>UID</td><td>string</td><td>O</td><td>Pessoa</td></tr><tr><td>GroupID</td><td>string</td><td>O</td><td>Grupo facial</td></tr></tbody></table>

**Resposta:**

```http
--<boundary>
Content-Type: text/plain
Content-Length: <length>
Code=FaceFeatureAbstract;action=Start;index=0;data={
 "Infos": [ { "State": "Progress",
 "Progress": 30,
 "UID": "20005",
 "GroupID": "10000"
 }, {…}, … ]
}
--<boundary>

```

***

### Configuração do Manipulador de Eventos de Reconhecimento Facial

### Parâmetros  de Configuração

<table><thead><tr><th>Nome</th><th>Tipo</th><th width="100.74072265625">R/O</th><th>Descrição</th></tr></thead><tbody><tr><td>EventEnableMask</td><td>int</td><td>R</td><td>Máscara de eventos</td></tr><tr><td>RecordEnableMask</td><td>int</td><td>R</td><td>Máscara de gravação</td></tr><tr><td>RecordLatch</td><td>int</td><td>R</td><td>Tempo de gravação</td></tr><tr><td>SnapEnableMask</td><td>int</td><td>R</td><td>Captura de imagem</td></tr><tr><td>MailEnableMask</td><td>int</td><td>R</td><td>Envio de e-mail</td></tr></tbody></table>

## Obter Configuração

**Exemplo:**

```http
http://<ip>/cgi-bin/configManager.cgi?action=getConfig&name=FaceRecognitionEventHandler
```

**Resposta:**

```http
table.FaceRecognitionEventHandler[0].GroupID=0017
table.FaceRecognitionEventHandler[0].GroupName=wsd
table.FaceRecognitionEventHandler[0].EventEnableMask=3
table.FaceRecognitionEventHandler[0].RecordEnableMask=0
table.FaceRecognitionEventHandler[0].RecordLatch=10
table.FaceRecognitionEventHandler[0].SnapEnableMask=3
table.FaceRecognitionEventHandler[0].MailEnableMask=0
…
table.FaceRecognitionEventHandler[1].GroupID=0018
table.FaceRecognitionEventHandler[1].GroupName=cst
table.FaceRecognitionEventHandler[1].EventEnableMask=3
table.FaceRecognitionEventHandler[1].RecordEnableMask=0
table.FaceRecognitionEventHandler[1].RecordLatch=10
table.FaceRecognitionEventHandler[1].SnapEnableMask=3
table.FaceRecognitionEventHandler[1].MailEnableMask=0
…
```

### Definir Configurações

**Exemplo:**&#x20;

```http
http://<ip>/cgi-bin/configManager.cgi?action=setConfig&FaceRecognitionEventHandler[0].GroupID=
0017&FaceRecognitionEventHandler[0].GroupName=wsd&FaceRecognitionEventHandler[0].EventEna
bleMask=3&FaceRecognitionEventHandler[0].RecordEnableMask=0&FaceRecognitionEventHandler[0]
.RecordLatch=10&FaceRecognitionEventHandler[0].SnapEnableMask=3&FaceRecognitionEventHandl
er[0].MailEnableMask=0
```

**Resposta:**

```
OK
```

***

### Configuração do Limite de Reconhecimento Face-ID

**Descrição:** Define o limite mínimo de similaridade para comparação Face-ID.

**Método:** `GET /cgi-bin/configManager.cgi?action=setConfig`

#### Parâmetros de Requisição

| Nome                                | Tipo  | R/O | Descrição                      | Exemplo |
| ----------------------------------- | ----- | --- | ------------------------------ | ------- |
| CitizenPictureCompareRule.Threshold | uint8 | R   | Limite de similaridade (1–100) | 60      |

**Exemplo:**

```http
http://<ip>/cgi-bin/configManager.cgi?action=setConfig&CitizenPictureCompareRule.Threshol
d=60
```

**Resposta:**&#x20;

```
OK
```

***

### Exportar Base de Dados Facial

**Tópico:** Exporta dados da base facial em formato binário.

**Método:** `POST /cgi-bin/api/FaceLibImExport/export`

#### Parâmetros de Requisição

<table><thead><tr><th>Nome</th><th>Tipo</th><th width="90.370361328125">R/O</th><th>Descrição</th></tr></thead><tbody><tr><td>GroupID</td><td>char[64]</td><td>R</td><td>ID do grupo</td></tr><tr><td>Password</td><td>char[64]</td><td>O</td><td>Senha do arquivo</td></tr><tr><td>TaskType</td><td>enum</td><td>O</td><td>Tipo de exportação</td></tr><tr><td>Token</td><td>uint32</td><td>O</td><td>Token da consulta</td></tr><tr><td>TaskName</td><td>char[128]</td><td>O</td><td>Nome da tarefa</td></tr><tr><td>Mode</td><td>enumint</td><td>O</td><td>Modo de exportação</td></tr></tbody></table>

**Exemplo:**&#x20;

```http
{
 "GroupID": "10",
"Password": "abcd"
}
```

**Resposta:**

```http
HTTP/1.1 200 OK
NTP Server Device/1.0
Content-Type: application/octet-stream
Content-Length: <length>
< binary data >
```

***

### Evento de Exclusão Remota de Pessoa

**Tópico:** Enviado quando uma pessoa é removida de forma remota de uma base de reconhecimento facial.

**Método:** `POST /cgi-bin/api/RemoteFaceRecognition/deletePerson`

**Código do Evento:** `RemoteDeletePerson`

**Ação:** `Pulse`

#### Parâmetros do Evento

<table><thead><tr><th>Nome</th><th>Tipo</th><th width="104.4444580078125">R/O</th><th>Descrição</th></tr></thead><tbody><tr><td>Channel</td><td>int</td><td>R</td><td>Canal lógico associado à operação</td></tr><tr><td>Person</td><td>object</td><td>R</td><td>Informações da pessoa removida</td></tr><tr><td>Person.UID</td><td>string</td><td>R</td><td>Identificador único da pessoa</td></tr><tr><td>Person.GroupID</td><td>string</td><td>R</td><td>Identificador da base facial</td></tr></tbody></table>

**Resposta**:

```
{}
```

***

### Evento de Tarefa de Download de Base Facial

**Tópico:** Enviado quando uma tarefa de download de base facial é criada no sistema.

**Método:** `POST /cgi-bin/api/NetFileTransfer/addFaceLibDownloadTask`

**Código do Evento:** `FaceLibDownloadTask`

**Ação:** `Start / Stop`

#### Parâmetros do Evento

<table><thead><tr><th>Nome</th><th>Tipo</th><th width="108.148193359375">R/O</th><th>Descrição</th></tr></thead><tbody><tr><td>FaceLibVersion</td><td>string</td><td>R</td><td>Versão da base facial</td></tr><tr><td>PacketTotal</td><td>int</td><td>R</td><td>Total de pacotes da tarefa</td></tr><tr><td>PacketIndex</td><td>int</td><td>R</td><td>Índice do pacote atual</td></tr><tr><td>TaskInfo</td><td>object[]</td><td>R</td><td>Informações da tarefa</td></tr><tr><td>TaskInfo.URLList</td><td>string[]</td><td>R</td><td>Lista de recursos de download</td></tr><tr><td>TaskInfo.ID</td><td>string</td><td>R</td><td>Identificador do dispositivo</td></tr><tr><td>TaskInfo.FaceUUID</td><td>string</td><td>R</td><td>UUID da face</td></tr><tr><td>GroupID</td><td>string</td><td>O</td><td>Identificador da base facial</td></tr></tbody></table>

**Resposta**:&#x20;

```
{}
```

### Evento de Importação de Imagens Faciais

**Tópico:** Enviado durante o processo de importação de imagens para a base de reconhecimento facial.

**Método:** `POST /cgi-bin/api/faceRecognitionServer/multiAppend`

**Código do Evento:** `FaceLibImport`

**Ação:** `Start / Run / Stop / Cancel`

#### Parâmetros do Evento

<table><thead><tr><th>Nome</th><th>Tipo</th><th width="94.8148193359375">R/O</th><th>Descrição</th></tr></thead><tbody><tr><td>Person</td><td>object[]</td><td>O</td><td>Lista de pessoas importadas</td></tr><tr><td>Info</td><td>object</td><td>R</td><td>Informações do processo</td></tr><tr><td>Info.Token</td><td>int</td><td>R</td><td>Token da importação</td></tr><tr><td>Info.State</td><td>string</td><td>R</td><td>Estado da importação</td></tr><tr><td>Info.Center</td><td>Point[]</td><td>O</td><td>Centro do rosto na imagem</td></tr><tr><td>UID</td><td>int[]</td><td>O</td><td>IDs gerados para as pessoas</td></tr><tr><td>UID2</td><td>string[]</td><td>O</td><td>IDs alternativos</td></tr><tr><td>UIDType</td><td>int</td><td>O</td><td>Tipo de UID utilizado</td></tr><tr><td>ErrCode</td><td>int[]</td><td>O</td><td>Código de erro</td></tr><tr><td>ErrorMsg</td><td>string[]</td><td>O</td><td>Mensagens de erro</td></tr></tbody></table>

**Resposta:**

```http
{
 "UID": [123U, 234U],
 "UID2": ["adsadasdas","123123123"],
 "UIDType": 0,
 "ErrCode" : [0, 0]
}
```

***

### Evento Exportação de Imagens Faciais

**Tópico**: Enviado durante o processo de exportação de imagens da base facial.

**Método:** `POST /cgi-bin/api/faceRecognitionServer/downloadPiece`

**Código do Evento:** `FaceLibExport`

**Ação: `Start / Stop`**

#### Parâmetros do Evento

<table><thead><tr><th>Nome</th><th>Tipo</th><th width="108.8887939453125">R/O</th><th>Descrição</th></tr></thead><tbody><tr><td>FileName</td><td>string</td><td>R</td><td>Nome do arquivo exportado</td></tr><tr><td>Offset</td><td>int</td><td>R</td><td>Posição inicial do download</td></tr><tr><td>NeedLength</td><td>int</td><td>R</td><td>Tamanho solicitado</td></tr><tr><td>FileLength</td><td>int</td><td>O</td><td>Tamanho total do arquivo</td></tr><tr><td>PacketLength</td><td>int</td><td>O</td><td>Tamanho do pacote retornado</td></tr></tbody></table>

**Resposta:**

```http
HTTP/1.1 200 OK
Server: Device/1.0
Content-Type: application/octet-stream
Content-Length: <length>
{
 "fileLength" : 124879,
 "packetLength": 16384
}
< binary data>
```

***

### Evento de Capacidade do Servidor Facial

**Tópico:** Enviado para informar as capacidades e limites suportados pelo servidor de reconhecimento facial.

**Método:** `POST /cgi-bin/api/faceRecognitionServer/getCaps`

**Código do Evento:** `FaceRecognitionCapability`

**Ação:** `Pulse`

#### Parâmetros do Evento

<table><thead><tr><th>Nome</th><th>Tipo</th><th width="85.9259033203125">R/O</th><th>Descrição</th></tr></thead><tbody><tr><td>MultiFind</td><td>bool</td><td>O</td><td>Suporte a busca simultânea</td></tr><tr><td>MaxGroupNum</td><td>int</td><td>O</td><td>Número máximo de bases faciais</td></tr><tr><td>MaxPersonNum</td><td>int</td><td>O</td><td>Capacidade máxima de pessoas</td></tr><tr><td>SinglePicMaxLength</td><td>int</td><td>O</td><td>Tamanho máximo de imagem</td></tr><tr><td>PersonWithMultiFace</td><td>bool</td><td>O</td><td>Suporte a múltiplas faces</td></tr><tr><td>SupportFeatureData</td><td>bool</td><td>O</td><td>Suporte a dados de características</td></tr></tbody></table>

**Resposta:**

```http
{
 "multiFind" : true,
 "maxFaceType" : 32,
 "function" : 1,
 "reAbstract" : 1,
 "detectMethod" : 1
 "FaceBoxColor" : {
 "Support" : false
 "DefaultColor": [0,0,255,0],
 }
 "AsynPush" : true,
 "ModifyPersonByToken" : 1,
 "MaxGroupNum":20
 "MaxPersonNum":300000
 "MaxStaticPersonNum": 1000000,
 "MaxSurveillancePersonNum": 300000,
 "MaxHistoryPersonNum": 1000000,
 "MultiAppendPicLength" : 5000,
 "SinglePicMaxLength" : 150,
 "SearchObjectTypeMask":0,
 "PersonWithMultiFace": false
 "PasserbyDBCreate": false,
 "RelativeSearch": false,
 "SupportIDFromServer": false,
 "SupportFeatureData": false
}

```

***

#### 1.  Estatísticas de Frequência Facial

**Método:** `GET /cgi-bin/api/FaceAttendance/startFind`

**Código do Evento:** `FaceAttendanceStatistics`

**Ação:** `Start / Pulse / Stop`

#### Parâmetros do Evento

<table><thead><tr><th>Nome</th><th>Tipo</th><th width="94.073974609375">R/O</th><th>Descrição</th></tr></thead><tbody><tr><td>Token</td><td>int</td><td>R</td><td>Token da consulta</td></tr><tr><td>Found</td><td>int</td><td>O</td><td>Quantidade de registros encontrados</td></tr><tr><td>Items</td><td>object[]</td><td>O</td><td>Lista de dados</td></tr><tr><td>Items.UID</td><td>string</td><td>O</td><td>Identificador único</td></tr><tr><td>Items.Name</td><td>string</td><td>O</td><td>Nome</td></tr><tr><td>Items.ID</td><td>string</td><td>O</td><td>Identificador do aluno</td></tr><tr><td>Items.Sex</td><td>string</td><td>O</td><td>Sexo</td></tr><tr><td>Items.ClassName</td><td>string</td><td>O</td><td>Turma</td></tr><tr><td>Items.Academe</td><td>string</td><td>O</td><td>Unidade</td></tr><tr><td>Items.UTC</td><td>int</td><td>O</td><td>Horário UTC do reconhecimento</td></tr></tbody></table>

Resposta:

```http
{
"token": 1
}
```

#### 2. Obtenha o número total de dados que atendem aos critérios.

**Método:** `GET /cgi-bin/api/FaceAttendance/getCount`

**Código do Evento:** `FaceAttendancegetCount`

**Resposta**

```http
{
"count": 100
}
```

#### 3. Obtenha dados estatísticos de presença para um número específico de ocorrências de reconhecimento facial.

**Método:** `GET /cgi-bin/api/FaceAttendance/doFind`

**Código do Evento:** `FaceAttendancedoFind`

**Resposta**

```http
{ 
"found": 2 
"items": 
 [{ 
"UID":123456789_1680451500, 
"Name": Zhang San, 
"ID": 123456789, 
"Sex": Male, 
"Academe": School of Computer Science, 
"ClassName": Software Class 143, 
"UTC": 1680451500 
 }, 
 { 
"UID":987654321_1680451511, 
"Name": Li Si, 
"ID": 987654321, 
"Sex": Female, 
"Academe": School of Computer Science, 
"ClassName": Software Class 143, 
"UTC": 1680451511 
 }] 
}
```

#### 4. Pare de consultar as estatísticas de presença por reconhecimento facial.

**Método:** `GET /cgi-bin/api/FaceAttendance/stopFind`

**Código do Evento:** `FaceAttendancestopFind`

**Resposta**

```
{}
```

***

Notas finais:&#x20;

* Todas as operações do servidor de **Reconhecimento Facial** são expostas via **HTTP CGI**, utilizando majoritariamente o método **GET** para controle e **POST** para envio de imagens ou dados binários.
* Os **Grupos Faciais** são a unidade central do sistema:\
  pessoas, canais, similaridade, alarmes, eventos e exportações sempre fazem referência a um `groupID`.
* A implantação de grupos em canais pode ser feita de três formas:
  * `putDisposition` (associação incremental),
  * `deleteDisposition` (remoção pontual),
  * `setGroup` (definição completa do estado do canal, sobrescrevendo configurações anteriores).
* Buscas de pessoas e históricos seguem o modelo **assíncrono por token**, dividido em:\
  **start → doFind → stop**, sendo obrigatório finalizar a busca para liberar recursos do dispositivo.
* Eventos de reconhecimento facial (**FaceDetection**, **FaceRecognition**, **FaceFeatureAbstract**, entre outros) são enviados via **conexão HTTP persistente**, exigindo clientes compatíveis com streaming contínuo (ex.: `curl -N`, bibliotecas HTTP com suporte a stream).

***


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation by asking a question.

Perform an HTTP GET request on the following URL with the `ask` and `goal` query parameters:

```
GET https://portal-integracao.intelbras.com.br/cameras-and-gravadores/integracao-api-cftvip-e-mibo/cameras-e-gravadores/gestao-de-reconhecimento-facial.md?ask=<question>&goal=<user_goal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is what the user is ultimately trying to achieve, the reason they need the answer. Sharing it helps GitBook give you a better, more relevant answer. A goal is most helpful when it describes the outcome the user wants rather than restating the question. For example, with `ask=how do I create an API token`, a goal like `automate deployments from our CI pipeline` lets GitBook tailor the answer to that use case.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
