Monitoramento de ambiente com Zoneminder e câmeras IP

Nos tempos atuais é raro chegar em algum lugar que não haja ao menos uma câmera filmando seus movimentos. Soluções para este tipo de monitoramento existe aos montes indo desde equipamentos baratinhos e simples até soluções altamente sofisticadas e complexas. O Zoneminder é uma soluçãobem simples e fácil de ser implementada, para uso doméstico e até comercial com câmeras IPs destas baratinhas que se encontra no mercado de importados da China para manter os registros de suas câmeras com acesso centralizado via Web e sem depender de programas proprietários.

Por que instalar um sistema de monitoramento por câmeras?

Razões para isso existe aos montes. Ter uma câmera apontada para um local estratégico deixou de ser algo apenas para quem tem objetos de valor dentro de casa.

Um filho pequeno que fica em casa sob os cuidados da babá; uma loja em local inseguro; sua garagem com 4 Mustangs, 3 Lamborghinis, 7 Ferraris e um Fusca 1200; matar a saudade de casa quando estiver distante entre outras.

A verdade é que a cada dia mais este tipo de instrumento tem sido mais e mais útil para ao menos aumentar a sensação de segurança e até mesmo para solucionar crimes que em outras épocas não haveria qualquer testemunha.

Por que o Zoneminder?

Zoneminder é um software para gerenciamento de câmeras de segurança open source, gratuito, grande base de usuários mundo a fora, fácil de instalar e pouquíssimo esforço para configuração inicial e independência do fornecedor da câmera permitindo-se usar virtualmente qualquer equipamento cabeado, wireless, DVR etc são bons argumentos para usá-lo, ao menos pra mim.

Se você já tiver um PC funcional e arregaçar as mangas, usando câmeras IPs destas “genéricas” que se pode comprar pelo Mercado Livre, eBay e outros sites de compra, em pouco mais de 1h de trabalho você terá um eficiente sistema de monitoramento 24h/dia cujo custo total de investimento poderá estar apenas na aquisição das câmeras (algo em torno de R$100,00 à R$200,00 cada).

Câmeras IP, DVR, Wireless, por cabo, PAN/TILT? Por onde começar?

O recurso de PAN/TILT, que permite mover a  lente da câmera horizontal e verticalmente é útil para posicionar a câmera mesmo após a instalação e embora não seja muito trivial de se configurar no Zoneminder, alias eu ainda nem tentei, em uma necessidade de fazê-lo eu sempre posso usar o aplicativo da câmera no próprio celular ou PC. Vai ficar para uma próxima oportunidade relatar o feito (caso consiga).

O uso de DVR é bom para aquelas câmeras que não são IP, eu não faço ideia de como funciona mas caso se interesse por elas é bom lembrar que de cara você terá que cabear a sua casa inteira, ou usar câmeras sem fio, não-ip, que são relativamente caras. A grande vantagem de usar um DVR é que câmeras não-IP costumam ser bem mais discretas.

Câmeras IP permitem o seu uso sem muito trabalho a partir de qualquer lugar que se tenha uma conexão de rede e Internet. Se elas forem WIFI então, só o que você precisará será uma tomada de energia elétrica para ligar a fonte de alimentação das câmeras.

Por conta disso meu sistema, que foi concebido inicialmente a partir da necessidade de ter uma babá eletrônica no berço do guri, foi montado com câmeras IP Wireless com recursos de PAN/TILT e visão noturna por infravermelho.

Apesar de parecer que isso é algo muito sofisticado e caro, na verdade, eu não paguei nem R$200,00 por cada câmera (em Maio/2014 e em Dezembro/2014). Hoje tenho 5 câmeras destas, configuradas no Zoneminer e que atendem muito bem minha necessidade.

Instalando o Zoneminder

No meu ambiente eu optei por usar uma máquina virtual no Vmware Player por mera comodidade, mas poderia ter optado por usar qualquer outro ambiente de virtualização ou até mesmo uma máquina física real – o que deverá ser a melhor opção para quem pretende usar câmeras conectadas diretamente ao computador ou que dependa de alguma placa especial.

