Vigilância por vídeo e captura de imagem periódica pela webcam


Este tutorial permitirá que você use sua webcam e seu computador pessoal como um circuito fechado de televisão Linux . Primeiro, saiba que se trata de um monitorando de "casa" e que existem outros equipamentos mais sofisticados. Mais especificamente, as câmeras IP estão incluídas diretamente em um servidor Web, e são até motorizadas e controláveis remotamente, mas este material é caro, enquanto temos tudo que precisamos em casa, para fazer a mesma coisa.

O poder das ferramentas utilizadas (principalmente o programa movimento) faz com que vários modos de funcionamento sejam possíveis. Este tutorial explica alguns deles, e caberá à você adaptá-los para atender às suas necessidades.

Antes de começar

Pré-requisitos: Vamos supor que a sua webcam já esteja instalada em seu sistema e disponível no /dev/vídeo0. Dependendo da versão do seu sistema operacional e o modelo da sua webcam pode trata-se da etapa mais complicada para fazer funcionar o seu circuito fechado de televisão de casa. Verifique, com o xawtv ou o cheese, por exemplo, se a sua webcam está funcionando corretamente no seu sistema.

Capturas de imagens regulares

Com este modo de funcionamento você pode capturar uma imagem saída da sua webcam no formato JPEG e atualizá-la regularmente. Depois disso, você ainda pode integrar-la no seu site Web, por exemplo. Aqui nós não cuidaremos do servidor Web.

Método simples com a "webcam"

O utilitário webcam permite capturar uma imagem saída da webcam, anotá-la e salvá-la, localmente ou em um servidor FTP.
Comece instalando a webcam (fornecida pela xawtv) e crie ou abra o arquivo de configuração~/.webcamrc. Coloque nele:

[grab]     
device = /dev/video0     
text = "Captura do %d/%m/%Y à %H:%M:%S"     
width = <SUA_RESOLUÇÃO>     
height = < SUA_RESOLUÇÃO>     
quality = 75     
trigger = 200     
delay = 5     


[ftp]     
dir  = ~     
file = webcam.jpeg     
local = 1     

Com essas configurações padrão você só poderá criar uma imagem webcam .jpeg no seu homedir, a cada 5 segundos, se a cena for suficientemente diferente da anterior (ver a opção trigger).

Seção [grab] contém as configurações de captura, a seção [ftp] indica onde a imagem deve ser salva (possivelmente em um servidor FTP). Comece tentando o bom funcionamento do programa antes de configurar a atualização no FTP, se quiser.
text é a anotação que acompanhará a sua imagem no canto inferior esquerdo. Deixe em branco ou consulte a página principal da date para ver as configurações disponíveis.

trigger é uma opção importante: se for zero, a imagem será atualizada a cada delay segundo. Qualquer valor diferente de zero só atualizará a imagem se a imagem tiver mudado significativamente. Isto permite não renovar a imagem, se é for semelhante à anterior. Quanto maior o valor do trigger, menor a sensibilidade. Experimente várias vezes para determinar o valor mais adequado para sua cena.

Aviso: Se o delay for nulo e o valor do trigger baixo ou nulo, o programa poderá requerer recursos demasiados.

Execute a webcam para testar. Você deverá obter uma saída parecida com esta:

$ webcam      
reading config file: /home/ccm/.webcamrc     
video4linux webcam v1.5 - (c) 1998-2002 Gerd Knorr     
grabber config:     
  size 640x480 [none]     
  input (null), norm (null), jpeg quality 75     
  rotate=0, top=0, left=0, bottom=480, right=640     
write config [ftp]:     
  local transfer /home/ccm/upload.jpeg => /home/ccm/webcam.jpeg     
compare: max=218,avg=210     
compare: max=89,avg=18     
compare: max=96,avg=18     
compare: max=81,avg=20     
compare: max=78,avg=20     
compare: max=78,avg=25     
compare: max=73,avg=22     
compare: max=80,avg=27     
compare: max=81,avg=27     
compare: max=87,avg=30     
compare: max=95,avg=30     
compare: max=86,avg=34     
...

Verifique também se a imagem ~/webcam.jpg foi atualizada a cada mudança significativa da imagem.

