motionEyeOS: transforme sua Raspberry Pi em um sistema de vigilância por imagem
Neste tutorial, veremos como baixar, instalar e configurar o motionEyeOS e assim transformar a sua Raspberry Pi é um sistema de vigilância por imagem capaz de detectar movimento e gerar vídeos automaticamente, tudo controlado e configurado a partir de uma interface amigável direto do navegador. A instalação e configuração inicial passam pelo download de uma cópia do sistema, a gravação deste no cartão SD e a configuração WiFi.
Raspberry Pi
A Raspberry Pi é uma plataforma de computação compacta e de relativo baixo custo que faz parte da categoria de “computadores de placa única”, ou SBC (da sigla em inglês Single Board Computer). Por ser uma plataforma aberta, tanto na especificação do seu hardware (baseado em arquitetura ARM) quanto em seu sistema operacional oficial (Raspberry Pi OS, uma versão do Debian Linux), a Raspberry Pi conta com uma enorme comunidade global de hackers e tinkerers e a gama de aplicações nesta plataforma é vasta e em contínua expansão, com projetos em áreas como Ensino de Tecnologia, Robótica, Automação Residencial, Inteligência Artificial e Aprendizado de Máquina, por exemplo.
motionEyeOS
Concebido como um “sistema operacional de vigilância para SBCs”, o motionEyeOS é a junção de dois componentes de software: um módulo de visão computacional para processamento de imagens chamado motion e a interface de controle Web motionEye. Com uma comunidade ativa e uma licença de código-aberto, o motionEyeOS vem ganhando espaço como solução de vigilância para SBCs, dando suporte a várias plataformas desta natureza: por exemplo, o suporte para Raspberry Pi começou já na primeira versão B+ e vai até a mais atual 4B. O sistema permite usar e configurar múltiplas câmeras ao mesmo tempo mas, à título de exemplo, montaremos neste tutorial um sistema com apenas uma câmera e todas as lições aprendidas aqui se aplicam a quantas câmeras você quiser usar.
Componentes
Este é um projeto considerado simples do ponto de vista de hardware e a maior parte do trabalho está no aspecto de software (instalação, configuração e controle) e, portanto, além dos componentes físicos, você precisará de uma cópia do sistema operacional motionEyeOS e de um programa capaz de gravá-lo no cartão SD.
- Raspberry Pi 4B, incluindo:
- Cartão de memória (capacidade mínima de 4GB)
- Fonte de alimentação (5V, 3A)
- Webcam USB ou Módulo Câmera Raspberry Pi
- Imagem do motionEyeOS
- Programa de gravação balenaEtcher
Download motionEyeOS
Você encontra o código-fonte completo, bem como imagens já prontas do motionEyeOS, na página oficial do projeto no GitHub clicando aqui, que mostra as últimas atualizações da versão mais recente e, abaixo, links de download das imagens de cada SBC com suporte. Após acessar o link, baixe a versão do motionEyeOS que se enquadra com a sua Raspberry Pi, como destacado na imagem abaixo.
Gravando imagem no cartão SD
Com o download concluído é hora de gravar o sistema no cartão SD. Baixe e instale o balenaEtcher, programa multiplataforma (Windows, Linux, MacOS) de gravação de imagens. Insira o cartão SD no seu computador e execute o balenaEtcher. A interface do programa é bastante simples e intuitiva, bastando seguir os seguintes passos representados pelos botões na tela.
- Primeiro, clique em Flash from file e selecione o arquivo de imagem que você baixou;
- Depois, clique em Select target e selecione a unidade SD; e
- Por fim, clique em Flash! e aguarde o processo terminar.
Observação #01: Essa operação apagará todos os arquivos da unidade: não se esqueça de selecionar o cartão SD correto e fazer quaisquer backups!
Observação #02: Se você estiver no Windows, é provável que ele pergunte, ao final do processo de gravação, se você quer formatar a unidade: escolha que não!
Configuração WiFi
Agora nos falta configurar a WiFi, mas note que esta etapa é opcional caso você pretenda manter a Raspberry Pi conectada à rede via cabo ethernet. Primeiro, desconecte o cartão SD do computador e o conecte novamente, assim as partições criadas ficarão visíveis (uma com e outra sem espaço livre). Depois, acesse a partição com espaço livre, como sugerido na imagem abaixo.
Uma vez dentro da partição, clique com o botão direito e vá em Novo > Documento de texto e dê a ele o nome de wpa_supplicant.conf, sem esquecer de remover a extensão txt; o Windows perguntará se você tem certeza de mudar a extensão e confirme. A seguir, abra o arquivo em um editor de texto, como o Bloco de Notas, e copie e cole o pedaço de código abaixo. Por fim, troque os campos ssid e psk com o nome e senha da tua rede WiFi, respectivamente (não apague as aspas).
update_config=1 ctrl_interface=/var/run/wpa_supplicant network={ ssid="nome_da_wifi" psk="senha_da_wifi" }
Pronto, terminamos a configuração inicial do motionEyeOS. Desconecte o cartão SD do computador uma última vez, insira-o na sua Raspberry Pi, conecte a câmera (seja USB ou Módulo Câmera), ligue a fonte de alimentação e espere alguns minutos antes de prosseguir. O motionEyeOS usa a primeira inicialização para preparar o espaço vazio do cartão, além de se conectar à rede. Todas as próximas etapas serão feitas direto de um navegador, como o Edge, Chrome ou Firefox, mas primeiros precisamos encontrar o IP que a rede alocou para a sua placa, que é o que veremos a seguir.
Detectando a Raspberry Pi na rede local
Se os passos de configuração anteriores tiverem sido feitos corretamente e após esperar alguns minutos até a Raspberry Pi estar completamente online, o motionEyeOS estará devidamente conectada à rede local. Seja por WiFi ou seja via cabo ethernet, precisamos agora descobrir qual IP foi atribuído ao dispositivo, e eu listo a seguir algumas opções de como podemos descobrir essa informação em diferentes plataformas/sistemas operacionais:
- Acessando o painel de controle do roteador e verificando a tabela de endereços.
- No Windows, detectando com ajuda de um programa como o Angry IP Scanner.
- Se preferir usar um app Android, recomenda-se o Fing.
- Por fim, um analisador de rede como nmap é uma boa opção se você está no Linux.
Como exemplo, a imagem abaixo mostra o uso das três primeiras soluções citadas. Note que em todos os casos estamos procurando por um dispositivo cujo nome respeita o padrão MEYE-XXXXXXXX, e no caso da minha rede local a Raspberry Pi recebeu o IP 192.168.15.5. Coloque IP encontrado na barra de endereço do navegador para acessar o painel de controle do motionEyeOS.
Acessando o painel de controle do motionEyeOS
De posse do IP da Raspberry Pi, abra o seu navegador e insira-o na barra de endereço. Se a sua câmera tiver sido encontrada com sucesso, você será recebido com uma tela semelhante a essa abaixo, onde eu aproveito para destacar os elementos gráficos mais importantes da interface.
A interface Web do motionEyeOS é bem simples e intuitiva, e passaremos pelos aspectos mais importantes dela nos passos a seguir. Antes é importante notar que você não foi requisitado um login no primeiro acesso, a sua câmera já estava em funcionamento e se você clicar no botão Menu, apenas uma opção simples de configuração da interface será apresentada. Portanto, para darmos continuidade, clique em Login e ponha as credenciais (Username) admin e deixe o campo Password em branco, tal como na imagem a seguir.
Você acessará o sistema como usuário administrador e após alguns segundos a interface ficará acessível de novo. Se voltarmos a clicar no Menu, temos agora acesso completo a todas as configurações do sistema, as quais falaremos das mais importantes, deixando as outras como exploração opcional quando você estiver mais à vontade com o ambiente.
1- General Settings
No primeiro conjunto de configurações, General Settings, vamos definir as credenciais para o usuário administrador, o usuário normal, o fuso horário do sistema (assim a hora da câmera ficará correta) e um Hostname, que é um nome especial que a sua Raspberry Pi terá na rede local, permitindo a você acessar o motionEyeOS sem o IP explícito. No exemplo a seguir, eu adicionei uma senha para o admin, chamei o usuário normal de vigia (e também lhe atribui uma senha), assim como coloquei o fuso correto para Fortaleza e dei o Hostname de arturcam à minha placa.
Agora que adicionei uma Hostname, eu poderei acessar a minha Raspberry Pi digitando http://arturcam na minha barra de endereço do navegador. No seu caso, troque arturcam pelo nome que você tiver escolhido.
Observação #03: o Hostname é um nome que serve apenas para a rede local! Essa configuração sozinha não deixará sua placa visível para o restante da internet!
Observação #04: Note que um botão laranja escrito Apply (aplicar) apareceu no topo da interface. Não aperte nele ainda, pois algumas configurações precisam reiniciar a Raspberry Pi para ter efeito! Vamos clicá-lo ao final de todos os passos.
2- Video Device
Desça um pouco nas configurações até achar o bloco Video Device. Esse conjunto de opções é bem vasto e diz respeito às configurações de imagem da sua câmera (e quaisquer outras que você tiver conectado). Eu sugiro, num primeiro momento, manter as configurações básicas de imagem e brincar depois com os valores até encontrar aqueles que mais se adequarem às suas necessidades.
Por hora apontaremos apenas que aqui você pode dar um apelido à sua câmera (o valor padrão é Camera1) e, mais abaixo, você terá as opções Video Resolution, Video Rotation e Frame Rate. Essas opções representam, respectivamente, as dimensões da imagem, a rotação (giro) da câmera e a taxa de atualização da imagem por segundo. Os valores disponíveis dependerão da sua câmera, mas eu sugiro no mínimo os seguintes: 640×480, 0º e 30.
3- Still Images
As opções Still Images dizem respeito à qualidade das fotos tiradas individualmente. Cada foto é marcada com um código temporal e tem uma qualidade definida; por padrão, o motionEyeOS tem um código temporal baseado no formato estadunidense e guardará apenas 75% de qualidade total. Como na imagem a seguir, mude o valor do formato de tempo para o nosso (dia-mês-ano/HORA-MINUTO-SEGUNDO): %d-%m-%Y/%H-%M-%S. Arraste o slider até 100% para garantir imagens com qualidade máxima possível.
4- Movies
As configurações Movies se darão do mesmo jeito que as de Still Images feitas anteriormente: troque o formato de tempo para %d-%m-%Y/%H-%M-%S e arraste o slider de qualidade para 100%. Outra sugestão é definir uma quantidade máxima em segundos para o vídeo (Maximum Movie Length), por exemplo 60.
Observação #05: quanto maior a resolução da sua câmera e a qualidade armazenada, maior serão os arquivos gerados. Portanto, tenha sempre em mente a capacidade do seu cartão de memória, pois dependendo dos valores escolhidos ele pode ficar cheio rapidamente. Recomendo experimentar com os valores máximos primeiro para que você crie uma noção do quanto a sua câmera pode fazer, e assim você poderá reconfigurar de acordo.
5- Motion Detection
Aqui nós temos um conjunto bem grande de opções, pois é nesse bloco onde definiremos em que condições o sistema decidirá que um movimento foi detectado ou não. É bom deixar claro: não existe um conjunto de configurações ótimas para qualquer situação. Dependendo do uso prático que você pretende aplicar o sistema, você talvez queira detectar apenas grandes variações na imagem, ou o menor dos movimentos. Portanto, eu recomendo que você deixe os valores padrão e brinque com eles aos poucos até encontrar o conjunto que melhor se adequa à sua tarefa.
Detalhes sobre detecção de movimento
Abaixo eu dou uma explicação breve das opções mais importantes de detecção de movimento e aquelas não citadas podem ser deixadas com o valor padrão sem grandes problemas.
- Frame Change Threshold: Indica o quanto a imagem deve mudar entre um frame e outro para que o sistema decida se um movimento aconteceu ou não. Quanto menor esse valor, mais sensível será o detector de movimento, e é possível que muitos vídeos desnecessários sejam criados. Sugestão: 4%.
- Despeckle Filter: Quando ativada, o sistema aplicará um filtro nos frames para retirar ruídos da imagem (uma “limpeza”) antes de tentar detectar movimento. Essa opção consome muito processamento dependendo da versão da sua Raspberry Pi. Sugestão: ligar apenas em condições climáticas adversas, como chuva.
- Mask: Essa é a opção mais interessante de todas, na minha opinião. Aqui você pode definir uma “máscara” para ajudar o sistema na detecção de movimentos. Uma máscara nada mais é que uma região da imagem onde se espera que o movimento aconteça. Por exemplo, imagine que a sua câmera está apontada para o lado de fora da sua casa: no topo da imagem você tem a visão da rua e mais abaixo você tem a vista do jardim ou varanda. Suponha que você queira detectar movimentos apenas na parte superior da imagem, ou seja, na rua. Ligando a opção Mask e selecionando o tipo (Mask Type) Editable, um botão Edit Mask aparecerá. Clicando nele, um conjunto de quadradinhos aparecerão na imagem da câmera; selecione apenas aqueles que representam a região onde se quer detectar movimento. Na imagem abaixo eu mostro um exemplo: eu quero detectar movimentos apenas no espaço à frente do guarda-roupa, e não em cima da minha mesa. Ao final da edição, basta clicar em Save Mask .
Finalizando configurações
Uma vez que todas as mudanças foram feitas, clique no botão laranja Apply no topo da interface, assim os valores serão salvos e a sua Raspbery Pi será reiniciada. Aguarde uns instantes até as modificações serem salvas. A aba do navegador deve recarregar assim que o sistema tiver reiniciado por completo e uma caixa de login deve aparecer. Entre com as credenciais que você configurou e pronto: seu motionEyeOS está pronto para uso!
Acessando vídeos e imagens do sistema
Para acessar os vídeos armazenados por cada câmera, basta clicar sobre ela que um menu será desenhado por cima da imagem com um conjunto de botões. Para cada um, uma janela aparecerá listando todos os arquivos gerados pelo motionEyeOS, com opções de reprodução e download.
Teste prático
Conclusão
O motionEyeOS é uma solução simples para criação de sistema de vigilância por imagem com Raspberry Pi. De custo total menor que sistemas já encontrados no mercado, é possível montar uma central de imagem bastante robusta e várias opções de customização. Entretanto, não precisamos nos limitar a aplicações de segurança: podemos usar nossa Raspberry Pi para tarefas como monitoramento/observação de animais, detecção de aeronaves (spotter) e auxílio no cuidado de crianças e idosos. Deixamos algumas opções de configuração de lado e focamos naquelas mais importantes, mas não deixe de experimentar com as outras, principalmente o sistema automático de notificações.
Comente aqui como você usou o seu motionEyeOS! Fique à vontade para tirar suas dúvidas e deixar sua críticas, além de sugestões de futuros tutoriais. Até a próxima! 💯