Frigate + IA Generativa (GENAI) + Telegram (ou outro meio de notificação)

As versões mais recentes do Frigate trouxeram a possibilidade de utilização de IA Generativa como forma de descrever reviews ou sequência de objetos (pessoas, carros, motos, cães, etc) das imagens, e a comunidade tem participado muito propondo sugestões de aperfeiçoamento. A documentação do Frigate é um ponto forte da solução, mas as vezes precisamos ler, reler, reler outra vez, pesquisar um pouco mais nos fóruns, para só depois perceber que estava tudo ali desde o início, só bastava entender um pouco mais que estava escrito. (rs)

Brincadeiras à parte, a documentação é de um ótimo nível, mas exige certo nível de conhecimento que só se adquire estudando, e exercitando.

Por isso, neste tutoria pretende encurtar o caminho de quem ainda está começando ou não parou para ler, reler..rs, e quer utilizar a IA para descrever as cenas de suas câmeras. Alguns trechos não entrarei em detalhe e será necessário a consulta à documentação. Principalmente em relação a como ativar reviews (Review | Frigate), detecção de objetos (Filters | Frigate), e a configuração da conta de IA que escolher. (Configuring Generative AI | Frigate).

Atualmente (versão 0.17.1), o Frigate aceita Gemini, Ollama, OpenAI ou Azure OpenAI. Por opção econômica e por não ter um hardware que possa rodar o Ollama localmente, optei pelo Gemini, que possui um bom número de tokens gratúitos, e pode atender muito bem se você não deixar o GENAI ligado o tempo todo ou se não tem uma demanda tão alta.

1) Ativação da GENAI e configuração do escopo que deseja analisar:

Para utilizar GENAI você precisará alterar seu arquivo de configuração, adicionando as informações do provedor de IA, credenciais e versão do modelo.

genai:
  provider: gemini
  api_key: SEU_API_KEY_CRIADO_NO GEMINI
  model: gemini-2.5-flash

Muitos iniciantes tentam usar a chave da conta Google normal, quando o correto é gerar no Google AI Studio.

A ativação de GENAI para objetos para este tutorial é obrigatória, porque o tópico MQTT que indica a atualização da descrição pela IA usado como gatilho da automação somente é publicado para objetos e não para review.

Na configuração de GENAI para objetos é possível definir prompts específico por tipo de objeto, o que direciona melhor o que deseja como análise.

objects:
  genai:
    enabled: true
    prompt: Analise o(a) {label} nessas imagens da câmera de segurança {camera}.
      Concentre-se nas ações, no comportamento e na possível intenção do(a) 
      {label}, em vez de apenas descrever sua aparência.
    object_prompts:
      person: Examine a pessoa principal nessas imagens. O que ela está fazendo 
        e o que suas ações podem sugerir sobre suas intenções (por exemplo, 
        aproximando-se de uma porta, saindo de um local, parada)? Não descreva o
        ambiente ao redor nem detalhes estáticos.
      car: Observe o veículo principal nessas imagens. Concentre-se em seu 
        movimento, direção ou propósito (por exemplo, estacionando, 
        aproximando-se, circulando). Se for um veículo de entrega, mencione a 
        empresa. Cite a placa, se conseguir identificar
      motorcycle: Observe a moto principal nessas imagens. Concentre-se em seu 
        movimento, direção ou propósito (por exemplo, estacionando, 
        aproximando-se, circulando). Se for um veículo de entrega, tiver um baú 
        ou acessório similar, mencione. Cite a placa, se conseguir identificar

Outras configurações estão disponíveis na documentação e merecem ser lidas para ampliar suas possibilidades. (Object Descriptions | Frigate)

A ativação para reviews também é possível e pode trazer outra gama de flexibilidade, associando como você configura a ativação do que quer classificar como alertas e detecções dos reviews. Novamente sugiro aprofundar na documentação.(Review | Frigate)

review:
  genai:
    enabled: true
    preferred_language: Portuguese