Se tudo funcionar, você pode, se desejar, alterar as configurações de FTP para que a imagem seja atualizada diretamente no seu servidor FTP (útil para exibir sua imagem em seu site e se você dispor de uma hospedagem remota) . Para isso, edite a secção [ftp] :

[ftp]     
host = <HOTE_FTP>     
user = <LOGIN_FTP>     
pass = <PASS_FTP>     
dir  = /     
file = webcam.jpeg     
local = 0     

Liberar a webcam quando não estiver sendo usada (webcam + cron)

O método anterior tem a desvantagem de monopolizar a câmera continuamente apesar de não ser necessário.

Para evitar isso, repita este método, mas adicione a opção once = 1 à seção [grab] (podendo fazer apenas uma captura e sair) e automatize a tarefa com o Crontab.

Com isto você ainda poderá efetuar a captura em momentos específicos, ideal para as webcam turisticas, por exemplo. Veja esta dica detalhada para automatizar tarefas com o crontab. No nosso caso, a tarefa a ser automatizada é simplesmente o comando webcam.

Nota: o Motion também permite fazer capturas regulares. No entanto, ele sofre do mesmo problema de monopolização do periférico.

Emissão de um fluxo em um servidor Web

Instale o Motion e verifique se o arquivo /etc/motion/motion.conf existe. Este arquivo permite configurar o Motion para que ele funcione como você quer.

Localize os seguintes valores no arquivo motion.conf e modifique-os:

Na seção Capture device options, verifique se as configurações estão corretas:

# Videodevice to be used for capturing (default /dev/video0)     
# Periférico de entrada (em geral, deixar com o valor /dev/video0)     
videodevice /dev/video0     

# Image width (pixels). Valid range: Camera dependent, default: 352     
# Largura da imagem capturada em pixels (conforme a sua câmera)     
width 480     

# Image height (pixels). Valid range: Camera dependent, default: 288     
# Altura da imagem capturada em pixels (conforme a sua câmera)     
height 640     

Na seção Image File Output :

# Output 'normal' pictures when motion is detected (default: on)     
# Ponha em off para não criar imagens     
output_normal off     

Na seção Live Webcam Server :

# The mini-http server listens to this port for requests (default: 0 = disabled)     
# Indicar um número de porta, ex : 8081     
webcam_port 8081     

# Restrict control connections to localhost only (default: on)     
# Ponha este valor em off APENAS se você quiser acessar o fluxo de vídeo a partir de outro computador que não seja o que roda o Motion     
# atenção, de acordo com as configurações do firewall, o valor off pode significar que o seu vídeo estará acessível, sem restrições, a partir da Internet 
control_localhost on     

Na seção FFMPEG related options :

# Use ffmpeg to encode mpeg movies in realtime (default: off)     
# Ponha em off para não criar vídeos (exceto o fluxo de vídeo, é claro)     
ffmpeg_cap_new off     

Deixe todos os outros valores padrões.

Execute o Motion simplesmente digitando Motion em um terminal. Se tudo estiver normal, você deverá ver o seguinte:

[1] Started stream webcam server in port 8081

Isto significa que o servidor foi iniciado e difunde o fluxo vindo da sua webcam na porta 8081.

Para se conectar você pode, ou abri-lo usando um browser, ou usando um media player. Por exemplo:

Para acessar o feed de vídeo a partir de outro computador, mude o valor do control_localhost para off, reinicie o Motion e substitua localhost pelo endereço IP do computador em que roda o Motion endereço do feed.

Você pode interromper a emissão do feed pressionando Ctrl + C no terminal onde roda o Motion.

Saiba que a emissão de um feed de vídeo na Web requer uma velocidade para cima importante e em uma conexão ADSL padrão, o valor do fluxo está bem abaixo da velocidade para baixo, não espere, então, poder transmitir um vídeo em HD em tempo real na web.

Gravar um vídeo, quando um movimento for detectado

Isso permite um real monitoramento. Cada detecção de movimento, o Motion criará um novo vídeo até que a imagem pare de se mover.
Instale o Motion e verifique se o arquivo /etc/motion/motion.conf existe. Este arquivo permite configurar o Motion para que ele funcione como você quer.

Localize os seguintes valores no arquivo motion.conf e altere-os:

