> 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/insearch.md).

# InSearch

Integração de busca por imagem (InSearch) via API/CGI. Inclui verificação e configuração do modo do dispositivo, consulta de capacidades e o fluxo de busca por imagem (start/doFind/stop) de pessoas e veículos.

### Dicas & Boas Práticas

* Sempre verifique o modo do dispositivo (`DeviceSceneMode`) antes de iniciar uma busca; buscas em modo incorreto falham silenciosamente.
* Utilize **HTTP Digest Authentication** em todas as chamadas.
* Reaproveite o `token` retornado por `startFindHistoryByPic` nas chamadas seguintes (`doFindByPic`, `stopFindHistoryByPic`) ele identifica a sessão de busca.
* Sempre encerre a sessão com `stopFindHistoryByPic` ao final da consulta, mesmo se não for consultar mais candidatos, para liberar recursos no dispositivo.
* Trate corretamente respostas multipart (`multipart/x-mixed-replace`), pois o progresso da busca é reportado em múltiplos blocos JSON.
* Verifique `SupportSMDPicSearchMask` em `getCaps` antes de expor a funcionalidade ao usuário final nem todo equipamento Intelbras suporta o InSearch.
* Trate exceções, timeouts e reenvio de eventos para garantir estabilidade da integração.

### O que é o InSearch

**InSearch** é o recurso Intelbras de busca rápida por imagem em gravações de vídeo, que localiza **pessoas** ou **veículos** a partir de uma foto de referência, sem revisão manual do vídeo.

### Tabela de Parâmetros

| Name                    | Type   | R/O | Description                                                    | Example                |
| ----------------------- | ------ | --- | -------------------------------------------------------------- | ---------------------- |
| name                    | string | R   | Nome do parâmetro de configuração consultado/definido          | "DeviceSceneMode"      |
| Mode                    | int    | R   | Modo de cena do dispositivo. `5` habilita o InSearch           | 5                      |
| SupportSMDPicSearchMask | int    | R   | Máscara indicando suporte do dispositivo ao InSearch           | 6                      |
| SearchObjectTypeMask    | int    | R   | Máscara dos tipos de objeto suportados na busca                | 6                      |
| MaxGroupNum             | uint32 | O   | Máx. de grupos faciais suportados                              | 50                     |
| MaxPersonNum            | uint32 | O   | Máx. de pessoas cadastradas                                    | 20000                  |
| SinglePicMaxLength      | uint32 | O   | Tamanho máx. de imagem única (KB)                              | 4096                   |
| MultiAppendPicLength    | uint32 | O   | Tamanho máx. total para múltiplas imagens (KB)                 | 4096                   |
| Channel                 | int    | R   | Índice do canal de vídeo pesquisado                            | 0                      |
| StartTime               | string | R   | Início do intervalo de busca (ISO 8601 UTC)                    | "2024-07-09T00:00:00Z" |
| EndTime                 | string | R   | Fim do intervalo de busca (ISO 8601 UTC)                       | "2024-07-09T23:00:00Z" |
| ObjectType              | int    | O   | Tipo de objeto buscado (0 Face, 1 Pessoa, 2 Veículo)           | 1                      |
| Similarity              | int    | O   | Similaridade mínima exigida \[0–100]                           | 50                     |
| MaxCandidate            | int    | O   | Número máximo de candidatos retornados                         | 500                    |
| token                   | uint   | R   | Token da sessão de busca, retornado em `startFindHistoryByPic` | 7                      |
| index                   | int    | O   | Índice inicial dos resultados (paginação)                      | 0                      |
| count                   | int    | O   | Quantidade de resultados retornados por página                 | 10                     |
| progress                | int    | R   | Progresso da busca em andamento \[0–100]                       | 100                    |
| totalCount              | int    | R   | Total de itens processados na busca (-1 enquanto em andamento) | 0                      |
| found                   | int    | R   | Quantidade de candidatos encontrados                           | 1                      |
| Similarity (resultado)  | int    | R   | Similaridade do candidato encontrado \[0–100]                  | 96                     |
| Time                    | string | R   | Horário de aparição do candidato                               | "2024-07-09 18:48:06"  |

### Consultar o Modo do Dispositivo

**Tópico:** Verificar se o dispositivo está no modo de cena necessário para o InSearch.

**Métodos:** `GET /cgi-bin/configManager.cgi?action=getConfig&name=DeviceSceneMode`

**Exemplo:**

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

**Resposta:**

```
table.DeviceSceneMode.Mode=5
```

> Para o InSearch funcionar, `Mode` precisa ser **5**. Qualquer outro valor indica que o dispositivo não está no modo compatível.

### Configurar o Modo do Dispositivo

**Tópico:** Definir o dispositivo no modo de cena necessário, caso não esteja no `Mode=5`.

**Métodos:** `GET /cgi-bin/configManager.cgi?action=setConfig&DeviceSceneMode.Mode=5`

**Exemplo:**

```
http://172.10.50.11/cgi-bin/configManager.cgi?action=setConfig&DeviceSceneMode.Mode=5
```