Outras configurações estão disponíveis na documentação. (Review Summaries | Frigate)

Como em outras configurações do Frigate, as configurações definidas de modo geral podem ser sobre gravadas a nível de câmera. Aprofunde-se na documentação para filtrar o nível de uso da IA de modo a não utilizar todos os TOKENS disponíveis.

Aqui coloco um EXEMPLO de como podemos limitar a GENAI para nem todas os objetos tratados na câmera. Observe que para reviews e GENAI de objetos, nem todos os objetos rastreados pela câmera são descritos.

  frente_garagem:
    ffmpeg:
      inputs:
        - path: rtsp://127.0.0.1:8554/visao_da_rua_garagem
          input_args: preset-rtsp-restream
          roles:
            - record
			- detect
    objects:
      track:
        - person
        - car
        - motorcycle
        - dog
      genai:
        enabled: true
        objects:
          - car
          - motorcycle
        required_zones:
          - entrada_garagem
          - calcada
    zones:
      calcada:
        coordinates: 
          0,0.174,0.035,0.164,0.046,0.075,0.204,0.065,0.406,0.406,0.763,1,0.079,1
        objects:
          - person
          - motorcycle
          - car
          - dog
        inertia: 3
        loitering_time: 0
      entrada_garagem:
        coordinates: 0.03,0.545,0.083,0.546,0.16,1,0,1,0,0.247
        loitering_time: 0
        objects:
          - person
          - dog
          - car
          - motorcycle
        inertia: 3
    review:
      alerts:
        labels:
          - person
        required_zones: entrada_garagem
      detections:
        required_zones:
          - entrada_garagem
          - calcada

A partir de agora você já consegue acompanhar as descrições que a GENAI agregou nos reviews e objetos de suas câmeras. Basta navegar pelo menu de reviews, pesquisa ou histório e observar na área de detalhe da imagem.

2) Ligando e Desligando GENAI Pelo Home Assistant

O Frigate disponibiliza diversas informações em tópicos MQTT, além de possibilitar a interação por esse meio (MQTT | Frigate). Para controlar o uso de GENAI, temos os tópicos frigate/<camera_name>/object_descriptions/set e frigate/<camera_name>/review_descriptions/set, o status atual pode ser lido em frigate/<camera_name>/object_descriptions/state e frigate/<camera_name>/review_descriptions/state.

Para ligar e desligar o uso de GENAI das câmeras, crie as automações utilizando o gatilho que melhor lhe atender, como nos exemplos abaixo.

Liga GENAI:

alias: Frigate Controle GENAI - Liga com Alarme Ativo
triggers:
  - entity_id: binary_sensor.particao_a
    to: "on"
    trigger: state
conditions: []
actions:
  - repeat:
      for_each: "{{ cameras}}"
      sequence:
        - data:
            topic: frigate/{{ repeat.item }}/review_descriptions/set
            payload: "ON"
          action: mqtt.publish
        - data:
            topic: frigate/{{ repeat.item }}/object_descriptions/set
            payload: "ON"
          action: mqtt.publish
mode: single
variables:
  cameras:
    - SUA_CAMERA1
    - SUA_CAMERA2
    - SUA_CAMERA3

Desliga GENAI

alias: Frigate Controle GENAI - Desliga com Alarme Desativado
triggers:
  - entity_id: binary_sensor.particao_a
    to: "off"
    trigger: state
conditions: []
actions:
  - repeat:
      for_each: "{{ cameras}}"
      sequence:
        - data:
            topic: frigate/{{ repeat.item }}/review_descriptions/set
            payload: "OFF"
          action: mqtt.publish
        - data:
            topic: frigate/{{ repeat.item }}/object_descriptions/set
            payload: "OFF"
          action: mqtt.publish
mode: single
variables:
  cameras:
    - SUA_CAMERA1
    - SUA_CAMERA2
    - SUA_CAMERA3

Para ter a indicação de uso de GENAI pra suas câmeras, opcionalmente, você pode criar um sensor MQTT para cada uma delas no configuration.yaml do HA.

mqtt: 
  - binary_sensor:
    - name: "NOME_DA_SUA_CAMERA"
      unique_id: NOME_DA_SUA_CAMERA_genai_review
      state_topic: "frigate/NOME_DA_SUA_CAMERA/review_descriptions/state"
	  
    - name: "NOME_DA_SUA_CAMERA"
      unique_id: NOME_DA_SUA_CAMERA_genai_object
      state_topic: "frigate/NOME_DA_SUA_CAMERA/object_descriptions/state"

3) Enviando notificação pelo telegram

Imagino que já esteja com o telegram configurado e funcionando. Senão, utilize a documentação do HA para realizar a configuração. (Telegram - Home Assistant)

Para enviar a notificação, utilizaremos o tópico frigate/tracked_object_update filtrando pelo type “description”, conforme indica a documentação (MQTT | Frigate). Precisaremos também utilizar um comando REST para recuperar o ID da mensagem, portanto:

Criar comando REST no configuration.yaml e ajuste o IP_DO_SEU_FRIGATE:

rest_command:
  # Busca os detalhes do evento no Frigate
  frigate_get_event:
    url: "http://IP_DO_SEU_FRIGATE:5000/api/events/{{ event_id }}"
    method: GET

Criar a automação para envio da notificação, alterando o IP_DO_SEU_FRIGATE e SEU_TELEGRAM_BOT:

alias: Frigate GENAI Telegram
triggers:
  - trigger: mqtt
    options:
      topic: frigate/tracked_object_update
      value_template: "{{ value_json.type }}"
      payload: description
actions:
  - action: rest_command.frigate_get_event
    data:
      event_id: "{{ event_id }}"
    response_variable: frigate_response
  - condition: template
    value_template: "{{ frigate_response['status'] == 200 }}"
  - variables:
      camera: "{{ frigate_response['content']['camera'] }}"
      label: "{{ frigate_response['content']['label'] }}"
      clip_url: http://IP_DO_SEU_FRIGATE:5000/api/events/{{ event_id }}/clip.mp4
      caption: |
        📷 *{{ camera }}* detectou: *{{ label }}* 📝 {{ description }}
  - delay: "00:00:10"
  - action: telegram_bot.send_video
    data:
      url: "{{ clip_url }}"
      caption: "{{ caption }}"
      entity_id:
        - notify.SEU_TELEGRAM_BOT
variables:
  event_id: "{{ trigger.payload_json.id }}"
  description: "{{ trigger.payload_json.description }}"

Feito, brinque à vontade

1 curtida

Eu montei um fluxo no Node RED que recebe os eventos de detecção de pessoas, inicial e final. Ao receber o final solicita o clip pro Frigate e envia pelo Telegram.

Como tenho câmeras Tuya e ICSee, montei para receber os eventos de todo mundo (Tuya, ICSee e Frigate) e não enviar duplicidades.

Cheguei a estudar a possibilidade de usar o tópico eventos, mas acaba recebendo muita coisa e usando o tracked_object_update com type description, garantimos apenas o que tem IA, controlando quando ativar ou não seu uso pelos tópicos set.

tenho cam icsee, compartilha ai como fez

Relendo seu comentário, não entendi por quê citou as câmeras. Se usa frigate, não importa o modelo das câmeras. Se não usa frigate, não estamos falando da mesma solução.

Citei as câmeras porque, comigo, nem todas as detecções de pessoas aparecem no Frigate. Como as câmeras externas são ICSee, recebo muito mais eventos de detecção pelo aplicativo delas do que pelo Frigate, por isso comentei que uso os dois métodos (do aplicativo e do Frigate).

Até porque meu HA roda num Raspberry sem uso de TPU, que acaba não sendo um primor para detecção nas câmeras.

E também comentei para movimentar o fórum e trocar experiências. Tomarei mais cuidado na próxima vez.

Perfeito!

Com certeza! Todas as experiências são bem vindas para ajudar a comunidade.