Para efeitos comparativos, na hora que você planejar a sua máquina. Meu servidor tem a seguinte configuração e que está atendendo bem a o meu ambiente com 5 cameras IP:

  • 2 processadores (ou um processador Dualcore) 32bits
  • 1GB de RAM
  • 20GB de espaço em disco pra instalação do sistema
  • 250GB de espaço em disco para reter as imagens das câmeras
  • 1 placa de rede gigabit
  • Linux Debian 7.8 Netinst (última versão na época que fiz a instalação)

Antevendo os problemas

O consumo de processamento é bem baixo, acompanhe pelo top, htop, ps ou outra ferramenta que tenha familiaridade para observar se há necessidade de mais núcleos;

Com relação a memória, eu iniciei o projeto com apenas 512MB de RAM. Isso foi aceitável para 2 câmeras, porém quando adicionei as outras três elas não conseguiam carregar imagem, gravar e nem nada, como se houvesse um erro na configuração.

Para você não apanhar uma semana com isso, depois de tudo instalado e as câmeras configuradas, observe no syslog do seu servidor se não há mensagens como “zmc -m 1 crashed, signal 6”. Aquele “m 1” corresponde ao ID da câmera e pode mudar de acordo com a sequência da câmera que você instalou, já  o “signal 6” é o erro de falta de memória, em alguns casos você verá também uma mensagem sobre a impossibilidade de conectar ao socket /tmp/blablabla). Então já sabe se ver estes erros aumente a memória do seu servidor.

Outro problema relativamente comum que me deparei nesta instalação e em outra que acabei fazendo em outro ambiente é relacionado a a mensagem “Invalid JPEG file structure: two SOI markers“, que aparecia no log para algumas câmeras que embora estivessem online e ao clicar na visualização tudo estivesse correto, não era possível gravar com as câmeras. A solução foi de mudar a configuração da câmera “Source / Remote Method” de “Remote” para “Regexp”.

Sobre o espaço em disco, lembre-se que este valor pode variar de acordo com a quantidade câmeras, gravações retidas, tempo que elas ficarão salvas etc. Dois diretórios que certamente serão os culpados por encher seu disco são o “/var/lib/mysql” e o “/var/cache/zoneminder”, o primeiro mantém a base de dados do sistema e o segundo é onde estão as gravações das câmeras. Uma boa sugestão seria configurar seu servidor com LVM e criar ao menos um volume individual para cada um destes diretórios, o que possibilitará a sua expansão de forma mais fácil.

Para que você tenha uma base do quanto de espaço será necessário, em uma segunda instalação que fiz, desta vez no meu ambiente de trabalho com 6 câmeras IP padrão VGA, gravando apenas quando houver detecção de movimento, eu usei um volume LVM com 250GB para reter 1 mês de gravação

Embora algumas máquinas ainda venham com placas de rede 10/100, uma placa de rede Gigabit pode fazer a diferença na performance. Não vou discutir aqui conceitos de rede para exemplificar este caso mas lembre-se que quanto mais câmeras você tiver maior será o tráfego de dados na sua rede e também no seu servidor. Com efeito, lembre-se que pode ser necessário mais de um ponto de acesso sem fio, ou switches de alta perfomance etc. Mas não se apavore as minhas 5 câmeras WIFI funcionam muito bem com um AP DLINK 802.11n, sem sacrificar os meus acessos a Internet por outros dispositivos.

O Debian é mais do que uma questão de gosto. Se você instalar o Debian Netinst (aquele que vem um arquivo ISO com menos de 200MB), bastará um simples apt-get install para ter o Zoneminder instalado e pronto para configuração básica e inclusão das câmeras.

Instalação do Zoneminder

Com o seu servidor Debian rodando e com acesso a Internet use o apt-get para instalar o Zoneminder e suas dependências.

sudo apt-get install zoneminder

Dentre as dependências estarão o Mysql server, o Apache, o FFMPEG e muitos outros pacotes que serão essenciais para o perfeito funcionamento do sistema.

Durante a instalação dos pacotes será pedido que informe a senha do usuário “root” do MySQL, pode teclar ENTER sem digitar nada, quando isso ocorrer.

Pode ser necessário alterar as permissões do arquivo zmfix, assim:

sudo chmod 4755 /usr/bin/zmfix
sudo zmfix -a

