Você está na página 1de 27

Arquitetura de Computadores

Sistema de vigilncia

Departamento de Engenharia Eletrotcnica


Mestrado Engenharia Eletrotcnica e de Computadores
Automao e Sistemas

2016

1130425 Filipe Ferreira


1130627 Pedro Miguel
Sistema de vigilncia | 1130425-1130627

ndice
Descrio do problema................................................................................................................. 1
Implementao ............................................................................................................................. 4
Bibliotecas ................................................................................................................................. 4
Configuraes ............................................................................................................................ 4
Kernel .................................................................................................................................... 4
Buildroot ............................................................................................................................. 13

Dispositivo de armazenamento .............................................................................................. 18


Testes do sistema ....................................................................................................................... 20
Funcionamento do sistema ..................................................................................................... 20
Comandos ....................................................................................................................... 20
Imagens do sistema ................................................................................................................. 22
Concluses .................................................................................................................................. 25
Bibliografia .................................................................................................................................. 26

[2]
Sistema de vigilncia | 1130425-1130627

Descrio do problema

No mbito da disciplina Arquitetura de Computadores, Mestrado em Engenharia Eletrotcnica


e de Computadores, foi elaborado uma distribuio de Linux, em quem fosse possvel gravar
vdeo e imagem assim como tambm reproduzi-los.

Comeou-se pela configurao do kernel com o pacote Linux 4.8.10, verso descarregada do
site. www.kernel.org.Todas as opes escolhidas foram selecionadas como estticas. Foram
instalados trs leitores de vdeo para ser possvel visualizar os vdeos e imagens gravados ou at
mesmo stream. Alm destas opes teve-se como base as opes dos guies laboratoriais,
fornecidos para as aulas prticas, porm foram alteradas algumas configuraes para a
arquitetura do processador da mquina que executa o programa. Foram adicionados campos
relativos rea da multimdia para um melhor funcionamento do programa assim como os
drivers das cmaras utilizadas.

Primeiramente extraiu-se o ficheiro comprimido linux-4.8.10, criando assim uma pasta no


diretrio atual com o nome de linux-4.8.10, os comandos efetuados para estes passos sero
exemplificados posteriormente no menu de configurao do Kernel. Depois de se estar no
diretrio criado, iniciou-se as configuraes do kernel. Foi selecionada a opo de suporte para
o USB 2.0, assim como tambm o suporte para UVC (USB Video Class), pois a cmara Logitech
C170 foi a utilizada e uma opo essencial para o funcionamento da mesma no sistema criado.
Como j foi referido acima, colocou-se diferentes opes na arquitetura do processador assim
como na sua variante, tomando em conta a mquina utilizada para a execuo do sistema.

A busybox foi compilada juntamente com o buildroot, pois chegou-se concluso que no havia
necessidade de uma configurao especifica para a mesma.

A verso utilizada do buildroot foi buildroot-2016.08.1 descarregada do site


https://buildroot.org/download.html. Aps o download foi extrado, utilizando o mesmo
procedimento do Kernel, criando tambm um diretrio denominado buildroot-2016.08.1. Neste
diretrio procedeu-se configurao do buildroot. Alm dos campos selecionados nas aulas
laboratoriais, alguns foram alterados, com o objetivo de se enquadrar com o sistema
pretendido. Foram adicionadas opes de librarias de forma a no haver problemas de execuo
durante o sistema, librarias estas que iro ser especificadas posteriormente. Optou-se pelo
sistema de ficheiros EXT4 parecendo-nos a soluo mais fivel.

[3]
Sistema de vigilncia | 1130425-1130627

Implementao

Bibliotecas
De forma a no existir quaisquer problemas durante a compilao do kernel e do buildroot
devem ser instaladas as seguintes bibliotecas com o seguinte comando (o utilizador dever ser
root de modo a conseguir executar o comando):

+ +

Configuraes
Kernel
Muitas das opes selecionadas foram pr-definidas pela configurao do kernel e tambm
escolhidas devido ao guio laboratorial. As opes adicionais iro ser comentadas.