Na seção Capture device options, verifique se as configurações estão corretas:


# Videodevice to be used for capturing  (default /dev/video0)     
# Periférico de entrada (em geral, deixar o valor /dev/video0)     
videodevice /dev/video0     

# Image width (pixels). Valid range: Camera dependent, default: 352     
# Largura da imagem capturada em pixels (conforme a sua câmera)     
width 480     

# Image height (pixels). Valid range: Camera dependent, default: 288     
# Altura da imagem capturada em pixels (conforme a sua câmera)     
height 640     

Na seção Image File Output :

# Output 'normal' pictures when motion is detected (default: on)     
# Ponha em off para não criar imagens     
output_normal off     

Na seção Live Webcam Server :

# The mini-http server listens to this port for requests (default: 0 = disabled)     
# Por 0 como número de porta para desativar o servidor Web     
webcam_port 0     

Na seção FFMPEG related options :

# Use ffmpeg to encode mpeg movies in realtime (default: off)     
# Por em ON para ativar a criação do arquivo de vídeo     
ffmpeg_cap_new off     

# Codec to used by ffmpeg for the video compression.     
# Escolher o formato MPEG4 (arquivos .AVI)     
ffmpeg_video_codec mpeg4     

Na seção Snapshots :

# Target base directory for pictures and films     
# Crie um diretório "Motion" em seu homedir e coloque o caminho aqui     
# Todos os arquivos de saída serão criados nesta pasta     
target_dir /home/ccm/motion     
<code>     

Deixe todos os outros valores padrão. 
  
Execute o Motion digitando Motion em um terminal. Se tudo estiver normal, no primeiro movimento na frente de sua câmera, você deverá ver o seguinte: 
<code>[1] File of type 8 saved to: /home/ccm/motion/01-20110905130753.avi

Isto significa que o Motion detectou um movimento e está gravando um vídeo. Ele vai parar assim que a imagem estiver estável novamente.

Você pode interromper o circuito fechado de televisão pressionando Ctrl + C no terminal ao roda o Motion. Os arquivos não serão excluídos.

Atenção, um novo arquivo não é necessariamente criado a cada novo movimento, é possível que dois registros sejam colocados ponta a ponta no mesmo arquivo, se a diferença de tempo entre o final do primeiro registro e o início do segundo for inferior a um determinado valor. Este valor é a opção gap gap na seção Motion Detection Settings, dada em segundos.

Se você achar que a detecção é muito ou pouco sensível, ajuste o parâmetro threshold na seção <gras Motion Detection Settings </gras>. O valor padrão é 1500. Um valor mais inferior significa maior sensibilidade. Embora o valor padrão seja apropriado para a maioria dos casos, se você alterar esse valor, você provavelmente deverá fazer um monte de testes antes de encontrar o valor adequado. Não se esqueça de interromper o Motion (Ctrl + C) e reiniciá-lo em cada mudança de valor.

Nota sobre o motion

O Motion é uma ferramenta muito poderosa que te dará muito mais possibilidades do que as mencionadas acima. Modifique o arquivo motion.conf para mudar o seu comportamento.

Se você quiser configurar diversos comportamentos, copie o arquivo motion.conf em outro diretório e crie diversos arquivos para diversos fins, tais como motion_circuitofechadodetelevisão.conf, motion_servidor_http.conf... Depois então, você poderá inicializar o Motion usando o arquivo de configuração que você quiser, em vez de /etc/motion.conf, por exemplo:

$ motion ./motion_configurações/motion_circuitofechadodetelevisão.conf     

Fontes

Nosso conteúdo é produzido em colaboração com especialistas em tecnologia da informação sob o comando de Jean-François Pillou, fundador do CCM.net. CCM é um site sobre tecnologia líder em nível internacional e está disponível em 11 idiomas.
Este documento, intitulado 'Vigilância por vídeo e captura de imagem periódica pela webcam', está disponível sob a licença Creative Commons. Você pode copiar e/ou modificar o conteúdo desta página com base nas condições estipuladas pela licença. Não se esqueça de creditar o CCM (br.ccm.net) ao utilizar este artigo.

Assine nossa newsletter!

Assine nossa newsletter!
Junte-se à comunidade