> 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/mapa-de-calor-pessoas.md).

# Mapa de Calor (Pessoas)

Integração: APIs de mapa de calor para obter imagem/dados binários e assinar streams (raw/trace real e histórico) via multipart, com heartbeat e conexão persistente.

## 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

<table><thead><tr><th>Campo</th><th>Tipo</th><th width="97.629638671875">R/O</th><th>Descrição</th><th>Exemplo</th></tr></thead><tbody><tr><td>summary</td><td>object</td><td>R</td><td>Resumo das estatísticas de pessoas no vídeo</td><td>—</td></tr><tr><td>summary.Channel</td><td>int</td><td>R</td><td>Índice do canal de vídeo (inicia em 0)</td><td>0</td></tr><tr><td>summary.RuleName</td><td>string</td><td>R</td><td>Tipo de regra (<code>ManNumDetection</code> ou <code>NumberStat</code>)</td><td>NumberStat</td></tr><tr><td>summary.EnteredSubtotal</td><td>object</td><td>O</td><td>Estatísticas de entrada</td><td>—</td></tr><tr><td>summary.EnteredSubtotal.Total</td><td>int</td><td>R</td><td>Total de entradas</td><td>14</td></tr><tr><td>summary.EnteredSubtotal.Today</td><td>int</td><td>R</td><td>Entradas do dia</td><td>2</td></tr><tr><td>summary.EnteredSubtotal.Hour</td><td>int</td><td>R</td><td>Entradas da hora</td><td>1</td></tr><tr><td>summary.EnteredSubtotal.TotalInTimeSection</td><td>int</td><td>O</td><td>Entradas após <code>clearSectionStat</code></td><td>0</td></tr><tr><td>summary.ExitedSubtotal</td><td>object</td><td>O</td><td>Estatísticas de saída</td><td>—</td></tr><tr><td>summary.ExitedSubtotal.Total</td><td>int</td><td>R</td><td>Total de saídas</td><td>32</td></tr><tr><td>summary.ExitedSubtotal.Today</td><td>int</td><td>R</td><td>Saídas do dia</td><td>3</td></tr><tr><td>summary.ExitedSubtotal.Hour</td><td>int</td><td>R</td><td>Saídas da hora</td><td>2</td></tr><tr><td>summary.ExitedSubtotal.TotalInTimeSection</td><td>int</td><td>O</td><td>Saídas após <code>clearSectionStat</code></td><td>0</td></tr><tr><td>summary.PassedSubtotal</td><td>object</td><td>O</td><td>Estatísticas de passagem</td><td>—</td></tr><tr><td>summary.PassedSubtotal.Total</td><td>int</td><td>R</td><td>Total de passagens</td><td>32</td></tr><tr><td>summary.PassedSubtotal.Today</td><td>int</td><td>R</td><td>Passagens do dia</td><td>0</td></tr><tr><td>summary.PassedSubtotal.Hour</td><td>int</td><td>R</td><td>Passagens da hora</td><td>0</td></tr><tr><td>summary.EnteredDupSubtotal</td><td>object</td><td>O</td><td>Entradas duplicadas</td><td>—</td></tr><tr><td>summary.EnteredDupSubtotal.Total</td><td>int</td><td>R</td><td>Total de entradas duplicadas</td><td>14</td></tr><tr><td>summary.EnteredDupSubtotal.Today</td><td>int</td><td>R</td><td>Entradas duplicadas do dia</td><td>0</td></tr><tr><td>summary.EnteredDupSubtotal.Hour</td><td>int</td><td>R</td><td>Entradas duplicadas da hora</td><td>0</td></tr><tr><td>summary.ExitedDupSubtotal</td><td>object</td><td>O</td><td>Saídas duplicadas</td><td>—</td></tr><tr><td>summary.ExitedDupSubtotal.Total</td><td>int</td><td>R</td><td>Total de saídas duplicadas</td><td>32</td></tr><tr><td>summary.ExitedDupSubtotal.Today</td><td>int</td><td>R</td><td>Saídas duplicadas do dia</td><td>0</td></tr><tr><td>summary.ExitedDupSubtotal.Hour</td><td>int</td><td>R</td><td>Saídas duplicadas da hora</td><td>0</td></tr><tr><td>summary.InsideSubtotal</td><td>object</td><td>O</td><td>Pessoas dentro da região</td><td>—</td></tr><tr><td>summary.InsideSubtotal.Total</td><td>int</td><td>R</td><td>Total atual de pessoas</td><td>65</td></tr><tr><td>summary.InsideSubtotal.ManStayStat</td><td>object[]</td><td>O</td><td>Histórico de permanência</td><td>—</td></tr><tr><td>summary.InsideSubtotal.ManStayStat.EnterTime</td><td>string</td><td>O</td><td>Horário de entrada</td><td>2012-01-04 00:00:00</td></tr><tr><td>summary.InsideSubtotal.ManStayStat.ExitTime</td><td>string</td><td>O</td><td>Horário de saída</td><td>2012-01-04 00:00:45</td></tr><tr><td>summary.EnteredNoDupSubtotal</td><td>object</td><td>O</td><td>Entradas após deduplicação</td><td>—</td></tr><tr><td>summary.EnteredNoDupSubtotal.Total</td><td>uint32</td><td>O</td><td>Total acumulado</td><td>65325</td></tr><tr><td>summary.EnteredNoDupSubtotal.Today</td><td>uint32</td><td>O</td><td>Total do dia</td><td>32</td></tr><tr><td>summary.EnteredNoDupSubtotal.Hour</td><td>uint32</td><td>O</td><td>Total da hora</td><td>32</td></tr><tr><td>summary.ExitedNoDupSubtotal</td><td>object</td><td>O</td><td>Saídas após deduplicação</td><td>—</td></tr><tr><td>summary.ExitedNoDupSubtotal.Total</td><td>uint32</td><td>O</td><td>Total acumulado</td><td>65325</td></tr><tr><td>summary.ExitedNoDupSubtotal.Today</td><td>uint32</td><td>O</td><td>Total do dia</td><td>32</td></tr><tr><td>summary.ExitedNoDupSubtotal.Hour</td><td>uint32</td><td>O</td><td>Total da hora</td><td>32</td></tr><tr><td>summary.RealNumber</td><td>object</td><td>O</td><td>Número real corrigido (uso cauteloso)</td><td>—</td></tr><tr><td>summary.RealNumber.Total</td><td>uint32</td><td>O</td><td>Total acumulado</td><td>65325</td></tr><tr><td>summary.RealNumber.Today</td><td>uint32</td><td>O</td><td>Total do dia</td><td>32</td></tr><tr><td>summary.RealNumber.Hour</td><td>uint32</td><td>O</td><td>Total da hora</td><td>32</td></tr><tr><td>summary.EnteredFilterSubtotal</td><td>object</td><td>O</td><td>Entradas de funcionários</td><td>—</td></tr><tr><td>summary.EnteredFilterSubtotal.Total</td><td>uint32</td><td>O</td><td>Total acumulado</td><td>65325</td></tr><tr><td>summary.EnteredFilterSubtotal.Today</td><td>uint32</td><td>O</td><td>Total do dia</td><td>32</td></tr><tr><td>summary.EnteredFilterSubtotal.Hour</td><td>uint32</td><td>O</td><td>Total da hora</td><td>32</td></tr><tr><td>summary.ExitedFilterSubtotal</td><td>object</td><td>O</td><td>Saídas de funcionários</td><td>—</td></tr><tr><td>summary.ExitedFilterSubtotal.Total</td><td>uint32</td><td>O</td><td>Total acumulado</td><td>65325</td></tr><tr><td>summary.ExitedFilterSubtotal.Today</td><td>uint32</td><td>O</td><td>Total do dia</td><td>32</td></tr><tr><td>summary.ExitedFilterSubtotal.Hour</td><td>uint32</td><td>O</td><td>Total da hora</td><td>32</td></tr></tbody></table>