Como j foi referido acima, comea-se por descarregar a verso utilizada do kernel:

://. . ////4. / 4.8.10. .

Depois extrai-se o ficheiro comprimido utilizando o seguinte comando:

4.8.10. .

Para iniciar a configurao do kernel necessrio entrar no diretrio criado e usar os comandos:

4.8.10

Para iniciar o menu de configurao utiliza-se:

[4]
Sistema de vigilncia | 1130425-1130627

As seguintes capturas de ecr demonstram as opes selecionadas no kernel:

Esta opo foi deve ser selecionada se o sistema est a ser criado num sistema de 64bit.

General Setup:

Enable the block layer:

[5]
Sistema de vigilncia | 1130425-1130627

Processer type and features:

Dentro da famlia de processadores seleciona-se a opo de acordo com o processador da


mquina que executa o sistema.

[6]
Sistema de vigilncia | 1130425-1130627

Bus options:

Bus options

Executable file formats/Emulations:

Networking support

Networking options:

[7]
Sistema de vigilncia | 1130425-1130627

Device Drivers

Generic Driver Options:

Plug and Play support:

Block devices:

SCSI device support:

[8]
Sistema de vigilncia | 1130425-1130627

Serial ATA and Parallel ATA drivers (libata)

Network device support

[9]
Sistema de vigilncia | 1130425-1130627

Multimedia support:

V4L (Video for Linux) um conjunto de drivers e de suporte para captura de vdeo nos sistemas
Linux, devendo ser escolhida.

Visto que o sistema ir interagir com cmaras de vdeo pretendente selecionar o campo de
Cameras/video grabbers support e Autoselect ancillary drivers (tunners, sensors, i2c,
frontends).

Media USB Adapters

Aps uma pesquisa verificou-se que uma das webcams que se utilizou necessitava do campo
USB Video Class (UVC), pois permite a identificao de dispositivos capazes de fazer
streaming de vdeo.

[10]
Sistema de vigilncia | 1130425-1130627

GSPCA based webcams

As drivers escolhidas foram de acordo com as webcams utilizadas. Sem elas seria impossvel o
funcionamento das mesmas no sistema construdo.

Graphics Support

Frame buffers Devices

Aqui s o suporte grfico para VESA VGA foi escolhido.

[11]
Sistema de vigilncia | 1130425-1130627

USB support:

O suporte para o USB 2.0 necessrio, pois as portas USB da mquina utilizada so do tipo de
conexo USB 2.0 e ser a partir das portas que as webcams sero ligadas.

File Systems:

[12]
Sistema de vigilncia | 1130425-1130627

No final, depois das opes desejadas estarem selecionadas devemos guardar as configuraes
e sair do menu de configurao do kernel. De seguida na linha de comandos executa-se:

8
Aps executar o comando e de o kernel terminar de compilar procede-se configurao do
buildroot.

Buildroot
Para a elaborao deste sistema de vigilncia, aps a elaborao de um kernel para o mesmo,
era necessrio criar um sistema de ficheiros para no qual fossem encontradas todas a
funcionalidades necessrias execuo do kernel deste sistema de vigilncia.

Para a criao do sistema de ficheiros foi utilizada uma ferramenta denominada de buildroot.

Nesta ferramenta so configurados os utilitrios necessrios para o sistema de ficheiros. Fora


descarregada a verso buildroot-2016.08.1.tar.bz2, descompactada e configurada. No se
apagaram quaisquer configuraes prvias da verso descarregada, apenas foram alteradas e
acrescentadas as necessrias.

Para descarregar a verso foi utilizado o comando:

wget https://buildroot.org/downloads/buildroot-2016.11.1.tar.bz2
Descompactado com o comando:

tar xvf buildroot-2016.08.1.tar.bz2


Para inciar a configurao do buildroot necessrio efetuar o comando xconfig na pasta criada
aps a descompactao:

cd buildroot-2016.08.1
make xconfig

[13]
Sistema de vigilncia | 1130425-1130627

Configurao:

Em target options:

target architecture: x86_64

target architecture: core2

Foram selecionadas estas arquiteturas devido maquina onde seria executado o sistema, sendo
esta mquina de 64 bits com um processador core i3 da intel que corresponde arquitetura
core2 do buildroot.

Em toolchain:

toolchain type:busybox

kernel headers: Linux 4.7.x kernel headers

Enable toolchain locale/i18n support;

Foram mantidas as configuraes Binutils Version and Gcc compiler version.

Enable c++ support.

Neste caso foram selecionadas as opes referentes toolchain que o buidlroot iria providenciar
ao sistema. Assim como as verses a utilizar do binutils e do gcc. Foi ainda adicionado o suporte
para c++ necessrio compilao do visualizador de vdeo VLC.

[14]
Sistema de vigilncia | 1130425-1130627

System configuration:

Passwords encoding:sha-512

System Banner: Vigilance_1130425_1130627

Init system:Busybox

/dev management: Dynamic using devtmpfs only

Enable root login password

/bin/sh: busybox default shell

[15]
Sistema de vigilncia | 1130425-1130627

remount root filesystem read-write during boot

Run a getty (login prompt) after boot

Tty port: console

O sistema tem as configuraes apresentadas, parte delas comuns distribuio criada nas
aulas. Foi escolhido um login com password pois um sistema de vigilancia s dever ser acedido
por quem possui credenciais. No foi atribuida password para tornar mais simples a fase de
testes e evitar colocar a password em cada reboot. Foi escolhido uma forma de encoding para a
password de forma a aumentar a segurana do sistema. O sistema de inicializao o conhecido
e utilizado nas aulas, busybox. A opo de remout permite que o sistema deixe de ser read-only
e possa ser read-write. As outras opes como login prompt e system banner so referentes ao
display no arranque de mensagens e menu de login.

No se utilizou o buildroot para compilar o kernel.

Target packages:

Audio and video aplications: mplayer, build and install mplayer, build and install memcoder,
v4l2grab e vlc.

Ffmpeg: build ffmpeg, build ffplay, enable input devices, enable output devices.

Estas configuraes so responsveis pela instalao aos programas necessrios execuo do


sistema de vigilncia, ou seja, programas de reproduo e gravao de vdeo.

[16]
Sistema de vigilncia | 1130425-1130627

File system images:

ext2/3/4 root filesystem: ext4

Escolha do tipo de sistema de ficheiros a montar, nomeadamente o sistema ext4.

Aps as opes estarem selecionadas, grava-se e fecha-se o menu de configurao, de seguida


faz-se a compilao, digitando o seguinte comando na linha de comandos: make

A compilao ir gerar um ficheiro rootfs.tar que ir ser extrado para a segunda partio do
dispositivo a utilizar.

[17]
Sistema de vigilncia | 1130425-1130627

Dispositivo de armazenamento
necessrio um dispositivo de armazenamento, neste caso foi utilizada uma pen USB, para
iniciar o sistema na mquina.

Configurao
Verifica-se a partio dos dispositivos inicialmente:

cat /proc/partitions
Para se ter a certeza que o dispositivo se encontra desmontado executa-se o seguinte
comando sendo root:

umount /dev/sdb* (Neste caso assume-se que as parties do dispositivo


so identificadas por sdb)

#Elimina-se a tabela de parties existente

Dd if=/dev/zero of=/dev/sdb bs=1M count=4 conv=fsync

#Comea-se a criar as parties

fdisk /dev/sdb

#Criar uma partio, com 1Gbyte de espao por exemplo, utiliza-se a seguinte sequncia de
comandos: (n ; p; <enter>; +1000M).

#Marcar a partio criada como a primeira: (a; 1)

#Criar a segunda partio a ocupar o espao em falta: (n; p; 2; <enter>, <enter>)

#Guardar as alteraes (w)

#Verificar as alteraes efetuadas

cat /proc/partitions

#Colocar a primeira partio com o sistema de ficheiros do tipo FAT e a sgunda com o tipo
EXT4

mkfs.vfat /dev/sdb1
mkfs.vfat /dev/sdb2
#Instalar o syslinux na primeira partio do dispositivo

syslinux -i /dev/sdb1
dd if=/usr/share/syslinux/mbr.bin of=/dev/sdb conv=fsync

[18]
Sistema de vigilncia | 1130425-1130627

#Cria-se o ficheiro syslinux.cfg e move-se para a primeira partio da pen, utilizando um


diretrio criado como intermdio

umount /dev/sdb1
mkdir m1
mount /dev/sdb1 m1
nano syslinux.cfg

#O syslinux.cfg dever conter o seguinte:

#O default menu.c32 utilizado para criar um ambiente mais amigvel ao utilizador quando se
executa o sistema.

#Passar o bzImage do kernel para o dispositivo

cd linux-4.8.10
cp arch/x86/boot/bzImage ../m1/bzImage-vigilance
cd ..
#Criao do sistema de ficheiros principal na segunda partio da pen USB, utilizando o
ficheiro gerado pela compilao do buildroot

mkdir mnt1
cp buildroot-2016.08.1
cp output/images/rootfs.tar ../mnt1
cd ../mnt1
tar xvf rootfs.tar
mkdir mnt2
mount /dev/sdb2 mnt2
cp -a mnt1/* mnt2/
umount mnt1
umount mnt2

#O sistema iniciado durante do arranque da mquina, atravs do dispositivo USB.

[19]
Sistema de vigilncia | 1130425-1130627

Testes do sistema

Funcionamento do sistema:
Este prottipo funciona diretamente na linha de comando de um sistema previamente
elaborado com o fim de sistema de vigilncia, ou seja, no possui interao grfica para com o
utilizador.

Cada ao executada recorre um comando que ter de ser inserido na Shell.

Comandos:

1. vlc v4l2:///dev/videox
O comando responsvel por abrir uma janela de streaming de vdeo no programa vlc da camara
x. No caso do prottipo desenvolvido era possvel ver streaming de vdeo de 3 dispositivos
diferentes.

Os dispositivos de vdeo vo sendo numerados pela ordem de ligao mquina, ou seja, a


webcam do porttil fica como dispositivo 0 e so carregados os codecs para a mesma no
arranque do sistema. As camaras ligadas de seguida sero numerados por ordem de ligao e
os codecs sero carregados imediatamente de seguida sua ligao ao sistema.

2. Para gravao, isolar frames e compilar imagem recorreu-se ao ffmpeg.

ffmpeg -f video4linux2 -s 640x480 -i /dev/videox -codec:v huffyuv -threads 4 1.mkv

Neste comando definimos um conjunto de parmetros. O parmetro -f video4linux2 representa


o formato de ficheiro de input, neste caso forado. Atravs do parmetro -s definimos o frame
size, ou seja, o tamanho do ficheiro de output em termos de janela. O -i representa o input
escolhido, ou seja, a cmara x. O -codec representa o codec utilizado para gravao e posterior
reproduo. O -threads um parmetro importante para escolha do numero de threads de
processador utilizadas para a gravao do vdeo, isto pode ter implicaes na criao do ficheiro

[20]
Sistema de vigilncia | 1130425-1130627

de vdeo nomeadamente deixa-lo mais acelerado. O parmetro final corresponde ao ficheiro de


sada.

O comando anterior pode ser ainda usado para retirar frames ao longo da gravao.

3. ffmpeg -f video4linux2 -s 640x480 -i /dev/videox -codec:v huffyuv -threads 4 1.mkv


-vf fps=0.5 imagem.jpg
Ao acrescentarmos o parmetro -vf podemos definir o tempo de intervalo entre cada frame
captado ao longo da gravao.

4. O ffmpeg permite que se retirem frames de vdeos previamente gravados.

ffmpeg -ss 0.5 -i x.mkv -t 1 -s 480x300 image1.jpg

Assim como no comando acima definimos o input, que ser o ficheiro de vdeo, o output, que
ser a imagem, e o tamanho do frame. Para alm destes acrescenta-se o parmetro -ss que
corresponde ao momento, em segundos, do frame a ser retirado do vdeo.

5. O ffmpeg permite ainda criar um mosaico de vdeos que pode ser usado para ver
simultneo imagens captadas pelas diversas cmaras utilizadas no sistema.

ffmpeg -i 1.avi -i 2.avi -i 3.avi -i 4.avi -filter_complex "nullsrc=size=640x480 [base]; [0:v]


setpts=PTS-STARTPTS, scale=320x240 [upperleft]; [1:v] setpts=PTS-STARTPTS,
scale=320x240 [upperright]; [2:v] setpts=PTS-STARTPTS, scale=320x240 [lowerleft];
[3:v] setpts=PTS-STARTPTS, scale=320x240 [lowerright]; [base][upperleft]
overlay=shortest=1 [tmp1]; [tmp1][upperright] overlay=shortest=1:x=320 [tmp2];
[tmp2][lowerleft] overlay=shortest=1:y=240 [tmp3]; [tmp3][lowerright]
overlay=shortest=1:x=320:y=240" -c:v libx264 output.mkv

Neste comando definimos os inputs, -i, provenientes de quatro vdeos diferentes. Usamos o
parmetro -filter_complex para criar o output proveniente de vrios inputs. Atravs deste
ultimo parmetro definimos o frame size da base onde sero colocados os vdeos. De seguida
definimos o frame size de cada um e a sua localizao na base assim como o ponto onde ser
colocado no sistema de eixos x e y. Com o parmetro -c definimos o codec a ser usado e de
seguida o ficheiro de output.

[21]
Sistema de vigilncia | 1130425-1130627

Figura 1 Modelo mosaico

Imagens do sistema:
I. Escolha da opo de boot

II. Seleo do sistema de vigilncia

[22]
Sistema de vigilncia | 1130425-1130627

III. Arranque e login no sistema

IV. Reconhecimento da webcam conectada maquina

V. Stream em mosaico

[23]
Sistema de vigilncia | 1130425-1130627

VI. Informao da utilizao do processador

VII. Informao de espao livre e alocado

[24]
Sistema de vigilncia | 1130425-1130627

Concluses

Aps vrios testes efetuados conclui-se que o sistema funciona de forma esperada captando
imagens quer em forma de vdeo, quer em forma de fotografia, efetua o stream de vdeo
proveniente de diferentes fontes e ainda permite criar um mosaico com os vdeos captados das
diversas fontes. O sistema foi otimizado em termos de espao a ocupar na compilao do
buildroot uma vez que os ficheiros de vdeo so normalmente pesados ocupando um grande
espao de memria. Por outro lado, o kernel foi otimizado de forma a ser mais eficaz e rpido e
no mais leve. Os testes feitos memria mostraram-se satisfatrios, uma vez que, aps a
gravao de alguns vdeos a distribuio ainda possui 25% da memria de armazenamento livre.
Algumas otimizaes podem ainda ser efetuadas como excluir a aplicao mplayer pois esta s
foi adicionada como precauo caso a aplicao vlc no funcionasse como esperado, pois o
suporte para esta ainda no total.

O sistema possui ainda capacidade para ser expansvel a streaming por rede. Contem os drivers
de rede necessrios para, em vez de, se fazer streaming para um output ou ficheiro pode ser
feito para uma outra mquina colocada na mesma rede. Este sistema seria mais apelativo se
estas funcionalidades fossem operadas em ambiente grfico, sendo este um dos objetivos de
melhoria futuros. Futuramente pode ainda adicionar-se capacidade de captao de som para
que o streaming seja o mais fiel realidade em que a camara se situa possvel.

[25]
Sistema de vigilncia | 1130425-1130627

Bibliografia
[1] Jorge Estrela, Linux Distribution: Kernel Configuration, 2016.
[2] Jorge Estrela, Assembly of a minimalist Linux distro Assembly of a minimalist Linux
distribution, 2016.
[3] Jorge Estrela, Cross-compilation with Buildroot, 2016.
[4] ZoneMinder - Como instalar esse sistema de vigilncia para Linux? - Emerson Barros.
[Online]. Available: https://emersonbarros.com.br/zoneminder-como-instalar-esse-
sistema-de-vigilancia-para-linux/. [Accessed: 23-Dec-2016].
[5] script(1) - Linux manual page. [Online]. Available: http://man7.org/linux/man-
pages/man1/script.1.html. [Accessed: 17-Dec-2016].
[6] Extract A Single Image From A Video Using FFMPEG Bertie Baggios Wonderland.
[Online]. Available: http://blog.roberthallam.org/2010/06/extract-a-single-image-from-
a-video-using-ffmpeg/. [Accessed: 23-Dec-2016].
[7] LinuxCommand.org: Writing shell scripts. [Online]. Available:
http://linuxcommand.org/writing_shell_scripts.php. [Accessed: 21-Dec-2016].
[8] Unix Shell The case...esac Statement. [Online]. Available:
https://www.tutorialspoint.com/unix/case-esac-statement.htm. [Accessed: 23-Dec-
2016].
[9] Linux and Unix script command help and examples. [Online]. Available:
http://www.computerhope.com/unix/uscript.htm. [Accessed: 17-Dec-2016].
[10] Create a mosaic out of several input videos FFmpeg. [Online]. Available:
https://trac.ffmpeg.org/wiki/Create a mosaic out of several input videos. [Accessed: 23-
Dec-2016].
[11] Capture/Blackmagic FFmpeg. [Online]. Available:
https://trac.ffmpeg.org/wiki/Capture/Blackmagic. [Accessed: 23-Dec-2016].
[12] Concatenate FFmpeg. [Online]. Available: https://trac.ffmpeg.org/wiki/Concatenate.
[Accessed: 23-Dec-2016].
[13] Using case statements. [Online]. Available: http://tldp.org/LDP/Bash-Beginners-
Guide/html/sect_07_03.html. [Accessed: 22-Dec-2016].
[14] shell - Run a string as a command within a Bash script - Stack Overflow. [Online].
Available: http://stackoverflow.com/questions/2355148/run-a-string-as-a-command-
within-a-bash-script. [Accessed: 22-Dec-2016].
[15] linux - Pass arguments into C program from command line - Stack Overflow. [Online].
Available: http://stackoverflow.com/questions/498320/pass-arguments-into-c-
program-from-command-line. [Accessed: 17-Dec-2016].
[16] ffmpeg command line for capturing (and recording) audio and video in 720p from
decklink card using Windows 7 - Stack Overflow. [Online]. Available:
http://stackoverflow.com/questions/19212047/ffmpeg-command-line-for-capturing-
and-recording-audio-and-video-in-720p-from-d. [Accessed: 23-Dec-2016].
[17] ffmpeg Documentation. [Online]. Available: https://ffmpeg.org/ffmpeg.html.
[Accessed: 23-Dec-2016].

[26]
Sistema de vigilncia | 1130425-1130627

[18] The case statement - Linux Shell Scripting Tutorial - A Beginners handbook. [Online].
Available: https://bash.cyberciti.biz/guide/The_case_statement. [Accessed: 17-Dec-
2016].
[19] StreamingGuide FFmpeg. [Online]. Available:
https://trac.ffmpeg.org/wiki/StreamingGuide. [Accessed: 23-Dec-2016].
[20] C Command Line Arguments. [Online]. Available:
https://www.tutorialspoint.com/cprogramming/c_command_line_arguments.htm.
[Accessed: 20-Dec-2016].
[21] [FFmpeg-user] Capture Video from Decklink Video Render. [Online]. Available:
https://ffmpeg.org/pipermail/ffmpeg-user/2012-December/012048.html. [Accessed:
23-Dec-2016].

[27]

Você também pode gostar