Não sei ao certo o porque disso, mas alguns tutoriais que li na época dizia para fazê-lo e como ao olhar as permissões do arquivo vi que eram diferentes então eu fiz e está tudo funcionando.

Como eu instalei um Debian 32bits eu precisei corrigir um bug existente no ZM e que já está largamente divulgado e que impede o sistema de funcionar corretamente. Para tal edite o arquivo “Memory.pm” com o editor de sua preferência e altere as linhas abaixo:

sudo mcedit /usr/share/perl5/ZoneMinder/Memory.pm

Procure por:

our $arch = int(3.2*length(~0));

Altere para:

our $arch = 32;

Agora ative a configuração do Zoneminder no Apache:

sudo ln -s /etc/zm/apache.conf /etc/apache2/sites-enabled/zoneminder.conf

Por fim reinicie o serviço e pronto. Tudo instalado.

sudo service zoneminder restart
sudo service apache2 restart

 Adicionando suas câmeras

Com o Zoneminder instalado a melhor forma de saber se está tudo funcionando é abrindo sua interface pelo navegador, então abra o seu navegador web e acesse o endereço http://ip.da.maquina/zm

Você deverá ver uma tela bem espartana com uma tabela contendo os dados da captura de imagens nas câmeras. Antes de mais nada clique em “options”, no canto superior direito, e procure por LANG_DEFAULT. Mude o seu valor para “pt_br” para que daqui para frente possamos falar a mesma língua 😉

Agora, clicando no botão “Adicionar monitor” você verá uma tela como esta abaixo (à esquerda).

Adicionar câmera Zoneminder (Geral)Adicionar câmera Zoneminder (Origem)

Observe que trata-se de uma tela com 5 fichas e estou exibindo apenas duas, já que estas são as principais que você deverá alterar.

Para não gastarmos tempo demais vou descrever apenas as principais opções. Caso queira se aprofundar e conhecer o restante a Wiki do projeto tem bastante conteúdo para suprir a sua fome por conhecimento.

Na ficha “Geral” temos:

  • Nome – Nome da câmera. Algo bem curto e intuitivo como “Quarto”, “Garagem”, “Portão Rua” é suficiente para o propósito;
  • Tipo Origem – Existem os tipos “Local”, “Remoto”, “File” e “Ffmpeg”. Para câmeras IP, use “Remoto” (só vou descrever este modo, para outros consulte o site do Zoneminder);
  • Função – As quatro principais opções são: Monitor (apenas para visualização em tempo real); Modetect (Todas as imagens capturadas serão analisadas e apenas as que tiverem movimento detectado serão gravadas); Record (Gravar tudo);  Morecord (Analisa e grava tudo e onde houver detecção de movimento haverá um destaque na visualização de eventos); Em caso de dúvidas comece com “monitor” apenas para garantir que tudo está funcionando e depois que tudo estiver certificado mude a função;
  • Habilitado – Marque esta opção e seja feliz (o que mais posso dizer!?) 😀
  • Linked monitor – Imagine que haja duas câmeras apontando para o seu portão de garagem. Se você as associar, quando uma detectar movimentos ambas vão gravar as imagens

Na ficha “Origem” temos (considerando que você usou a opção “tipo origem” como “remoto”):

  • Remote Protocol – HTTP ou RTSP (para maioria das cameras IP HTTP é suficiente);
  • Remote Method – Simple ou Regexp (Em geral use “Simple”);
  • Nome do Host – o nome registrado no DNS, /etc/hosts ou IP da sua câmera;
  • Porta do host remoto – Em geral câmeras de segurança já vem configuradas para porta 80 ou 81, mas qualquer que seja ela você deverá indicar aqui;
  • Caminho do host – é uma opção trabalhosa de se descobrir, então vou comentar sobre esta opção na seção seguinte.

O Caminho do host

A parte mais complicada da configuração do Zoneminder fica exatamente aqui. No final de tudo. As cameras IP possuem uma interface WEB que permite a visualização da imagem capturada por ela através de um applet Java ou através de um aglomerados de “snapshots” que são carregados na tela em sequencia como se fossem um vídeo. E é justamente este conjunto de snapshots que nos interessa.