***

### Obter Informações do Mapa de Calor

**Tópicos**: Recupera a imagem do mapa de calor gerada dentro de um intervalo de tempo específico.

* **Métodos: `GET`**`/cgi-bin/heatMap.cgi?action=getPicByTime`

**Exemplo:**

```powershell
http://<ip>/cgi-bin/heatMap.cgi?action=getPicByTime&channel=1&StartTime=2015-08-20%20
00:00:00&EndTime=2015-08-21%2023:59:59&PtzPresetId=1
```

**Resposta:**

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

### Obter Informações do Mapa de Calor Baseado em Pessoas

**Tópicos**: Obtém dados binários do mapa de calor baseado em estatísticas de movimentação/presença de pessoas.

* **Métodos: `GET`**`/cgi-bin/videoStatServer.cgi?action=getHeatMap`

**Exemplo:**

```http
http://<ip>/cgi-bin/videoStatServer.cgi?action=getHeatMap&channel=1&PlanID=2&StartTime
=2010-05-12%2020:00:00&EndTime=2010-05-12%2022:00:00&HeatMapType=AverageStayTime
```

**Resposta:**

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

### Assinar Informações de Rastreamento em Tempo Real&#x20;

**Tópicos**: Mantém uma conexão persistente que envia dados de rastreamento em tempo real, incluindo mensagens de heartbeat.

