|
[21/11]
:. Resumo do dia [21/11] :. Um passeio no laboratório de testes da Nokia [21/11] :. Ulteo lança Open Virtual Desktop [21/11] :. Apple atualiza firmware do iPhone para versão 2.2 [21/11] :. Internet Explorer 8 terá versão RC no início de 2009 [21/11] :. AMD demonstra Phenom II sob overclock a 5 GHz [20/11] :. Resumo do dia [20/11] :. YouTube começa a disponibilizar alta resolução em vídeos [20/11] :. Drivers ForceWare 180 'Big Bang II' são disponibilizados [20/11] :. GMail agora possui suporte a temas [19/11] :. Alchemy, compilador C/C++ em AS3 para Flash [19/11] :. Resumo do dia [19/11] :. Trabalhando com o Diff graficamente [19/11] :. Microsoft terá antivírus gratuito para Windows em 2009 [19/11] :. Um dos maiores servidores de spam do mundo é desconectado :. Mais noticias » |
O software utilizado neste projeto, entretanto, é livre e chama-se ZoneMinder, sistema CFTV de vigilância digital com avançada função DVR (Digital Video Recording), que fornece imagens de um circuito interno via Internet, visualizáveis em browsers. A redação deste texto não teria sido possível sem o inigualável suporte técnico GRATUITO da equipe ZoneMinder (Phil, Corey e James) e sem a precisa revisão da colega Francine. Fica registrada portanto a gratidão da _bds Labs. para com estas formidáveis pessoas. IntroduçãoPartiremos de uma distribuição Kurumin Linux em sua versão 6.0 (kernel 2.6.14), personalizaremos alguns arquivos e ajustaremos o sistema operacional, tornando-o apto a reconhecer o hardware utilizado e condizente com as necessidades de um servidor de vídeo. Este texto tenta ser o mais prestativo e didático possível, inclusive ao explicitar cada um dos comandos de terminal necessários, facilitando assim o "copiar e colar" (procedimento recomendável principalmente quando da utilização do apt-get) pois alguns pacotes possuem nomes incomuns que podem levar ao erro de digitação caso sejam inseridos caractere a caractere. Os procedimentos aqui descritos levam em consideração placas com o chipset mais comumente encontrado em território brasileiro (Conexant/Brooktree Bt848 ou Bt878) mas podem ser utilizados com outros chipsets (veja a lista em “Da escolha e da instalação da placa”). Cabe observar a título de curiosidade que o mesmo chipset pode ser encontrado em diferentes modelos de placas, o que significa que as vezes marcas distintas utilizam hardware equivalente. O driver encarregado do chipset em questão é o bttv para o qual existe uma listagem pré-compilada de modelos compatíveis já testados no Linux, e que pode ser útil caso se queira verificar a possibilidade de utilização para uma determinada placa. Tal lista está no arquivo chamado CARDLIST (ou CARDLIST.bttv) que acompanha os arquivos-fonte do kernel, e o modelo que estiver listado ali será bem-vindo ao sistema operacional, necessitando em alguns casos de pequenas alterações nos arquivos responsáveis pelos parâmetros que serão utilizados no carregamento do modulo (driver). Isso tudo será visto em detalhes adiante. Foi colocada ao final deste documento uma seção chamada Glossário que esclarece a terminologia aqui utilizada. Streaming
Mesmo utilizando somente imagens JPEG no processo de captura, quando realiza streaming, o ZoneMinder trabalha com os métodos MPEG e M-JPEG, este último sendo um padrão ascendente na comunidade científica internacional e que oferece excelente performance. O streaming MPEG é possível graças aos pacotes ffmpeg de desenvolvimento francês. Entretanto, pode-se trabalhar com pacotes mpeg_encode, desenvolvidos pelo Berkeley Multimedia Research Center: M-JPEG: Múltiplas imagens JPEG já armazenadas são escritas seqüencialmente em um único arquivo e encaminhadas para streaming. Pirataria
Principalmente entre as pequenas e médias empresas (SMBs), é comum a utilização ilegal de soluções CFTV proprietárias, entre as quais destaca-se uma denominada PICO2000. Ilegalmente vendidas em território Tupiniquim no qual a marca não mais possui um representante, as cópias piratas do PICO2000 começam a chamar a atenção da ABES e da Policia Federal devido a sua disseminação em larga escala, podendo desencadear ações criminais entre aqueles que insistem em usá-las (certas vezes por desconhecerem a existência de soluções similares abertas). Tanto o PICO2000 quanto o ZoneMinder possuem detecção de movimento entretanto o segundo leva vantagem por ser acessível via web e totalmente adaptável, podendo ser personalizado em acordo com as necessidades de cada situação. Objetivos deste textoSocialmente responsável e justo, este documento se propõe a criar uma solução legalmente aceita que evita o custo da licença sobre o uso de softwares proprietários e combate a pirataria. Justo, pois a solução aqui descrita funcionará bem, mesmo com as placas de captura mais baratas do mercado. Adicionalmente, espera-se que a substituição de software pirata por soluções legais facilite o árduo caminho trilhado pelas empresas na obtenção de conformidades diversas sobre os sistemas de informação, conseqüentemente agregando valor e propiciando crescimento as mesmas. Requisitos do sistemaRecomenda-se para os procedimentos aqui descritos pelo menos 512MB de memória RAM e um HD com 80GB no mínimo pois a função DVR necessitará de espaço para alocar as imagens gravadas e quanto maior for esse espaço, mais tempo de gravação poderá ser armazenado. ZoneMinder Figura 1: monitor de uma câmera com função PTZ Figura 2: gráfico de movimentos detectados ao longo do tempoDisponível gratuitamente em http://www.zoneminder.com/ o ZoneMinder é uma solução GPL criada por Phillip Coombes para gerenciamento de câmeras de vigilância pela Internet utilizando a interface “Video4Linux”. Além das claras vantagens que sua licença proporciona em termos de custo, confiabilidade, transparência e possibilidade de personalização, o ZoneMinder disponibiliza suas imagens para acesso através de navegadores comuns de Internet (Firefox e Internet Explorer), característica não encontrada no PICO2000. Lançando mão de módulos escritos em Perl, ele possui um funcionamento que otimiza os recursos do sistema de modo que mesmo gerenciando diversas câmeras simultaneamente, não há sobrecarga de informação. Destaca-se também a possibilidade de disparar gravações somente quando movimentos forem detectados em áreas especificas do monitor, isto é, imagine uma câmera filmando a entrada de sua casa incluindo a calçada, o portão e parte da rua ou avenida; pode-se dizer ao ZoneMinder para detectar movimentos apenas na região do portão e ignorar os movimentos captados na calçada e na rua. Isto permite iniciar gravações somente quando alguém passar pelo portão, otimizando o uso do disco. Mais do que isso, é possível evitar a gravação de cães e gatos passando ali através do ajuste de sensibilidade. Quando munido de hardware adequado, o ZoneMinder consegue gerenciar ate 32 câmeras desde que a taxa de atualização destas esteja configurada para 2 fps, uma freqüência bastante baixa que prejudica a qualidade do vídeo. Um numero de câmeras gerenciadas menor do que 32 possibilita o aumento da freqüência de atualização de quadros e as imagens melhoram. Empresas
Além de ser insuperável no âmbito residencial, perceba que quando acomodado em um sistema operacional adequadamente "equipado", este servidor de câmeras pode facilmente dar conta de circuitos internos corporativos de empresas que eventualmente possuam diretrizes mais exigentes para com seus sistemas de informação, isto é, implementando-se algumas funcionalidades adicionais, o ZoneMinder ganha ares de servidor de aplicações críticas, veja alguns exemplos: Trata-se portanto de um software altamente capaz de lidar com as tarefas de um servidor profissional de CFTV e potencialmente competitivo. LAMP
A já notória tríade Apache, MySQL e PHP, também utilizada junto a softwares de renome como o MediaWiki (Wikipedia) é responsável pela infra-estrutura web do sistema. Costuma-se designar LAMP a associação funcional destes três entes quando abrigados em um sistema operacional Linux, devido as iniciais das partes envolvidas. A interface em PHP oferece todo o controle sobre o sistema, permitindo ao usuário não apenas acompanhar imagens em tempo real mas também definir todos os detalhes que devem disparar gravações e alarmes para cada câmera, recuperar e excluir filmagens anteriores armazenadas no servidor. Já que o core do ZoneMinder é escrito em Perl, a base de dados MySQL atua não apenas como um depósito de informações mas também como intermediária entre a interface gráfica dinâmica (em PHP) e o software propriamente dito. SMS
Sim, o ZoneMinder pode enviar sms para celulares. Isso é útil para áreas que não devem ter movimento após um certo horário ou em determinados dias. Considere um saguão monitorado que supostamente deveria estar vazio após as 18h00min. Caso algo se mova por ali as 18h30min, o sistema automaticamente envia uma notificação SMS ao responsável pela segurança, alertando sobre os movimentos detectados pela câmera em questão. Convenções utilizadas neste documentoDa escolha e da instalação da placaOs chipsets suportados pelo sistema operacional Linux através do driver bttv são: sendo que a placa utilizada é do tipo UCC4, CONEXANT FUSION 878A (chipset Bt878). Carregamento manual do driver Executando o comando: # modprobe bttv
o modulo da placa será carregado manualmente. Verifique se o módulo foi corretamente carregado com lsmod e dmesg (este último especificando linhas referentes ao modulo bttv): # lsmod
Module Size Used by
msp3400 13712 0 (unused) tuner 2832 1 (autoclean) bttv 45648 0 videodev 2656 2 [bttv] i2c-algo-bit 7024 1 [bttv] i2c-core 12416 0 [msp3400 tuner bttv i2c-algo-bit] # dmesg | grep bttv
Carregamento automático do driver
Pode-se carregar tal módulo automaticamente na inicialização editando os arquivos /etc/modutils/1devfsd e /etc/modprobe.d/devfsd (Debian, Kurumin e etc.) ou o arquivo /etc/modprobe.conf (distribuições Red Hat, Fedora Core e Mandriva) e inserindo linhas semelhantes as do exemplo a seguir: # carga do driver bttv O primeiro parâmetro a ser modificado é o: options bttv card=n radio=n n deve ser obtido da lista citada em "Introdução", de acordo com o seu modelo. Ex: sua placa é uma TView99 CPH063, então, de acordo com a tabela, ela é card número 38. Neste caso a linha ficaria: options bttv card=38 radio=n O parâmetro seguinte é o radio=n, onde n pode ser 1 ou 0, significando a existência ou não, de um rádio na placa de captura, respectivamente. Isto vai variar de fabricante para fabricante, portanto verifique no manual do produto se ela possui ou não o recurso de rádio. O próximo parâmetro é do sintonizador (tuner) que determina o modelo do sintonizador que sua placa possui. O parâmetro é: options tuner debug=1 type=n debug=1 ativa o modo "detalhado", de modo a ecoar todas mensagens do driver na tela. Caso não deseje este comportamento, substitua o valor por 0. O parâmetro seguinte, type=n é o mais importante, pois define o modelo do tuner possuído. Visto que a maioria dos manuais não informa este parâmetro, uma forma é informar 1 por 1 os valores da lista "tuner" acima até que a imagem seja exibida corretamente. Os modelos mais comuns parecem ser os baseados em tuner da Philips. "PICO2000"
Trata-se em verdade de uma placa genérica com 4 entradas de vídeo e nenhuma para áudio, padrão UCC4. A placa acabou sendo equivocadamente chamada de PICO2000 por ser este o nome do software proprietário que costuma acompanhá-la em sistemas operacionais da Microsoft. Os quatro canais de entradas encaminham informações para um único chip Bt878 e este, através do modulo bttv, torna tais informações compreensíveis ao Linux. O afunilamento de dados no chip cria a necessidade de, junto ao ZoneMinder, definir configurações iguais para todas as câmeras ligadas a uma mesma placa, ainda que estas ofereçam recursos distintos. Em outras palavras, um único Bt878 processa quatro sinais simultâneos e portanto, os parâmetros que um canal utiliza devem ser iguais aos dos outros três, caso contrario corre-se o risco de corromper imagens entregando instruções contraditórias ao hardware. Especificamente para a placa “PICO2000” (veja o texto preliminar no início deste documento) utilizada com distribuições Debian, edite ambos os arquivos /etc/modutils/1devfsd e /etc/modprobe.d/devfsd e insira as seguintes linhas: # carga para o chipset bt878, 2 placas Reinicie a máquina e confirme o carregamento do módulo em questão com o lsmod e com o dmesg: # lsmod
# dmesg | grep bttv Instalação dos pré-requisitosLançando mão do “apt-get”, aqueles que utilizam distribuições Debian podem se beneficiar na instalação. Será necessário entretanto utilizar um arquivo /etc/apt/sources.list devidamente editado para que o apt-get utilize os “mirrors” adequados. Certas vezes, os comandos descritos mostram um único apt-get gerenciando a instalação de apenas um pacote. Pode parecer desperdício de tempo mas essa medida tem a função de evitar conflitos entre dependências. Arquivo sources.list utilizado
Seguem abaixo as linhas que foram utilizadas no referido arquivo: deb http://ftp.us.debian.org/debian etch main contrib non-free Após editar o /etc/apt/sources.list, atualize o “apt-get”: # apt-get update
Acomodação LAMP
Hora de instalar o web server Apache: # apt-get install apache
Instala-se então o PHP e mais os pacotes necessários a base de dados: # apt-get install php5
# apt-get install php5-mysql # apt-get install libapache-mod-php5 Instala-se o MySQL: # apt-get install mysql-server mysql-client
O servidor também precisara dos pacotes MySQL de desenvolvimento: # apt-get install libmysqlclient14-dev
# apt-get install libmysqlclient15-dev # apt-get install libmysql++2c2a libmysql++-dev Pacotes adicionais
Pacotes SSL necessários: # apt-get install libssl-dev libssl0.9.8-dbg
Já que o ZoneMinder manipula JPEGs, é importante instalar alguns pacotes adicionais: # apt-get install imgsizer libjpeg62-dev libjpeg-progs
O ZoneMinder utiliza vários módulos Perl, o que torna interessante acrescentar inclusive pacotes de documentação para futura referência, eventual desenvolvimento e personalização do sistema: # apt-get install perl-byacc perl-debug perl-doc perl-ifeffit
# apt-get install libclass-date-perl libdate-manip-perl Os seguintes pacotes Perl também serão úteis para alguns tipos de câmera # apt-get install libpcre3-dev libpcre-ocaml-dev pcregrep
Pacotes Video4Linux: # apt-get install camserv gstreamer0.8-misc kdetv kmplayer
Outras ferramentas de manipulação gráfica que podem ser utilizadas: # apt-get install dcraw groff imgvtopgm # apt-get install netpbm libnetpbm10-dev # apt-get install tex4ht-common tex4ht tth # apt-get install x-face-el xpaint Pacotes ffmpeg que possibilitam streaming MPEG: # apt-get install ffmpeg ffmpeg2theora avifile-mjpeg-plugin
# apt-get install gstreamer0.10-ffmpeg gstreamer0.8-ffmpeg # apt-get install libavcodec-dev libavformat-dev libpostproc0d # apt-get install libpostproc-dev moc-ffmpeg-plugin Reinicia-se o Apache: # /etc/init.d/apache2 restart
Compiladores C++ (acredite, os dois "apt-gets" abaixo são necessários embora pareça redundância): # apt-get install gcc # apt-get install g++ Ajustes no sistema operacional
Memória compartilhada: # echo kernel.shmmax = 134217728 >> /etc/sysctl.conf
ZoneMinder
Agora sim, o ZoneMinder! Após realizar o download da última versão disponível em www.zoneminder.com vem a etapa de compilação. Entre na pasta principal e execute o script “configure” fornecendo o seguinte comando (um único comando): # ./configure --with-webdir=/var/www/zm –-with-cgidir=/var/www/cgi-bin –-with-webuser=www-data –-with-webgroup=www-data
Sendo que “/var/www/zm” será o diretório de instalação dos arquivos PHP e “/var/www/cgi-bin” o dos arquivos CGI. Lembre-se que a instalação padrão leva em conta os seguintes valores: Realiza-se o download de eventuais patches em http://www.zoneminder.com/wiki/index.php/1.22.2_Patches Exemplo para o patch ffmpeg: # wget http://www.zoneminder.com/downloads/zm-1.22.2-ffmpeg.patch
o arquivo deve ficar no diretório principal do ZoneMinder. Aplica-se o temido patch (utilizando o arquivo do exemplo anterior): # patch -p0 < zm-1.22.2-ffmpeg.patch
Comando make duas vezes realiza a compilação adequada: # make # make Entra-se no MySQL: # mysql mysql < db/zm_create.sql
# mysql mysql Forneça o seguinte comando, saia e reinicie o MySQL: > grant select,insert,update,delete on zm.* to 'zmuser'@localhost identified by 'zmpass';
> quit # mysqladmin reload <-u root -p> Instalação: # make install
Este último comando fará inclusive uma copia de zm.conf para o diretório de configurações do sistema (/usr/local/etc/). E para iniciar o ZoneMinder: # zmpkg.pl start
Veja que o parâmetro "start" pode ser substituído por "stop" ou "restart". Cambozola
Caso o browser utilizado NÃO seja o Firefox, convém instalar o Cambozola para conferir qualidade a “streamings” JPEG. Trata-se de um applet Java e seu download deve ser realizado no local indicado em “Referências”. Logo em seguida, descompacte-o: ~$ wget http://www.charliemouse.com/code/cambozola/cambozola-latest.tar.gz
~$ tar xvfz cambozola-latest.tar.gz O arquivo “cambozola.jar” deve ser colocado no diretório web especificado no comando “./configure” e para que os usuários beneficiem-se deste recurso, eles devem possuir ambiente Java em suas máquinas ou seja, o lado cliente precisará do JRE instalado para que o browser funcione adequadamente. Entra-se no diretório gerado pelo último comando e então: # cp cambozola.jar /var/www/zm/
Modifique os atributos do arquivo copiado (comando a ser executado dentro do diretório web): # chown www-data.www-data cambozola.jar Agora, deve-se habilitar a opção ZM_OPT_CAMBOZOLA nas configurações do ZoneMinder, ZM_CAN_STREAM deve ser configurada para “auto” e ZM_STREAM_METHOD para “jpeg”. Efetuadas estas modificações, será necessário reiniciar o sistema para que o Cambozola seja carregado. Testes
Agora testa-se o Apache e o PHP criando-se um arquivo de teste em /var/www/ e acessando-o de um navegador em outra maquina: # vim /var/www/testphp.php
Insira a seguinte linha no arquivo criado, salve-o e feche-o: <?php phpinfo(); ?> Então em um browser noutra maquina, vá ao endereço: http://<endereco.IP.do.servidor>/testphp.phpCaso a tabela de informações do PHP seja visualizável, então ele esta ok assim como o servidor web. Sistema pronto para o uso
PRONTO! Agora aponte um browser para o arquivo zm.php no endereço ip do seu servidor de câmeras e voila, a interface do ZoneMinder deverá estar visualizável. BIOSNão esquecer de configurar o BIOS do servidor para certificar-se de que a maquina seja ligada novamente após uma eventual queda no fornecimento de energia a mesma. Também é importante desativar o gerenciamento de energia ACPI. Apêndice Placas que também capturam áudio
Mais avançadas e com preços razoáveis, placas que utilizam o chipset Philips saa7134 como a FlyVideo 3000 e a Genius Wonder III, possuem áudio incorporado e seus drivers para Unix, mantidos pela Bytesex, funcionam muito bem. Outros softwares
Quando se iniciou esta busca por sistemas open source que tratassem de gerenciamento de câmeras de segurança, algumas das opções encontradas e posteriormente preteridas mostraram-se ao menos dignas de menção. São elas: Muito interessante, este pacote GPL serve a propósitos de detecção de movimento através do video4linux, trabalhando com snapshots que podem ser "fundidos" num arquivo MPEG. Também envia SMS mas seu desenvolvimento foi descartado por ser o ZoneMinder uma solução pronta e mais completa. Recomendado pelo respeitado site LinuxDevices.com, o californiano iomojo é uma solução completa para o gerenciamento de câmeras mas acabou sendo descartado pois oferece pouca documentação e suporte além de possuir funções não condizentes com as necessidades de um sistema digital de segurança patrimonial. ReferênciasGlossárioColetânea de termos que podem causar alguma confusão: Sobre os responsáveis pelo presente textoPlena de convicção sobre os nobres ideais que a sustentam, a _bds Labs. prima pelo conhecimento, pela ética e honestidade e enxerga a Tecnologia da Informação através das lentes do software livre, vislumbrando o caminho para um mundo socialmente justo, e é por isso que a _bds Labs. adota e recomenda soluções open source em seus projetos. Contato
|
|||||