> ## Documentation Index
> Fetch the complete documentation index at: https://docs.unicontrol.me/llms.txt
> Use this file to discover all available pages before exploring further.

# LPR Genérico (RTSP + alpr-server)

> Reconhecimento automático de placas em qualquer câmera com RTSP, via alpr-server rodando na rede do cliente

# LPR Genérico

A integração **LPR Genérico** permite reconhecer placas veiculares em qualquer câmera com **RTSP** ou **ONVIF**, usando um serviço dedicado — o `alpr-server` — rodando localmente. É o caminho universal: funciona com Hikvision, Dahua, Intelbras, Axis, Reolink e qualquer câmera genérica que entregue stream H.264.

Para câmeras com ANPR nativo (reconhecimento embarcado), fique de olho nas integrações específicas (Hikvision ANPR, Dahua ITC, Intelbras VIP LPR, Axis License Plate Verifier) que entrarão em versões futuras.

## Pré-requisitos

* Uma câmera IP com stream RTSP acessível na rede local
* Um **`alpr-server`** rodando na mesma rede (ou acessível por IP). Veja [Autohospedagem do alpr-server](/self-hosting/alpr-server) para instruções
* Edge Home registrado no Portal (a integração requer execução local)

<Note>
  O vídeo nunca sai da LAN do cliente. Apenas os eventos JSON (placa detectada + snapshot recortado opcional) são publicados no Portal via MQTT.
</Note>

## Configurar

<Steps>
  <Step title="Suba o alpr-server">
    ```bash theme={null}
    docker run -d --name alpr-server -p 8080:8080 \
      -v alpr-models:/data/models \
      -v alpr-snapshots:/data/snapshots \
      ghcr.io/unisec/alpr-server:latest
    ```

    No primeiro uso o serviço baixa os modelos ONNX do GitHub (\~30 MB). Depois roda offline.
  </Step>

  <Step title="Adicione a integração">
    No Portal, vá em **Configurações → Integrações → Adicionar → LPR Genérico**.
  </Step>

  <Step title="Informe o endereço do alpr-server">
    Preencha IP/porta onde o serviço está rodando. Se habilitou `ALPR_API_TOKEN`, cole o token.
    O probe conecta no `/v1/info` e mostra: versão do servidor, modelos carregados, device (CPU/CUDA).
  </Step>

  <Step title="Informe a câmera">
    URL RTSP completa (incluindo path do stream), usuário/senha se aplicável.
    Ajuste:

    * **Confiança mínima** (0.0–1.0, padrão 0.85) — leituras abaixo são descartadas
    * **Debounce (ms)** — tempo mínimo entre reemissões da mesma placa
    * **Formato (regex)** — opcional, filtra pelo padrão esperado (Mercosul: `^[A-Z]{3}[0-9][A-Z][0-9]{2}$`)
    * **FPS** — taxa de análise (padrão 1 fps, aumente para veículos rápidos)
    * **Filtro de movimento** — economiza CPU rodando ALPR só quando há mudança no quadro
    * **Snapshot** — se guarda imagem (recorte da placa ou frame inteiro) por leitura
  </Step>

  <Step title="Teste">
    Abra o painel **Placas** no menu lateral — leituras aparecerão em tempo real conforme veículos passam pela câmera.
  </Step>
</Steps>

## Recursos

* Entidade `license_plate_recognition` por câmera cadastrada
* Painel `/lpr` com feed ao vivo, histórico filtrável e placas conhecidas
* Trigger `plate_detected` disponível no editor de automações
* Ponte opcional com o **Lock Manager** — placas marcadas como "Permitir" abrem o lock vinculado automaticamente

## URL RTSP por fabricante

| Fabricante | Caminho típico |
| - | - |
| Hikvision | `/Streaming/Channels/101` |
| Dahua / Intelbras VIP | `/cam/realmonitor?channel=1&subtype=0` |
| Axis | `/axis-media/media.amp` |
| Reolink | `/h264Preview_01_main` |
| ONVIF genérico | Use a integração **ONVIF** para descobrir automaticamente |

## Como Funciona

1. O edge home envia um comando ao `alpr-server` criando um "stream" apontando para o RTSP da câmera.
2. O `alpr-server` puxa frames do RTSP, aplica filtro de movimento opcional, roda o detector YOLOv9 + OCR CCT em cada frame candidato.
3. Após debounce (mesma placa dentro da janela não é reemitida), um evento WebSocket é enviado ao edge.
4. O edge publica o evento no MQTT org-escopado `portal/{org}/events/plate_detected`.
5. O core persiste em `plate_reads`, atualiza o estado da entidade, dispara triggers de automação e aciona a ponte lock-manager se aplicável.

## Múltiplas câmeras no mesmo servidor

Um único `alpr-server` serve N câmeras — basta cadastrar várias integrações apontando para o mesmo endereço. Hard cap configurável via `ALPR_MAX_STREAMS` (padrão 10).

## Dicas e troubleshooting

* **Nenhuma leitura aparece**: verifique no painel do `alpr-server` (`http://host:8080/docs`) se o stream foi criado. Confirme que o RTSP é acessível pelo container.
* **Muitos falsos positivos**: aumente `min_confidence` para 0.90+, defina `format_regex` ou aumente `debounce_ms`.
* **CPU alto**: habilite filtro de movimento, reduza FPS, considere a imagem CUDA se tiver GPU NVIDIA.
* **Snapshot não aparece**: `snapshot_url` é relativa ao `alpr-server`; configure um proxy ou ignore no MVP.

## Veja também

* [Autohospedagem do alpr-server](/self-hosting/alpr-server)
* [Lock Manager](/lock-manager) — como vincular placas a pessoas via credencial "veículo"
* [Automações](/automacoes) — como usar o trigger `plate_detected`


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.