Sistema para monitoramento para câmeras de vigilância através de telefone celular Android

De MediaWiki do Campus São José
Revisão de 06h51min de 26 de outubro de 2010 por Michel.vinicius (discussão | contribs)
(dif) ← Edição anterior | Revisão atual (dif) | Versão posterior → (dif)
Ir para navegação Ir para pesquisar

Introdução

Sistemas de vigilância com câmeras estão cada vez mais em uso. Sendo, hoje em dia, sua implantação muito simples e de baixo custo, necessitando-se apenas de um computador pessoal, uma placa de captura de vídeo e algumas câmeras. O que o torna também um sistema viável para implementar-se domiciliarmente. Esse sistema pode inclusive permitir a visualização das imagens filmadas pela internet.

Com a grande expansão do mercado de dispositivos móveis, principalmente de telefones celulares denominados Smartphones, e o constante melhoramento das características desses dispositivos como capacidade de processamento, quantidade de memória e o tamanho da tela, os tornam equipamentos capazes de atender as funções básicas de um computador pessoal. Eles ainda tem capacidade de se conectar à internet utilizando as tecnologias wireless mais comuns nos dias de hoje como Wi-Fi e 3G.

O presente projeto visa aproveitar a característica dos sistemas de vigilância de visualização das imagens na internet, com a mobilidade e alta conectividade à internet dos dispositivos móveis atuais, para a concepção de um sistema de vigilância completo que permita ser monitorado através de dispositivos móveis utilizando o sistema operacional Google Android[1].

O ZoneMinder[2] foi o software escolhido para gerenciar o sistema de vigilância. Ele possui características comuns aos softwares dessa área, como suporte à captura, análise e gravação de vídeos, e detecção de movimentos, além disso, é um software livre, que foi o fator preponderante para sua escolha. Ele é composto por um agente servidor, onde é feito o gerenciamento das câmeras, e um agente cliente - uma pagina web - onde o usuário pode configurar e visualizar as câmeras.

A ausência de um agente cliente para dispositivos móveis que possuísse uma interface amigável e eficiente foi o principal ponto de motivação deste projeto. O agente cliente foi feito para operar sobre o sistema Android, que foi escolhido por se tratar de um projeto aberto e por ser um sistema multiplataforma, o que torna possível ele estar em diversos tipos de dispositivos móveis de diferentes fabricantes.

ZoneMinder

O ZoneMinder é uma aplicação para monitoramento de câmeras de vigilância que suporta câmeras analógicas, USB, IP, câmeras externas e câmeras com funções Pan/Tilt/Zoom. Ele é um software de código aberto que pode ser instalado em qualquer distribuição Linux, e foi escrito nas linguagens C++, Perl e Php. Ele opera sobre um servidor Apache e suporta transmissão de vídeos nos formatos Mpeg, Mjpeg entre outros.

A interação com o usuário é feita através de uma página Web. Além da interface padrão, a página Web possui uma interface simplificada para dispositivos móveis, esta porém, apresentou algumas falhas na reprodução dos vídeos, o que justifica ainda mais o presente projeto.

Sist Moni And Figura1.png
Figura 1 - Interface Padrão.
Sist Moni And Figura2.png
Figura 2 - Interface Simplificada.

Entre as características do ZoneMinder, a mais interessante é a detecção de movimentos. Podendo ser configurada a gravação automática do vídeo da câmera onde se detectou o movimento e a notificação ao usuário, que pode ser feita através de e-mail ou mensagem SMS. A detecção de movimento de uma determinada câmera pode ser configura em uma ou mais áreas do vídeo.

Sist Moni And Figura3.png
Figura 3 - Várias áreas de detecção de movimento.

Essas e outras características fazem do ZoneMinder uma boa opção para se implantar um sistema de vigilância com câmeras. Esse projeto visa aproveitar essas características, e conceber uma aplicação para dispositivos móveis que substitua a interface Web do ZoneMinder na função de visualização da câmeras.

Android

O sistema operacional escolhido para o desenvolvimento da aplicação para visualizar as câmeras foi o Android. O Android é um projeto aberto desenvolvido pela Open Handset Allience[4], que é um grupo formado pela Google e por outras companhias de hardware, software e telecomunicações, o que o torna um sistema capaz de operar em diversos tipos de dispositivos móveis de diversas fabricantes.

