Pesquisa de site

Como transformar um Raspberry Pi em um sistema de vigilância com ZoneMinder


ZoneMinder é um software de circuito fechado de televisão gratuito e de código aberto que podemos instalar em nosso Raspberry Pi (ou qualquer outro sistema Linux) para monitorar e proteger nossa casa, ou qualquer coisa que consideremos valiosa. ZoneMinder é fácil de instalar, suporta uma vasta seleção de câmeras e também possui APIs para integração de software de terceiros.

Neste tutorial instalamos o ZoneMinder na versão mais recente do Raspberry Pi OS e aprendemos como transformar nosso RPI em um sistema de vigilância usando uma simples webcam USB.

Neste tutorial você aprenderá:

  • Como instalar o ZoneMinder no sistema operacional RaspberryPi
  • Como definir um monitor e adicionar uma fonte de vídeo

Instalação

ZoneMinder está disponível no repositório oficial do Debian 12 Bookworm e, portanto, também na versão mais recente do Raspberry Pi OS, que é baseado nele. O comando abaixo instala o pacote “zoneminder” e todas as suas dependências, que incluem Apache e MariaDB:

$ sudo apt-get update && sudo apt-get -y install zoneminder

Durante este tutorial, assumirei que estamos configurando o ZoneMinder dentro de uma rede local (LAN) protegida por um firewall de roteador: esta é a configuração doméstica típica. Se você deseja acessar o ZoneMinder externamente, você deve instalar e configurar uma VPN (Virtual Private Network) como o Wireguard.

Configurando o banco de dados

Assim que a instalação do ZoneMinder for concluída, podemos criar o banco de dados. ZoneMinder vem com um script SQL que podemos usar para gerar o banco de dados e todas as suas tabelas: /usr/share/zoneminder/db/zm_create.sql. Para executar as instruções SQL no script, precisamos fazer login como usuário root do banco de dados:

$ sudo mysql

Executamos o comando “mysql” como root porque o Debian vem com o plugin MariaDB unix_activation_socket ativo por padrão. Este plugin permite o uso de credenciais do sistema operacional para fazer login no banco de dados. Ou seja, se o usuário como executamos o comando “mysql” corresponder a um usuário de banco de dados, é permitido efetuar login sem fornecer senha. Isso é considerado bom para a segurança, pois elimina a necessidade de armazenar um segredo e depende da força de acesso do usuário Unix.

No console MariaDB, obtemos o script SQL:

MariaDB [(none)]> source /usr/share/zoneminder/db/zm_create.sql

Por padrão, ZoneMinder tenta acessar o banco de dados como usuário “zmuser”, com “zmpass” como senha. Esses valores são definidos no arquivo de configuração /etc/zm/zm.conf e podem ser alterados através das variáveis ZM_DB_USER e ZM_DB_PASS. Aqui, por uma questão de simplicidade, nos limitamos aos valores padrão. Para criar o usuário e conceder-lhe privilégios totais no banco de dados, executamos:

MariaDB [zm]> GRANT ALL PRIVILEGES ON zm.* TO 'zmuser'@'localhost' IDENTIFIED BY 'zmpass';

Tudo feito. Na próxima etapa, configuramos Apache e PHP.

Configurando Apache e PHP

Como parte da instalação do ZoneMinder, uma configuração do Apache é instalada automaticamente como /etc/apache2/conf-available/zoneminder.conf. Para ativá-lo, executamos:

$ sudo a2enconf zoneminder.conf

Também devemos habilitar os módulos necessários:

$ sudo a2enmod rewrite headers expires cgi

Finalmente, devemos garantir que o servidor web Apache seja capaz de ler o arquivo de configuração do ZoneMinder, alterando a propriedade do grupo de arquivos para “www-data” (o usuário e grupo primário do servidor web Apache):

$ sudo chgrp www-data /etc/zm/zm.conf

Para garantir que o fuso horário do PHP seja o mesmo utilizado pelo sistema, que no meu caso é “Europa/Roma”, editamos o arquivo /etc/php/8.2/apache2/php.ini e, na linha 979, adicionamos a entrada apropriada:

[Date]
; Defines the default timezone used by the date functions
; http://php.net/date.timezone
date.timezone = Europe/Rome

Finalmente, reiniciamos o Apache:

$ sudo systemctl restart apache2

Iniciando o serviço zoneminder

Neste artigo, usaremos uma webcam USB local como fonte de vídeo. Para que isso funcione, precisamos adicionar o usuário www-data ao grupo “video”, que possui o dispositivo /dev/video0:

$ sudo usermod -aG video www-data

Finalmente, podemos iniciar e habilitar o serviço “zoneminder”:

$ sudo systemctl enable --now zoneminder.service

Acessando a interface web

Assim que o serviço “zoneminder” estiver instalado e funcionando, poderemos acessar sua interface web abrindo nosso navegador e navegando até o endereço /zm. Na primeira vez que acessarmos a página, veremos um aviso de privacidade com informações sobre os dados de telemetria coletados:

O projeto é de código aberto e não coleta imagens de câmeras. De qualquer forma, se não quisermos aceitar a telemetria, podemos selecionar “recusar” no menu suspenso na parte inferior da página. Para confirmar a nossa escolha, clicamos no botão “APLICAR” à direita:

Assim que fizermos isso, seremos redirecionados para o painel do ZoneMinder:

Definir um monitor e adicionar uma fonte de vídeo

Não vamos nos aprofundar nos detalhes do aplicativo ZoneMinder aqui; veremos apenas como adicionar uma fonte de vídeo local. Para configurar um “monitor”, clicamos no botão “ADD” no painel do ZoneMinder; no formulário da página “Geral”, definimos o “Tipo de Fonte” como “Local”:

ZoneMinder pode funcionar em diferentes modos. Neste caso, escolhemos a função “Gravar”: permite-nos transmitir o vídeo e gravá-lo em disco, sem ativar a detecção de movimento. Para conhecer os demais modos do ZoneMinder, dê uma olhada na documentação oficial.

Agora, para configurar a fonte de vídeo, clicamos em “Fonte” no menu vertical esquerdo. No formulário “Método de Captura” fornecemos o caminho do dispositivo de vídeo, seu formato e resolução. Quando estiver pronto, clicamos no botão “Salvar”:

Seremos redirecionados para o painel. Se tudo correr conforme o esperado, o processo de captura deverá ser iniciado. Deveremos ser capazes de visualizar uma miniatura da cena atual:

Ao clicar nele, podemos acessar a página do stream:

Pensamentos finais

ZoneMinder é um software de circuito fechado de televisão gratuito e de código aberto. Neste tutorial, aprendemos como instalá-lo na versão mais recente do Raspberry Pi OS e como criar um sistema de vigilância usando uma simples webcam USB. No artigo, presumi o uso do ZoneMinder em uma LAN protegida; para acessar o stream de vídeo externamente, é altamente recomendável configurar uma VPN. Desencorajo absolutamente a exposição direta do serviço web neste caso, mesmo utilizando criptografia SSL, pois, para acessar a fonte de vídeo local, o usuário www-data passa a fazer parte do grupo “vídeo”, portanto tem acesso adicional ao sistema recursos.

Artigos relacionados: