Motion como sistema de Vigilância e Segurança

De MediaWiki do Campus São José
Revisão de 08h12min de 12 de novembro de 2016 por Joao.ms (discussão | contribs)
Ir para navegação Ir para pesquisar

O Motion

Logomarca do aplicativo


Site Oficial (antigo): http://lavrsen.dk/foswiki/bin/view/Motion/WebHome
Repositório no GitHub: https://github.com/Motion-Project/motion
Site oficial: https://motion-project.github.io/

O Motion é um programa que monitora o sinais de vídeo. Ele é capaz de detectar se uma parte significante da imagem mudou, em outras palavras, ele pode detectar movimento.
O projeto está em processo de migração do site http://www.lavrsen.dk/foswiki/bin/view/Motion/WebHome para o GitHub.
Informações mais recente de atividades no projeto pode ser encontradas na página de notícias.
A documentação para a versão mais recente do código pode ser encontrada aqui. Informações sobre as versões pode ser encontrada aqui.


Situação

Quando pensa-se em organizar um sistema de monitoramento, a questão do hardware é geralmente a que mais leva a atenção, e deve, já um sistema de monitoramento de possuir dispositivos com resoluções de vídeo suficientes para realizar identificações de rostos, placas, etc. Com isso, nem sempre pensa-se em qual software realizará a captura de imagens e pode-se acabar comprando uma solução cara e com limitações, e a sugestão apontada aqui é usar o Motion para isso.


Algumas informações técnicas

Sistema operacional utilizado: Debian 8 (Jessie) 64 bits
Versão do Motion: 3.4.1-1 (Disponível aqui).
Versão do kernel Linux: 3.16.0-4
Número de núcleos de processamento: 8 núcleos
Quantidade de memória RAM: 8 gigabytes
Resoluções e marca dos dispositivos de vídeos testados: 640x480, 1280x800 (Axis), 1280x960 (Axis) e 2592x1944 (Axis)
Servidor virtualizado

Bug na versão 4.0.1

Devido à maior quantidade de recursos, optou-se por utilizar a versão 3.4.1 do software Motion. Essa versão estava disponível no repositório oficial do projeto Debian Testing, sendo a mesma substituída pela versão 4.0.1. A versão mais nova, no entanto, possui um bug que faz com que o ffmpeg não opere corretamente. O bug ocorre após a detecção de movimento, quando a gravação de vídeo fosse interrompida, e o que acontece é um mero congelamento de imagem. Isso faz com que o arquivo de vídeo seja gerado mesmo sem movimento detectado, ocasionando assim o aumento no arquivo de vídeo sem necessidade.


Instalação

Antes de começar os procedimentos, remova quaisquer pacotes de codec conflitantes, do tipo x264, libx264-dev, libavcodec, libavcodec, libavfilter, libavfilter, libavresample, libavutil, libpostproc, libswresample, libswscale, ffmpeg.


root@motion:~# apt purge x264, libx264-dev, libavcodec, libavcodec, libavfilter, libavfilter, libavresample, libavutil, libpostproc, libswresample, libswscale, ffmpeg

1. Compilando e instalando o libx264:

root@motion:~# git clone git://git.videolan.org/x264.git
root@motion:~# cd x264
root@motion:~# ./configure --enable-shared --disable-opencl
root@motion:~# make
root@motion:~# make install && ldconfig

2. Compilando e instalando o FFMPEG com suporte ao x264:

root@motion:~# git clone git://git.ffmpeg.org/ffmpeg
root@motion:~# cd ffmpeg
root@motion:~# ./configure --arch=armhf --target-os=linux --enable-gpl --enable-libx264 --enable-nonfree --enable-shared
root@motion:~# make
root@motion:~# make install && ldconfig

3. Instalado a biblioteca jpeg:

root@motion:~# apt install libjpeg-dev

4. Compilando e instalando o motion:

root@motion:~# apt install dh-autoreconf
root@motion:~# wget http://200.135.37.107/nuvem/index.php/s/AlTDgN70W1D1xXo/download
root@motion:~# unzip download
root@motion:~# cd motion-3.4.1
root@motion:~# autoreconf
root@motion:~# ./configure
root@motion:~# make
root@motion:~# make install && ldconfig


Configurando o Motion

Após instalar o Motion, é possível acessar os arquivos de configuração do mesmo em /usr/local/etc/motion.

root@motion:~# cd /usr/local/etc/motion

Após isso, basta modificar o nome do arquivo motion-dist.conf para motion.conf e criar um arquivo chamado camera1.conf:

root@motion:/usr/local/etc/motion# mv motion-dist.conf motion.conf
root@motion:/usr/local/etc/motion# echo "# Camera 1" > camera1.conf

Agora, o arquivo "motion.conf" será modificado. O arquivo "camera1.conf" é um arquivo de configuração auxiliar, todas as opções que forem especificadas nele, substituirão a do arquivo de configuração original.
Segue a lista das principais opções do arquivo de configuração:

videodevice /dev/videoX → É o parâmetro o qual se especifica o dispositivo de vídeo a ser utilizado, geralmente USB. A identificação do dispositivo de vídeo geralmente varia entre /dev/video0, /dev/video1 ...etc.
rotate 0 → Nesse parâmetro, pode ser definida em quantos graus se deseja rotacionar a imagem.
width 640 → Nesse parâmetro é definida a largura da imagem.
height 480 → Nesse parâmetro é definida a altura da imagem.
framerate 30 → Nesse parâmetro, define-se o tanto de quadros que serão apresentado em um segundo. (FPS)
netcam_url valor → Esse parâmetro é destinado à câmeras IPs. O formato da URL pode ser http://exemplo, ftp://exemplo, mjpeg://exemplo, rtsp://exemplo ou file://exemplo.
netcam_userpass usuario:senha → Aqui é definida o usuário e a senha da câmera IP.
rtsp_uses_tcp on/off → Força ou não o uso do protocolo TCP para a obtenção das imagens pelo protocolo rtsp. "On", para usar TCP e "off" para usar UDP.
auto_brightness off/on → Desativa/ativa o controle automático de brilho conforme a luminosidade do ambiente. ,br /> brightness 0 → Controle de brilho do dispositivo. Valores vão de 0 à 255.
contrast 0 → Controle de contraste do dispositivo. Valores vão de 0 à 255.
saturation 0 → Controle de profundidade de cor do dispositivo. Valores vão de 0 à 255.
power_line_frequency -1 → Controla o ajuste de branco para compensar a intensidade luminosa do ambiente. Valores podem ser -1, que não modifica a configuração dispositivo, 0, desativa a opção, 1, põe em frequência de 50 Hz, 2, põe em frequência de 60 Hz e 3 põe em modo automático.
threshold 1000 → Define o número de pixels que precisam ser modificados para que seja considerado movimento.
pre_capture 2 → Define o número de imagens a serem incluídas na gravação antes do movimento ser detectado.
post_capture 2 → Define o número de imagens a serem incluídas na gravação depois do movimento ser detectado.
output_pictures off → Ao ser detectado movimento, se estiver habilitado (on), uma sequência de imagens será criada.
quality 75 → Define a qualidade, em porcentagem, da sequência de imagens.
picture_type jpeg → Define o formato das imagens.
ffmpeg_output_movies on → Quando detectado movimento, será realizado o registro das imagens em um arquivo de vídeo. ,br /> ffmpeg_bps 2000000 → Define o número de bits por segundo. Quanto maior, melhor qualidade e maior tamanho de arquivo.
ffmpeg_variable_bitrate 0 → Define uma taxa de bits por segundo variável. Quando valor 0, essa opção é desabilitada. De 2 à 32, representam uma qualidade de melhor para pior.
ffmpeg_video_codec mpeg4 → Define o formato de arquivo de vídeo a ser criado. Opções disponíveis: mpeg4 = .avi, mpeg1 = .mpg, swf = .swf, flv = .flv, mov = .mov, ogg = .ogg, mp4 = .mp4, mkv = .mkv, e hevc.
ffmpeg_duplicate_frames off → Desativa/ativa a duplicata de quadros para atingir a opção definida em "framerate".
locate_motion_mode on → Valores: on, off, preview. Quando em "on", desenha uma caixa em volta do objeto em movimento. Quando em off, a opção é desativada. Quando em preview, desenha uma caixa apenas na pré-visualização não afetando a gravação.
locate_motion_style redbox → Seleciona o que desenhar quando a opção acima é ativa. Quando "redbox", desenha uma caixa vermelha ao redor do objeto em movimento. Quando "box", desenha uma caixa cinza ao redor do objeto em movimento. Quando "cross", desenha uma cruz no centro do movimento. Quando "redcross", desenha uma cruz vermelha no centro do movimento.
text_right %d/%m/%Y\n%T-%q → Define o formato do texto que ficará no canto inferior direito. As variáveis são: %d = dia, %m = mês, %Y = ano, %T = hora:minuto:segundo, %q = imagem atual. É possível colocar o texto que quiser.
text_left valor → Define o texto que ficará no canto inferior esquerdo. As variáveis são: %d = dia, %m = mês, %Y = ano, %T = hora:minuto:segundo, %q = imagem atual. É possível colocar o texto que quiser.