O Android é uma plataforma Linux na qual opera uma máquina virtual Java otimizada para dispositivos móveis chamada Dalvik. Sobre essa máquina virtual rodam as aplicações para Android. Como o Android é um projeto aberto, é possível acessar e modificar seu código. Ele usa a licença BSD Apache, então as mudanças feitas em seu código não necessitam ser divulgadas, como ocorrem nas licenças GNU.

Sist Moni And Figura4.png
Figura 4 - Arquitetura do sistema Android.

A Google disponibilizou um SDK – Kit de Desenvolvimento de Software - para Android, para que desenvolvedores possam criar aplicações. O SDK possui entre outras ferramentas, um emulador de um telefone celular no qual é possível instalar e testar as aplicações.

Para a escrita das aplicações, pode ser utilizado qualquer editor de texto, mas no presente projeto preferiu-se utilizar a IDE – Ambiente Integrado de Desenvolvimento de Software – Eclipse, onde é possível escrever, compilar e executar a aplicação no emulador, para isso a Google disponibilizou um plugin para integrar a SDK a ele.

Aplicações para Android

Uma aplicação para Android é formada por uma classe Java e um arquivo XML. No código XML são inseridos os itens que serão vistos na tela, esses itens são chamados de View, e existem vários tipos deles como por exemplo TextView, que exibe texto, EditText, que permite inserir texto, e Button, que é um botão. Existem ainda Views que organizam os itens na tela como por exemplo o LinearLayout que pode fazer a disposição dos itens na vertical ou horizontal, e o TableLayout que faz a disposição dos itens em linhas, que podem conter vários itens lado a lado. Abaixo segue um exemplo de uma aplicação que exibirá o texto “Ola Mundo!” na tela do Android.

Sist Moni And Figura5.png
Figura 5 – Arquivo main.xml.

A figura 5 mostra o código XML, onde foi inserido um TextView e foi atribuído a ele uma id que o identificará dentro do código XML ou mesmo no código Java. O TextView está dentro de um LinearLayout que está configurado com a configuração vertical, por tanto se houvessem mais itens eles estariam um abaixo do outro.

Sist Moni And Figura6.png
Figura 6 – Código Java.

No código, mostrado na figura 6, o método onCreate() é usado para criar a tela que será exibida no Android, o método setContentView é usado para indicar qual arquivo XML será utilizado juntamente com essa classe para montar a tela, nesse caso o main.xml. Depois disso foi criado um atributo chamado “texto” do tipo TextView que será interligado ao TextView do código XML através do método findViewById(), passando como argumento desse método a id do TextView do XML. Fazendo isso é possível manipular esse TextView pelo código Java. Para configurar o texto que será mostrado é invocado o método setText() passando como argumento o texto “Olá Mundo!”.

Fluxo de vídeo em Mpeg e Mjpeg

Para a visualização dos vídeos das câmeras via internet é necessária uma View – item que será mostrado na tela do dispositivo – para reproduzi-los. O Android já possui uma View para isso chamada VideoView, ela é capaz de reproduzir vídeos nos formatos suportados pelo Android que são MP4 e 3GP.

Porém, como o ZoneMinder transmite vídeos nos formatos Mpeg e Mjpeg a VideoView não poderia ser usada, com isso, tornou-se necessário uma View que reproduzisse esses formatos. Essa View foi a MjpegView[3], que reproduz tanto Mpeg quanto Mjpeg e por isso atendia as necessidades desse projeto.

DroidMinder - Sistema de Monitoramento para Android

O sistema de monitoramento consiste numa aplicação para Android que faça o papel da página Web do ZoneMinder, permitindo ao usuário acessar os vídeos do servidor, onde as câmeras de monitoramento estão ligadas, através da internet. Nessa seção serão descritas as várias telas do programa como também as suas funcionalidades.

Sist Moni And Figura7.png
Figura 7 – Primeira tela do programa.

Essa primeira tela é composta pelo logotipo do aplicativo e dois botões, o botão Ver Câmeras direciona o usuário para a tela com os vídeos das câmeras, mas ele só ficará ativo se já tiverem sido feitas as configurações do aplicativo, estas devem ser feitas através do botão Configurações. O botão Configurações encaminha o usuário para a primeira tela de configurações, a tela de autenticação.

Sist Moni And Figura8.png
Figura 8 – Tela de autenticação.

Na tela mostrada na Figura 8 é onde o usuário insere os dados do servidor e os dados do usuário, caso o servidor esteja configurado para autenticação, para que o usuário possa se conectar no servidor e buscar informações importantes das câmeras conectadas a ele como, por exemplo, seus nomes, que serão utilizados posteriormente.

Os campos Usuário e Senha são onde o usuário preenche, caso seja necessário, com os seus dados de usuário e senha previamente cadastrados no servidor. O campo Endereço do Servidor deve ser preenchido com o endereço IP do servidor que se deseja conectar.

Os botões HTTP e HTTPS servem para que o usuário escolha entre se conectar no servidor pela internet usando o protocolo Http simples ou o Https, que usa o protocolo SSL para que os dados trocados entre a aplicação e o servidor sejam criptografados aumentando assim a segurança do usuário.

Clicando no botão HTTP é configurada a porta padrão do protocolo Http, que é a 80, do servidor e no botão HTTPS é configurada a porta 443, que é a porta padrão do protocolo Https. Os números das portas configuradas são exibidos no campo Porta que, além disso, serve para que o usuário possa editar esses números, pois, esses protocolos podem operar em portas diferentes das padrões.

A caixa Lembrar Dados pode ser marcada caso o usuário queira que suas configurações sejam salvas, para que ele possa assim, assistir as câmeras clicando diretamente no botão Ver Câmeras na tela de abertura. Após fazer todas as configurações ele pode se conectar ao servidor clicando no botão Autenticar.

A troca de informações com o servidor se dá pela página Web do ZoneMinder. Para isso é criada uma conexão com o servidor utilizando o endereço IP e a porta que o usuário informou, se ele estiver configurado para autenticação, após carregar a página do servidor, é passado à ele os dados de nome de usuário e senha que o usuário preencheu na aplicação para que se possa fazer a autenticação no servidor, se esse autenticar ou se não estiver configurado para isso, a conexão criada com o ZoneMinder recebe a página inicial dele. Nessa página são obtidos os nomes das câmeras e as IDs delas. Essa ID identifica uma determinada câmera, e servirá para se saber se essa câmera foi removida ou não. Com a conexão confirmada e os dados necessários obtidos, o usuário é direcionado para a segunda tela de configurações.

Sist Moni And Figura9.png
Figura 9 – Segunda tela de configurações.

A segunda tela de configurações serve para que o usuário possa escolher, dentre as câmeras encontradas no servidor, quais ele quer assistir na próxima tela, que é justamente a de vídeos. A escolha pode ser feita utilizando uma lista com os nomes das câmeras que foram buscados no servidor pela tela anterior no momento do clique do botão Autenticar. Esses nomes ainda podem ser editados caso o usuário queira usar outros nomes daqueles encontrados no servidor.

Para selecionar uma câmera que se queira assistir basta clicar na caixa branca presente no lado esquerdo do nome de cada câmera. Essa caixa será marcada com o número correspondente a ordem que o vídeo daquela câmera será exibido na tela. Esse número é incrementado cada vez que uma câmera é selecionada. A aplicação suporta a visualização de até sete câmeras simultaneamente, sendo que a câmera marcada com o número um aparecerá na subtela maior e as outras aparecerão nas menores.

Essa tela ainda tem uma caixa chamada Selecionar Todas que pode ser marcada caso o usuário queira selecionar as primeiras sete, se houverem, câmeras, e desmarcada caso o usuário queira desselecionar todas as câmeras. Existe também o botão Restaurar Nomes, que quando clicado restaura os nomes das câmeras que foram editados com os nomes originais encontrados no servidor.

Após ter marcado quais câmeras quer assistir, o usuário pode clicar no botão Ver Câmeras e será feita uma procura no servidor para checar se as câmeras selecionadas ainda existem nele. Essa procura é feita criando-se uma conexão com o servidor para carregar a página inicial do ZoneMinder, como foi feito anteriormente, e buscar pelas IDs das câmeras selecionadas, que já são sabidas, nessa página. As IDs encontradas juntamente com o endereço IP e a porta do servidor servirão para criar o endereço IP dos vídeos das câmeras que serão exibidos na tela de vídeos. As câmeras cujo as IDs não foram encontradas não terão seus IPs criados, com isso, seus vídeos não serão exibidas na próxima tela e seus nomes ficarão da cor vermelha para indicar que estão com problema. Após terminada a procura, as configurações desta tela, nomes editados, número de seleção das câmeras e IDs das câmeras, serão salvas em arquivo, caso a caixa Lembrar Dados da tela anterior tenha sido marcada, que será utilizado na tela de Abertura quando o usuário clicar no botão Ver Câmeras. No momento do clique, todo o procedimento de verificação da existência das câmeras feito na segunda tela de configurações, será feito também. Depois de salvar as configurações finalmente o usuário será direcionado para a tela de vídeos.

Sist Moni And Figura10.png
Figura 10 – Tela de vídeos.

Na tela de vídeos é onde o usuário assisti aos vídeos das câmeras configurados na segunda tela de configurações. Como dito anteriormente essa tela é composta por sete subtelas, sendo a maior a subtela principal, onde será reproduzido o vídeo marcado com o número um na tela anterior, e outras sete menores que reproduzirão os outros vídeos marcados.

Para controlar a reprodução dos vídeos o usuário utilizará a tecnologia de touchscreen presente nos dispositivos móveis atuais. Por exemplo se o usuário quiser pausar a reprodução de uma determinada subtela ele tem apenas que tocar nela, e para continuar a reprodução basta que ele à toque novamente. Quando o vídeo de uma determinada subtela está reproduzindo é mostrado um ícone de pause e quando está pausado um ícone de play no canto superior direito dessa subtela.

Quando o usuário quer assistir a um vídeo que está numa determinada subtela menor na subtela maior, basta que ele dê um toque duplo nesta subtela menor, então o vídeo que estava sendo reproduzido nessa subtela será reproduzido na subtela maior, e o que estava na subtela maior irá para a menor que foi duplamente tocada.

Existe ainda a opção de usuário dar um toque longo numa determinada subtela quando esta está em reprodução para iniciar a gravação do vídeo que está sendo reproduzido nela, mas apenas o ícone que indica gravação é mostrado, a função de gravação não foi implementada nesse projeto, um toque simples nessa subtela encerra a gravação e continua-se a reprodução do vídeo.

Conclusões

A grande utilização de sistemas de vigilância com câmeras e o avanço no desempenho dos dispositivos móveis, viabilizaram a criação de um sistema de vigilância completo que pudesse ser monitorado através de dispositivos móveis, como por exemplo um celular.

O software de vigilância escolhido foi o ZoneMinder que além de apresentar características presentes na maioria dos softwares dessa área, é um software de código aberto, fator que foi fundamental para sua escolha. Ele é dividido entre um agente servidor, que gerencia as câmeras, e um agente cliente - uma página Web - onde é possível acessar os vídeos das câmeras. A falta de um agente cliente apropriada para dispositivos móveis foi o que motivou esse projeto.

O sistema operacional escolhido para o desenvolvimento da aplicação cliente foi o Google Android. Ele é um projeto aberto o que o torna possível rodar em diversos tipos de dispositivos de diferentes fabricantes. A aplicação foi construída utilizando-se o emulador contido na SDK do Android e é constituída de quatro telas, na primeira o usuário pode escolher entre assistir aos vídeos das câmeras, acessando a quarta tela, ou configurar a aplicação, o usuário só poderá assistir as câmeras se já tiver configurado a aplicação ao menos uma vez. Na segunda são feitas as configurações da conexão da aplicação com servidor, na terceira é onde o usuário escolhe quais câmeras ele quer assistir, e na quarta tela lhe é mostrada os vídeos das câmeras.

Alguns dos objetivos desse projeto não conseguiram ser alcançados e podem ser contemplados em futuros trabalhos como por exemplo a gravação de vídeos na aplicação, a capacidade de operar câmeras Pan/Tilt/Zoom utilizando a tecnologia touchscreen, e a internacionalização da aplicação que a tornaria multilinguagem.

Referência

1. Google Android. http://www.android.com.
2. ZoneMinder. http://www.zoneminder.com.
3. Patrick Klös. http://www.anddev.org/mjpeg_on_android_anyone-t1871-s15.html.

Código Fonte

Código fonte do DroidMinder

Autores

Esse trabalho foi o resultado de uma bolsa de iniciação tecnológica do CNPq (PIBIT) do aluno Michel Vinicius de Melo Euzébio e do professor Emerson Ribeiro de Mello. O artigo original pode ser obtido aqui.