* **Métodos: `GET`**`/cgi-bin/videoStatServer.cgi?action=attachRealTraceProc`

**Exemplo:**

```http
http://<ip>/cgi-bin/videoStatServer.cgi?action=attachRealTraceProc&channel=1&heartbeat=5
```

**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/octet-stream 
Content-Length: <length> 
 
<realtime trace binary data> --<boundary> 
Content-Type: text/plain 
Content-Length: 11 
 
Heartbeat --<boundary> 
Content-Type: application/octet-stream 
Content-Length: <length> 
 
<realtime trace binary data> --<bound
```

### Obter Informações de Rastreamento do Histórico de Pessoas

**Tópicos**: Retorna dados históricos de rastreamento de pessoas em um período definido.

* **Métodos: `GET`**`/cgi-bin/videoStatServer.cgi?action=getHistoryTrace`

**Exemplo:**

```http
http://<ip>/cgi-bin/videoStatServer.cgi?action=getHistoryTrace&channel=1&PlanID=2&StartTi
me=2010-05-12%2020:00:00&EndTime=2010-05-12%2022:00:00
```

**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/octet-stream 
Content-Length: <length> 
 
<history trace binary data> --<boundary> 
Content-Type: application/octet-stream 
Content-Length: <length> 
 

<history trace binary data> --<boundary> 
```

### Assinar Dados Brutos do Mapa de Calor

**Tópicos**: Assinatura contínua que transmite dados brutos do mapa de calor com heartbeat para manter a conexão ativa.

* **Métodos: `GET`**`/cgi-bin/HeatMapManager.cgi?action=attachRaw`

**Exemplo:**

```http
http://<ip>/cgi-bin/HeatMapManager.cgi?action=attachRaw&channel=1&heartbeat=5
```

**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/octet-stream 
Content-Length: <length> 
 
<heap map raw data> --<boundary> 
Content-Type: text/plain 
Content-Length: 11 
 
Heartbeat -<boundary> 
Content-Type: application/octet-stream 
Content-Length: <length> 
 
<heap map raw data> --<boundary>
```

***

Notas Finais:

* Todas as rotas retornam **dados binários**, exigindo cliente compatível para leitura de stream.
* Métodos com `attach` mantêm **conexão persistente**, ideal para aplicações de monitoramento contínuo.
* O parâmetro **heartbeat** evita encerramento automático da conexão.
* Intervalos de tempo devem estar no formato `YYYY-MM-DD HH:MM:SS` (URL encoded).
* Ferramentas simples de teste HTTP podem não interpretar corretamente respostas multipart, prefira clientes com suporte a streaming.

***


---

# 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/mapa-de-calor-pessoas.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.