A dificuldade é encontrar o caminho correto para incluir no Zoneminder, já que para cada marca/modelo de câmera isso pode ser bem diferente. Um site muito bom com extensa listagem destes caminhos é o SpyConnect (links no fim do artigo).

Outra maneira de encontrar os endereços é analisando a página html que a sua câmera carrega no browser e procurando a URL que ela invoca para exibir as imagens. Em alguns modelos essa URL é manipulada por um Javascript sendo chamada sequencialmente diversas vezes de forma a gerar o vídeo, ou mesmo uma única vez para “tirar uma foto” do evento atual.

Exemplos de configuração

Só para exemplificar. Uma de minhas primeiras câmeras é uma DLINK DCS-930L. Para configurá-la eu inclui as seguintes informações:

  • Remote Method: Simple
  • Nome do Host: login:senha@ip.da.camera
  • Porta do host: 80
  • Caminho do host: /image/jpeg.cgi

Uma outra câmera, da marca Trendnet TV-IP110, já teve a seguinte configuração:

 

  • Remote Method: Simple
  • Nome do Host: login:senha@ip.da.camera
  • Porta do host: 80
  • Caminho do host: /cgi/jpg/image.cgi

Seria impossível listar exemplos de todas as câmeras aqui, as que apresentei acima dão das que já configurei. Caso você tenha câmeras de outras marcas e modelos, recomendo uma olhada no site ispyconnect (links abaixo) e caso você consiga depurar códigos html e javascript, olhar os códigos que as suas câmeras carregam no browser podem ajudar também. Para testar se o que você configurou está correto basta carregar a URL encontrada no vlc, cvlc, mplaeyr ou outro player que suporte streamming. Se no player carregar a imagem da câmera então é só colocar o resultado no Zoneminder.

 

Links para encontrar informações sobre as câmeras IP

http://www.ispyconnect.com/man.aspx?n=Zoneminder

http://www.ispyconnect.com/sources.aspx

6 thoughts on “Monitoramento de ambiente com Zoneminder e câmeras IP”

    1. Olá Dennis,

      Nunca me preocupei com o local onde estão as imagens, que por padrão é dentro de /var/cache/zoneminder, já que são muitas e ficam em uma hierarquia de pastas meio complexa de se manipular fora da interface web. Pra ser honesto, nunca nem me procurei saber se é possível alterar.

      Se você por qualquer motivo precisa mudar de fato a localização das imagens, uma sugestão seria criar um link apontando “/var/cache/zoneminder” parar este novo local, só não esqueça de ajustar as configurações da nova pasta para que o zoneminder possa gravar as imagens no novo local.

  1. Olá,

    A ultima vez que me aventurei em monitoramento de câmeras utilizando um servidor foi utilizando o Geovison com placas de capturas.
    Confesso que depois que lançaram o DRV convertendo a imagem analógica para digital eu acabei me aprofundando neste caminho já que minha empresa era uma revenda dos produtos deste fim.
    Contudo , com o lançamento do NVR para câmeras IPs, confesso que ficou complicado o uso de ambos equipamentos para gerência devido o custo alto.
    Depois que vi seu artigo vi um uma luz no final do túnel , pois voltar a utilizar servidores para monitoramento me parece no momento um custo muito mais acessível , ainda mais quando prestamos serviços.
    Muito bom pela disponibilidade de fazer este post.

    Att,,

    Ricardo Serafim

  2. Oi. Parabéns pelo texto. Quanto às câmeras IPs, podem ser qualquer uma? Vou instalar o Zoneminder e queria já comprar as câmeras certas. Pretendo colocá-las externamente, mas não sei como ligá-las na energia elétrica, pois o cabo do adaptador de energia costuma ser pequeno. Como você fez essa ligação Wellinton? Obrigado.

  3. Oi Boas !! Instalei o zoneminder em uma NAS Dlink e reparei que a data está errada. Procrei um campo para atualizar a data mas nao achei. poderia me ajudar?

    1. Opa, tudo beleza Carlos. Não sei de que campo data você se refere mas as datas que aparecem no Zoneminer são as datas fornecidas pelo sistema operacional, no seu caso o que o seu NAS está informando. Sugiro verificar as configurações de data/hora, horário de verão e localização no seu equipamento.

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *