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