**Resposta:**

```
OK
```

### Consultar Capacidades de Busca (Pessoa / Veículo)

**Tópico:** Consultar as capacidades do módulo de reconhecimento, verificando o suporte ao InSearch de pessoas e/ou veículos.

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

**Exemplo:**

```
http://172.11.13.95/cgi-bin/api/faceRecognitionServer/getCaps
```

Body: vazio

**Resposta:**

json

```json
{
  "AsynPush": true,
  "MaxGroupNum": 50,
  "MaxPersonNum": 20000,
  "MultiAppendPicLength": 4096,
  "SearchObjectTypeMask": 6,
  "SinglePicMaxLength": 4096,
  "SupportDetectObjectTypeMask": 6,
  "SupportRealUTC": 1,
  "SupportSMDObjectTypeMask": 22,
  "SupportSMDPicSearchMask": 6,
  "detectMethod": 1,
  "multiFind": true,
  "reAbstract": 1
}
```

> O campo **`SupportSMDPicSearchMask`** indica se o equipamento (iNVR/DVR/NVR) suporta o InSearch. Valor `6` = suportado, habilitando busca de pessoa e veículo por imagem.

### Iniciar Busca por Imagem

**Tópico:** Iniciar a busca por imagem, filtrando por canal, intervalo de tempo, tipo de objeto e similaridade mínima. Em resposta, há um `token` para consultar os resultados e um progresso da busca.

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

**Exemplo:**

```
http://172.11.13.95/cgi-bin/faceRecognitionServer.cgi?action=startFindHistoryByPic&Channel=0&StartTime=2024-07-09T00:00:00Z&EndTime=2024-07-09T23:00:00Z&ObjectType=1&Similarity=50&MaxCandidate=500
```

Body (form-data): imagem de referência, ex. `1_20240709170011_2168375_VO.jpg`

**Resposta:**

```
--1234abcd
Content-Type: application/json
{
  "progress": 0,
  "token": 7,
  "totalCount": -1
}
--1234abcd
Content-Type: application/json
{
  "progress": 100,
  "token": 7,
  "totalCount": 0
}
--1234abcd--
```

### Obter Resultado da Busca

**Tópico:** Consultar os candidatos encontrados na sessão de busca, usando o `token` retornado por `startFindHistoryByPic`.

**Métodos:** `POST /cgi-bin/faceRecognitionServer.cgi?action=doFindByPic`

**Exemplo:**

```
http://172.11.13.95/cgi-bin/faceRecognitionServer.cgi?action=doFindByPic&token=7&index=0&count=10
```

**Resposta:**

json

```json
{
  "Candidates": [
    {
      "Person": {
        "CertificateType": null,
        "City": null,
        "Country": null,
        "FeatureState": null,
        "GroupID": null,
        "ID": null,
        "Name": null,
        "Province": null,
        "Sex": null,
        "UID": null
      },
      "Similarity": 96,
      "Time": "2024-07-09 18:48:06"
    }
  ]
}
```

### Encerrar a Sessão de Busca

**Tópico:** Parar a sessão de busca por imagem, liberando recursos no dispositivo.

**Métodos:** `POST /cgi-bin/faceRecognitionServer.cgi?action=stopFindHistoryByPic`

**Exemplo:**

```
http://172.11.13.95/cgi-bin/faceRecognitionServer.cgi?action=stopFindHistoryByPic&token=9
```

Autenticação: Digest Auth (usuário/senha do dispositivo)

**Resposta:**

```
OK
```

### Resumo do Fluxo

| Passo | Ação                            | CGI                                                         |
| ----- | ------------------------------- | ----------------------------------------------------------- |
| 1     | Verificar modo do dispositivo   | `configManager.cgi?action=getConfig&name=DeviceSceneMode`   |
| 2     | Configurar modo (se necessário) | `configManager.cgi?action=setConfig&DeviceSceneMode.Mode=5` |
| 3     | Consultar capacidades de busca  | `api/faceRecognitionServer/getCaps`                         |
| 4     | Iniciar busca por imagem        | `faceRecognitionServer.cgi?action=startFindHistoryByPic`    |
| 5     | Consultar resultados            | `faceRecognitionServer.cgi?action=doFindByPic`              |
| 6     | Encerrar busca                  | `faceRecognitionServer.cgi?action=stopFindHistoryByPic`     |

### Notas Finais

* A qualidade e o enquadramento da imagem de referência impactam diretamente a precisão da similaridade retornada.
* O intervalo de tempo (`StartTime`/`EndTime`) deve ser mantido o menor possível para reduzir o tempo de processamento da busca.
* O `token` de uma sessão só é válido enquanto a busca não for encerrada com `stopFindHistoryByPic`.
* Buscas simultâneas em múltiplos canais dependem do suporte a `multiFind`, reportado em `getCaps`.
* Sessões de busca não encerradas podem consumir recursos do dispositivo indefinidamente.


---

# 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/insearch.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.
