PONTIFÍCIA UNIVERSIDADE CATÓLICA DO PARANÁ – PUCPR
CENTRO DE CIÊNCIAS EXATAS E DE TECNOLOGIA
DEPARTAMENTO DE ENGENHARIA ELÉTRICA
ALEXANDRE FOLLADOR GUEDES
FRANCISCO SIMONATTO LOCATELLI
MONITORAMENTO REMOTO DE IMAGENS COM ADAPTAÇÃO DINÂMICA
DE LARGURA DE BANDA
CURITIBA
2011
ALEXANDRE FOLLADOR GUEDES
FRANCISCO SIMONATTO LOCATELLI
MONITORAMENTO REMOTO DE IMAGENS COM ADAPTAÇÃO DINÂMICA
DE LARGURA DE BANDA
Trabalho
de
conclusão
de
curso
apresentado ao curso de graduação em
engenharia
elétrica,
da
Pontifícia
Universidade Católica do Paraná, como
requisito à obtenção do titulo de
engenheiro eletricista.
Orientador: Prof. Marcelo Eduardo Pellenz
CURITIBA
2011
ALEXANDRE FOLLADOR GUEDES
FRANCISCO SIMONATTO LOCATELLI
MONITORAMENTO REMOTO DE IMAGENS COM ADAPTAÇÃO DINÂMICA
DE LARGURA DE BANDA
Trabalho de Conclusão de Curso apresentado ao Curso de Graduação em
Engenharia Elétrica, da Pontifícia Universidade Católica do Paraná, como
requisito à obtenção do título de Engenheiro Eletricista.
COMISSÃO EXAMINADORA
_____________________________________
Prof. Dr. James Baraniuk
Pontifícia Universidade Católica do Paraná
_____________________________________
Prof. Dr. Marcelo Eduardo Pellenz
Pontifícia Universidade Católica do Paraná
_____________________________________
Profa. Msc. Maria Gertrudes Te Vaarwerk
Pontifícia Universidade Católica do Paraná
Curitiba, 06 de Dezembro de 2011.
1
RESUMO
Os sistemas atuais de monitoramento remoto de imagens de vigilância
patrimonial despendem grande quantidade do tráfego e das memórias de
armazenamento para transmitir e salvar imagens redundantes. Apesar de
existirem vários métodos de compressão de vídeo implementados, há
necessidade de reduzir a quantidade de informação desnecessária trafegando
na rede, pois as conexões domésticas são idealizadas para tráfego em rajadas,
ao passo que estes sistemas utilizam tráfego praticamente constante. Este
projeto de conclusão de curso tem como objetivo apresentar uma solução para
este cenário. Utilizando técnicas de processamento de imagens, esse projeto
tem como finalidade desenvolver um sistema autônomo de vigilância
patrimonial capaz de adaptar a largura de banda consumida baseado em
detecção de movimento.
Palavras-chave:
Monitoramento Remoto. Tráfego. Largura de Banda.
Processamento de Imagens. Detecção de Movimento.
2
ABSTRACT
The current patrimonial security remote image monitoring systems spend the
greatest part of traffic and storage memory to save and transmit redundant
images. Despite having several video compression methods implemented, it is
necessary to reduce the amount of unnecessary information that travels through
network, since the domestic internet connections are designed for bursty traffic,
whereas these systems make use of barely constant traffic. This final project
aims to provide a solution for this event. By making use of image processing
techniques, this project intends to develop an autonomous patrimonial vigilance
system able to adapt the consumed bandwidth based in motion detection.
Keywords: Remote Monitoring. Traffic. Bandwidth. Image Processing. Motion
Detection.
3
LISTA DE ABREVEATURAS E SIGLAS
IP
– Internet Protocol.
HTML
– HyperText Markup Language.
JPEG
– Join t Photographic Experts Group.
MJPEG
– Motion Joint Photographic Experts Group.
CFTV
– Circuito Fechado de Televisão.
RIMS
– Remote Image Monitoring System.
VGA
– Video Graphics Array.
LAN
– Local Arena Network.
USB
– Universal Serial Bus.
RGB
– Formato de imagem sem compressão que utiliza informações
de crominância para compor o quadro (Red Green Blue).
YUV
– Formato de imagem codificado com perdas que utiliza
informações de luminância e crominância para compor o quadro.
RAM
– Random Acess Memory.
BIOS
– Basic Input/Output System.
TCP
– Transmission Control Protocol.
DVR
– Digital Video Recorder.
LED
– Light Emittin Diode.
GPIO
– General Purpose Input/Output.
ADC
– Analog to Digital Converter.
EEPROM
– Eletrically-Erasable Programmable Read-Only Memory.
SCCB
– Serial Camera Control Bus.
PNG
– Portable Network Graphics.
4
GIF
– Graphics Interchange Format.
TIFF
– Tagged Image File Format.
DIB
– Device Independent Bitmap.
JFIF
– JPEG File Interchange Format.
5
LISTA DE SÍMBOLOS
kbps -
Kilo bits por segundo.
Mbps -
Mega bits por segundo.
kB
-
Kilo Bytes.
MB
-
Mega Bytes.
GB
-
Giga Bytes.
MHz
-
Mega Hertz.
”
-
Polegada.
Mp
-
Mega Píxel.
6
Sumário
RESUMO ........................................................................................................................................ 1
ABSTRACT ...................................................................................................................................... 2
LISTA DE ABREVEATURAS E SIGLAS ............................................................................................... 3
LISTA DE SÍMBOLOS....................................................................................................................... 5
ÍNCICE DE ILUSTRAÇÕES ..................................................................................................... 8
1.
INTRODUÇÃO .................................................................................................................... 9
2.
DETALHAMENTO DO PROBLEMA............................................................................. 10
2.1.
3.
ANÁLISE DAS SOLUCÕES EXISTENTES ........................................................ 10
FUNDAMENTAÇÃO TEÓRICA ..................................................................................... 11
3.1.
PROCESSAMENTO DE IMAGENS ...................................................................... 11
3.1.1.
COMPRESSÃO .................................................................................................... 11
3.1.2.
QUANTIZAÇÃO ................................................................................................... 12
3.2.
RGB ............................................................................................................................ 13
3.2.1.
3.3.
YUV............................................................................................................................. 15
3.3.1.
3.3.
YUV 420.............................................................................................................. 15
JPEG .......................................................................................................................... 16
3.3.1.
DCT ..................................................................................................................... 17
3.3.2.
QUANTIZAÇÃO ................................................................................................ 17
3.3.3.
ORDENAÇÃO ZIG-ZAG .................................................................................. 18
3.3.4.
CODIFICAÇÃO POR ENTROPIA .................................................................. 18
3.4.
4.
RGB 555 ............................................................................................................. 14
MJPEG ....................................................................................................................... 18
DETALHAMENTO DO PROJETO ................................................................................ 20
4.1.
TECNOLOGIAS UTILIZADAS ............................................................................... 20
4.1.1.
MÓDULO FRIENDLYARM MINI 2440 .......................................................... 20
4.1.2.
MÓDULO DE CAPTURA DE IMAGEM ........................................................ 23
4.2.
AQUISIÇÃO DE IMAGEM ...................................................................................... 27
4.2.1.
CONFIGURAÇÃO DA CÂMARA ................................................................... 27
4.2.2.
FORMAÇÃO DO VETOR IMAGEM ............................................................... 28
4.2.3.
DISPONIBILIZAÇÃO DA IMAGEM ............................................................... 28
4.3.
DETECÇÃO DE MOVIMENTO .............................................................................. 29
4.3.1.
THRESHOLD ..................................................................................................... 29
7
4.3.2.
4.4.
5.
ATUAÇÃO DO DETECTOR DE MOVIMENTO ........................................... 31
COMPRESSÃO DE IMAGEM ................................................................................ 31
4.4.1.
CONVERSÃO RGB – YUV ............................................................................. 32
4.4.2.
COMPRESSÃO JPEG ..................................................................................... 33
4.4.3.
RESULTADO DA COMPRESSÃO ................................................................ 34
4.5.
TRANSMISSÃO DE DADOS ................................................................................. 35
4.6.
FUNCIONAMENTO BÁSICO DO SISTEMA ....................................................... 36
PROCEDIMENTO DE TESTES E VALIDAÇÃO......................................................... 37
5.1.
Cenário 1................................................................................................................... 38
5.2.
Cenário 2................................................................................................................... 40
5.3.
Cenário 3................................................................................................................... 41
5.4.
Cenário 4................................................................................................................... 42
5.5.
Comparativo ............................................................................................................ 43
6.
CONCLUSÃO ................................................................................................................... 44
7.
REFERÊNCIAS ................................................................................................................ 45
ANEXO A – GUIA PASSO A PASSO DE DESENVOLVIMENTO DO SISTEMA ........ 46
8
ÍNCICE DE ILUSTRAÇÕES
Figura 1 – Representação cartesiana do modelo RGB...................................................... 13
Figura 2 – Valores RGB referentes a um pixel. ................................................................... 14
Figura 3 – Diagrama em blocos de um sistema JPEG. ..................................................... 16
Figura 4 – Diagrama em blocos simplificado do sistema. .................................................. 20
Figura 5 – Kit de desenvolvimento FriendlyArm mini 2440. .............................................. 23
Figura 6 – Módulo de captura de imagem CAM130. .......................................................... 24
Figura 7 – Diagrama em blocos funcional do CAM130. ..................................................... 25
Figura 8 – Diagrama temporal de saída de dado da câmara. ........................................... 25
Figura 9 – Diagrama temporal de saída RGB555 do CAM130. ........................................ 26
Figura 10 – Processo de montagem do vetor de diferenças. ............................................ 29
Figura 11 – Equações da Transformada Discreta de Cossenos. ..................................... 33
Figura 12 – Fluxograma de funcionamento do sistema. .................................................... 36
Figura 13 – Tráfego com detecção de movimento para imagem estática. ..................... 38
Figura 14 – Imagem do cenário de testes. ........................................................................... 39
Figura 15 – Teste com movimento e estático variando de 10 em 10 segundos. ........... 40
Figura 16 – Teste com movimento e estático variando de 20 em 20 segundos. ........... 41
Figura 17 - Teste com movimento e estático variando de 30 em 30 segundos. ............ 42
Figura 18 – Comparativo entre os cenários. ........................................................................ 43
9
1. INTRODUÇÃO
A segurança de um patrimônio é sempre algo desejável. Para que seja
feita de forma eficaz, novas tecnologias vêm surgindo em um ritmo bastante
acelerado. Projetos para diversos fins, desde a proteção de um bem, como é o
caso de sistemas de alarme, até a observação remota de um local ou área,
podem ser feitos por meio de circuitos fechados de televisão (CFTV).
Acompanhar o avanço tecnológico e fazer com que novos produtos
estejam acessíveis ao usuário final não é simples. Dessa forma foi proposta
uma maneira de agregar tecnologia e novas soluções para o monitoramento de
imagens. As câmaras IP, como são conhecidas, estão tendo uma procura cada
vez maior para novos projetos de CFTV. Porém, as soluções usuais de
câmaras IP despendem boa parte da largura de banda disponível para o
usuário doméstico na tarefa de transmitir o stream de vídeo. Sendo assim,
propõe-se a criação de um módulo capaz de disponibilizar imagens via rede IP,
disponibilizando tais imagens sempre que houver uma conexão requisitando e
economizando largura de banda quando possível.
Este documento tem como objetivo demonstrar o uso de sistemas de
otimização de largura de banda baseada em detecção de movimento no
monitoramento remoto de imagens com a finalidade de segurança patrimonial.
Ao longo do capítulo 2 é feito o detalhamento do problema e uma
abordagem sobre as soluções existentes atualmente. A fundamentação teórica
essencial para o correto entendimento dos assuntos abordados neste
documento pode ser encontrada no capítulo 3. No capítulo 4 é apresentado o
detalhamento do projeto com suas principais características. O capítulo 5 traz
os procedimentos de teste e validação do projeto juntamente com seus
resultados finais. Finalmente, no capítulo 6, será apresentada a conclusão
deste documento.
10
2. DETALHAMENTO DO PROBLEMA
Um sistema de monitoramento remoto de imagens é uma estrutura
responsável por fornecer ao usuário ou operador de segurança imagens em
tempo real do patrimônio observado, distante do local em questão. Estes
sistemas utilizam conexão com a internet para realizar a transmissão das
imagens capturadas, portanto, há uma demanda crescente por evoluções
tecnológicas na área visando tornar essas tecnologias mais eficientes na
utilização da banda do usuário, visto que as conexões domésticas possuem
baixas taxas de upload. Note que os preços praticados pelas operadoras de
telecomunicações baseiam-se em uma quantidade média de tráfego por
usuário, em rajadas – picos de utilização da banda contratada –, ao longo do
dia com períodos de maior ocupação, gerando ganho estatístico para a
operadora.
2.1. ANÁLISE DAS SOLUCÕES EXISTENTES
Com a disponibilização pelas empresas de telecomunicações de
acessos cada vez mais rápidos à internet, a utilização de tecnologias utilizando
redes de dados em um projeto de CFTV é algo que deve se tornar mais comum
ao longo dos próximos anos. Hoje já é possível encontrar inúmeras soluções
de câmaras IP fabricadas pelos principais fabricantes de eletrônicos mundiais.
As diferenças entre os produtos estão na quantidade de recursos utilizados.
Entre os principais recursos dos equipamentos estão: resolução; taxa de
amostragem; capacidade para integrar vários dispositivos de imagem em um
mesmo módulo; qualidade da lente e disponibilidade de um endereço de DNS
dinâmico, evitando que o usuário tenha que arcar com os custos de possuir um
endereço de IP público fixo.
11
3. FUNDAMENTAÇÃO TEÓRICA
No âmbito do monitoramento remoto de imagens, muito se têm discutido
sobre padrões de compressão temporal, tal como MPEG, H.264, entre outros.
Porém, a maioria dos sistemas de compressão temporal é impraticável em
hardwares embarcados, pois exigem recursos de processamento muito
superiores ao exigido pelo padrão MJPEG1.
3.1. PROCESSAMENTO DE IMAGENS
Segundo Gonzalez
2
, as principais motivações que despertaram
interesse em processamento de imagens foram a melhoria de informação
visual para interpretação humana e o processamento de dados para percepção
de dados por sistemas automáticos. Neste estudo, ambas são consideradas
para obter resultados satisfatórios ao usuário do sistema e para garantir uma
estrutura com aproveitamento dinâmico de consumo de banda de transmissão.
3.1.1. COMPRESSÃO
Um dos principais desafios do processamento de imagens é o grande
volume de dados a serem processados e transmitidos. Desta forma, algumas
atitudes devem ser tomadas de modo a tornar os sistemas viáveis sob todos os
pontos de vista. Como consta em Marques Filho 3 , o termo compressão de
dados representa o processo de reduzir a quantidade de dados necessária
para recompor uma determinada informação. Os métodos de compressão com
perdas consistem em diminuir o tamanho em disco de uma imagem retirando
1
SPIELFOGEL, Jason. Why we like MJPEG compression. Jan, 2011.
GONZALEZ, Rafael; WOODS, Richard. Processamento de Imagens Digitais. 1. ed. São Paulo: Edgard
Blücher LTDA, 2000, p. 1.
3
MARQUES FILHO, Ogê; VIEIRA NETO, Hugo. Processamento Digital de Imagens. 1. ed. Rio de Janeiro:
Brasport, 1999, p. 167.
2
12
informações dessa efetuando uma relação entre redução do tamanho e
qualidade da imagem final. Entre os principais métodos de compressão com
perdas podemos citar PNG; GIF; TIFF; DIB; JFIF e JPEG. Existem formas de
realizar compressão sem perdas, ou o que alguns autores chamam de
compactação. A forma de compressão sem perdas mais popular e eficaz
chama-se Código de Huffman e consiste em codificar trechos de código binário
de acordo com as suas probabilidades de ocorrência. Sua principal
desvantagem é a necessidade de se armazenar e transmitir as tabelas de
símbolos e probabilidades com os dados codificados. Outra grande
desvantagem do Código de Huffman é a dificuldade computacional gerada
quando o número de símbolos a serem codificados é muito grande. Para
abster-se desse empecilho, pode-se utilizar o Código de Huffman Truncado
que consiste em codificar apenas um número de símbolos mais prováveis que
pode ser ajustado de acordo com a capacidade de processamento do sistema.
3.1.2. QUANTIZAÇÃO
Quantização consiste em reduzir os dados de uma determinada imagem
removendo detalhes finos da imagem mapeando grupos de informações e
atribuindo valores iguais para grupos com diferenças pequenas entre si, de
acordo com um valor limiar previamente definido.
13
3.2. RGB
RGB é a abreviatura em inglês para um formato de imagens sem perdas
onde cada pixel é representado por três informações de crominância: Red
(Vermelho); Green (verde); Blue (azul). Esse é um modelo aditivo de cores no
qual as três componentes são combinadas para formar diferentes cores do
espectro. Esta representação pode ser demonstrada por um cubo em um
sistema de coordenadas cartesianas onde três de seus vértices correspondem
às cores primárias do formato, os três vértices opostos ilustram as cores
secundárias, o preto é mostrado junto à origem e em seu vértice oposto está a
representação do branco, formando entre esses dois pontos uma reta
representando a escala de cinza, como pode ser visto na figura 1.
Figura 1 – Representação cartesiana do modelo RGB.
Fonte: Marques Filho, 1999.
14
3.2.1. RGB 555
O RGB555 é um formato de cores de 16 bits onde cada pixel é
representado por dois bytes. O nome 555 deriva do número de bits utilizado
para representar cada uma das três cores. Neste caso, são utilizados 5 bits
para cada cor. Como pode ser visto na figura 2, o bit mais significativo não é
utilizado neste formato, os 5 bits seguintes são ocupados pela informação da
cor vermelha, os próximos 5 bits (os dois menos significativos do primeiro byte
e os três mais significativos do segundo byte) guardam a informação da cor
verde, e os 5 bits menos significativos da palavra recebem a informação da cor
azul.
Figura 2 – Valores RGB referentes a um pixel.
Fonte: Elaboração própria.
15
3.3. YUV
O modelo de representação de imagem com perdas YUV considera as
limitações do olho humano referentes à capacidade de distinguir pequenas
diferenças de crominância. Os componentes da imagem são inicialmente
separados em luminância e crominância para que se possa fazer subamostragem apenas na componente de cor. Os valores de YUV podem ser
calculados utilizando o sinal RGB desta forma:
= 0,299 + 0,587 + 0,114
= −0,147 − 0,289 + 0,436
= 0,615 − 0,515 − 0,100
Estas equações devem ser reduzidas às suas formas mais simples –
conforme mostrado abaixo – quando forem inseridas em sistemas
computacionais a fim de minimizar a quantidade de processamento
utilizada.
= 0,299 + 0,587 + 0,114
= 0,492 − = 0,877 − 3.3.1. YUV 420
Neste formato, cada grupo quadrado de quatro pixels é codificado por
quatro informações de luminância (uma para cada pixel) e duas informações de
crominância. Assim, cada grupo de quatro pixels é representado por 4 bytes de
luminância (Y) e 2 bytes de crominância (U e V), totalizando 6 bytes para cada
4 pixels, gerando uma média de 1,5 byte por pixel, exatamente a metade da
quantidade de informação necessária no sistema RGB. As informações Y, U e
V devem ser armazenadas em forma de vetor. O vetor YUV420 é iniciado por
todos os valores de Y em sequência, seguidos dos valores de U e, por fim, dos
valores de V, todos em ordem crescente de índice. Apesar de dificultar a
16
criação de rotinas de leitura, a forma vetorizada é mais eficiente que a forma
matricial do ponto de vista do acesso à memória.
3.3. JPEG
Este formato de compressão foi desenvolvido para obter resultados
ótimos em imagens naturais semi-contínuas, sem bordas com grandes
diferenças de contraste ou cor. Apesar de existirem versões dessa compressão
sem perdas, o JPEG é, fundamentalmente, uma compressão com perdas
baseado na DCT (Transformada Discreta de Cossenos). Essa técnica explora
as limitações fisiológicas do olho humano, principalmente o fato de as
variações de cor serem menos perceptíveis que as variações de brilho. 4 A
figura 3 ilustra um diagrama em blocos de um sistema de codificação e
decodificação JPEG.
Figura 3 – Diagrama em blocos de um sistema JPEG.
Fonte: Marques Filho, 1999.
4
MARQUES FILHO, Ogê; VIEIRA NETO, Hugo. Processamento Digital de Imagens. 1. ed. Rio de Janeiro:
Brasport, 1999, p. 167.
17
3.3.1. DCT
A DCT (Transformada Discreta de Cossenos) recebe matrizes de 8x8
pixels em formato YUV (Luminância separada da Crominância) e codificará
esses dados de modo a transferi-los do domínio espacial para o domínio de
frequências. Como resultado dessa operação, vários coeficientes terão valores
muito próximos de zero e, posteriormente, serão descartados. Para fins
comparativos, a FFT (Transformada Rápida de Fourrier) possui igual
capacidade de compactação, porém, sua transformada inversa distorce mais
coeficientes que a DCT. Ao final dessa Transformada teremos um componente
DC (Corrente Contínua) e 63 componentes AC (Corrente Alternada) para cada
matriz 8x8, onde o componente DC representa o valor médio de crominância
da matriz, enquanto os componentes AC representam as variações em relação
à este componente DC ao longo da matriz.
3.3.2. QUANTIZAÇÃO
Após a aplicação da DCT, é necessário aproximar ainda mais os valores
dos coeficientes de zero. Neste momento, a matriz originada pela DCT é
dividida pela matriz de quantização, reduzindo ainda mais a magnitude dos
valores dos coeficientes e forçando a aproximarem-se de zero.
18
3.3.3. ORDENAÇÃO ZIG-ZAG
Os 63 componentes AC da matriz de valores são lidos em zig-zag da
esquerda para a direita, de cima para baixo. Assim, os coeficientes de baixa
frequência são armazenados antes dos coeficientes de altas frequências, pois
esses coeficientes de baixa frequência têm menos incidência de valores
próximos de zero. Os valores DC são codificados separadamente através de
técnicas preditivas, pois estes possuem alta correlação com os outros
componentes DC das matrizes adjacentes.
3.3.4. CODIFICAÇÃO POR ENTROPIA
Apesar de não ser mandatório, o algoritmo utilizado normalmente para
essa codificação é o algoritmo de Huffman. Essa codificação não introduz
perdas nos dados, pois apenas atribui códigos para símbolos binários com
grande probabilidade de ocorrência. Quanto maior a ocorrência do símbolo,
menor será o código que o representa. Desta forma, o volume de dados é
diminuído sem que perdas sejam introduzidas.
3.4. MJPEG
O método de compressão MJPEG consiste em um formato de vídeo
onde
cada
imagem é,
individualmente, comprimida em
JPEG
para,
posteriormente, serem organizadas formando uma sequência de imagens,
caracterizando um vídeo. Sua principal vantagem é necessitar baixas
capacidades de processamento em relação aos padrões de compressão
temporais. Por essa característica, esta modulação é amplamente empregada
em dispositivos móveis e em sistemas embarcados. Lamentavelmente, por não
19
haver um padrão estabelecido, o MJPEG foi implementado de formas
diferentes por cada fabricante.
20
4. DETALHAMENTO DO PROJETO
Conforme discutido anteriormente, o sistema desenvolvido deve realizar
a transmissão de imagens de monitoramento com largura de banda adaptativa.
O sistema foi concebido com etapas independentes que realizam suas tarefas
paralelamente às outras, otimizando o consumo de tempo dos processos. O
sistema faz uso de threads e semáforos para garantir solidez no
funcionamento.
Figura 4 – Diagrama em blocos simplificado do sistema.
Fonte: Elaboração Própria.
4.1. TECNOLOGIAS UTILIZADAS
4.1.1. MÓDULO FRIENDLYARM MINI 2440
O módulo adquirido para captura de vídeo, processamento de imagem e
interface é o FriendlyArm mini 2440. Esse foi definido após pesquisa e
comparação com outras soluções existentes. Pelo fato de possuir todas as
interfaces necessárias para a execução do projeto, incluindo uma interface
para uma câmara de captura de vídeo e capacidade de processamento para
21
implementar compressão, mostrou-se a solução que melhor atende aos
requisitos impostos.
Outro fator decisivo para a aceitação do módulo foi a garantia de taxa de
transferência efetiva (throughput) da interface ethernet, pois caso a taxa não
atenda aos mínimos requisitos ocorrerá atraso na transferência dos quadros de
vídeo e perda de pacotes. A perda contínua de quadros pode acarretar em um
mau serviço ofertado.
A configuração do kit também foi fator influente na escolha. Esse é
equipado com:
CPU
• Samsung S3C2440A (ARM920T), 400MHz, max. 533Mhz.
RAM
• 64MByte SDRAM;
• Barramento de 32bit;
• 100MHz Clock.
Flash
• 64MByte or 128MByte Nand Flash;
• 2MB Nor Flash com Bios.
Clock do sistema
• Cristal de 12Mhz;
LCD
• Interface touch screen resistiva de quatro fios;
• STN-Displays;
• Suporte à displays 4bit dual scan, 4bit single scan ou 8bit single scan;
• Monocromáticos, 4 níveis de cinza, 16 níveis de cinza, 256 cores ou
4096 cores;
• Resolução máxima: 1024x768 pixels;
• Display TFT LCD.
Interfaces e recursos
• 1 10/100M Ethernet RJ-45 (DM9000);
• 3 portas seriais (1 RS232);
• 1 USB Host;
• 1 USB Device;
• 1 Interface para cartões SD;
22
• 1 Saída de áudio;
• 1 Entrada de áudio;
• 1 Microfone;
• 4 LEDs;
• 6 Botões programáveis;
• 1 PWM Buzzer;
• 1 Potenciômetro (para testes do ADC);
• 1 EEPROM I2C;
• 1 Real Time Clock com bateria (RTC);
• 1 Interface de 20 pinos para câmara (2.0mm).
Tensão de alimentação
• 5V.
Dimensão
• 10 x 10 cm.
Suporte aos seguintes sistemas operacionais
• Linux 2.6;
• Android;
• Windows CE 5 e 6.
A escolha do Linux como sistema operacional embarcado para a solução
proposta auxiliou no desenvolvimento, visto que esse já possui implementadas
algumas funcionalidades como pilha TCP e comunicação facilitada com
interfaces dedicadas. Outra razão pela escolha deste sistema operacional é a
grande quantidade de literatura disponível e a comunidade mundial de
desenvolvedores em sistemas Open Source. A figura 5 apresenta o kit de
desenvolvimento FriendlyArm mini 2440.
23
Figura 5 – Kit de desenvolvimento FriendlyArm mini 2440.
Fonte: Thai Easy Elec, 2011.
4.1.2. MÓDULO DE CAPTURA DE IMAGEM
O módulo utilizado é o CAM130. Com capacidade para capturar imagens
com uma resolução de até 1,3Mp e instalada em uma placa de circuito
impresso, este recurso possui interface própria para comunicar-se com o Kit
FriendlyArm 2440, facilitando a execução do projeto. Equipado com a câmara
OV9650 do fabricante OmniVision, este equipamento fornece imagens no
formato RGB555. As descrições dos formatos de imagem e métodos utilizados
foram feitas no capítulo 3.
24
Figura 6 – Módulo de captura de imagem CAM130.
Fonte: Elaboração Própria
A programação inicial da câmara é feita através de interface SCCB.
Através dela são configurados os registradores de acordo com as
especificações da imagem que se deseja obter. A figura 7 é referente ao
diagrama em blocos da câmara.
A imagem é fornecida através dos pinos indicados como D[9:0]. Através
dos sinais HREF, PCLK e VSYNC a câmara fornece informações de referência
horizontal, início e fim de pixel e sincronização vertical, respectivamente, para
que o quadro possa ser corretamente montado.
25
Figura 7 – Diagrama em blocos funcional do CAM130.
Fonte: Arm9 Board, 2005.
Para cada início de imagem, o sinal VSYNC é fornecido como 1, sendo
em seguida informado como 0. Com o término da transmissão, o sinal sofre a
mesma alteração, indicando o início da transmissão de um novo quadro.
Figura 8 – Diagrama temporal de saída de dado da câmara.
Fonte: Arm9 Board, 2005
26
Por padrão, o sinal HREF é mantido em 0. Para cara início de linha,
esse é informado como 1, sendo forçado em 0 após o término.
A figura 9 é referente à saída dos dados em RGB. O dado fornecido
segue o padrão informado anteriormente.
Figura 9 – Diagrama temporal de saída RGB555 do CAM130.
Fonte: Arm9 Board, 2005
27
4.2. AQUISIÇÃO DE IMAGEM
Este processo consiste em receber os dados da imagem atual da
câmara CCD, montar em um vetor e disponibilizá-lo para que possa ser
processado, comprimido e transmitido. O procedimento de aquisição de
imagem é autônomo e ocorre de forma independente do restante dos
processos. A única interação entre esta etapa e as posteriores é disponibilizar
o vetor de dados da imagem sempre que essa seja atualizada pela câmara.
4.2.1. CONFIGURAÇÃO DA CÂMARA
Inicialmente, este sistema configura a câmara modificando valores em
seus registradores para controlar o modo de operação desejado. As demandas
submetidas à câmara são:
- Resolução VGA;
- Controle automático de exposição;
- Controle automático de ganho;
- Balanço automático de branco;
- Calibração automática de nível de preto;
- Formato de saída da imagem RGB555;
- Ordem dos bytes da imagem horizontal de cima para baixo.
28
4.2.2. FORMAÇÃO DO VETOR IMAGEM
Após configurar a câmara de acordo com as necessidades do projeto, o
sistema entra em um laço de repetição em que aguarda o dispositivo informar a
existência de uma nova imagem. O período de transmissão de dados de uma
mesma imagem está delimitado entre dois pulsos na saída VSINC. Os dados
são descarregados durante pulsos periódicos da saída HREF. Neste período a
câmara descarrega os dados da imagem, serialmente, em 480 rajadas
contendo informações de 640 pixels, sendo que de cada pixel possui 16 bits de
informação. Esses dados são armazenados em um vetor local e ocupam
614400 posições de um byte cada.
4.2.3. DISPONIBILIZAÇÃO DA IMAGEM
Nesta etapa, o sistema já possui uma imagem salva localmente. O
passo seguinte é disponibilizar globalmente o vetor da imagem para que outras
partes do sistema possam acessar. Para tal, é utilizado um semáforo, pois é
necessário garantir exclusividade temporal no acesso da variável. A utilização
do semáforo garante um sistema capaz de trabalhar com processos
concorrentes evitando dead locks e condições de corrida. Inicialmente é
verificado se o vetor global está livre. Se não estiver, uma nova imagem é
buscada, pois esta parte do sistema é muito mais rápida que as partes
concorrentes (cerca de 15 repetições por segundo). Se o vetor global estiver
livre, seu acesso por outras partes do código é bloqueado temporariamente, os
dados da última imagem recebida são atualizados nele e uma flag é sinalizada
simbolizando a disponibilidade de um novo frame. Em seguida, o acesso ao
vetor global é liberado novamente e o sistema de aquisição de imagem volta ao
início do processo do laço de repetição e aguarda uma nova imagem ser
disponibilizada pela câmara.
29
4.3. DETECÇÃO DE MOVIMENTO
Esta é a principal etapa do projeto por ser fundamental para que o
objetivo final seja cumprido. Essa parte baseia-se em verificar se houve
movimento entre o quadro atual e o anterior para decidir se o quadro atual será
renovado ou se ele é igual ao que já está sendo mostrado ao usuário. Dessa
forma é possível garantir que o tráfego redundante é evitado e que as imagens
de interesse do usuário serão disponibilizadas normalmente.
O início do funcionamento ocorre a partir do instante em que a segunda
imagem captada estiver acessível e o funcionamento sucede de forma
independente enquanto o sistema estiver operando.
4.3.1. THRESHOLD
Para que pudesse ser definido um limiar para separar movimento de
ruído na imagem, foi necessário encontrar um valor de threshold adequado
para essa aplicação. Para tal, um procedimento de teste se mostrou bastante
eficaz. Inicialmente, foi criado um vetor local auxiliar que recebia os valores
absolutos da subtração entre os valores de luminância Y entre a imagem atual
e a anterior, conforme mostrado na figura 10.
Figura 10 – Processo de montagem do vetor de diferenças.
Fonte: Elaboração própria.
30
Após a criação do vetor de diferenças, foi criada uma função para
imprimir esses valores no terminal. Acompanhando esses valores em cenas
estáticas e com movimento, foi possível verificar que uma pequena parcela dos
pixels difere, em valor decimal, mais de 50 quando não há movimento e que
nos locais onde o movimento ocorre esses valores ultrapassam 50. Assim, foi
definido o valor decimal 50 como o threshold que decide que houve variação no
pixel em questão.
Com o primeiro threshold definido, foi realizada a segunda parte dos
testes, que consistiu em varrer novamente os vetores das imagens anterior e
atual, e imprimir no terminal quantos pixels se diferiam em mais de 50.
Observando novamente o sistema operando e imprimindo a quantidade de
pixels que variava em mais de 50 foi possível concluir que apenas o ruído da
imagem era capaz de alterar o valor de luminância de aproximadamente 40000
pixels em mais de 50. Esse valor de 40000 variava sensivelmente de acordo
com a luminosidade do ambiente, sendo menor em ambientes de boa
luminosidade e alto em ambientes de baixa luminosidade. Inserindo movimento
nas cenas e verificando a resposta da quantidade de pixels que variavam, foi
possível atingir o threshold final de 90000 pixels que variam seus valores de Y
em, ao menos, 50. O valor de 90000 significa que além dos 40000 pixels que
variaram na cena, algum movimento fez com que mais 50000 pixels variassem.
O valor 50000 corresponde a aproximadamente 16% da área da imagem, ou
seja, será considerado movimento no quadro se, e somente se, ao menos essa
fração do quadro sofrer variação.
31
4.3.2. ATUAÇÃO DO DETECTOR DE MOVIMENTO
Sendo capaz de detectar movimento na cena, este processo atua como
fator de decisão para as outras partes do projeto. Após receber uma nova
imagem convertida de RGB555 para YUV420 ele a compara com a imagem
anterior, localizada em um vetor buffer local, e verifica se houve movimento. Se
houve movimento, o sistema atribui valor 1 à flag global que autoriza
compressão para que a imagem seja comprimida, codificada e transmitida ao
usuário. Se não houve movimento, ele verifica se faz mais de 60 frames que o
quadro está estático. Se isso for verdadeiro, o processo dá a ordem para
comprimir e enviar uma nova imagem para que o quadro não fique estático por
mais de 60 tempos de frame. Se não houve movimento nem tampouco faz
mais de 60 quadros que não há uma atualização, o sistema finaliza o laço de
repetição e aguarda a próxima atualização de imagem para repetir o processo.
4.4. COMPRESSÃO DE IMAGEM
Devido à necessidade de disponibilizar uma imagem prévia no formato
YUV420, a compressão é dividida em duas partes. Na primeira etapa, é
realizada a conversão da imagem do formato RGB555 para o formato YUV420.
A segunda parte engloba a conversão da imagem para JPEG e é o último
passo antes de realizar a transmissão ao usuário.
32
4.4.1. CONVERSÃO RGB – YUV
Inicialmente, este processo aguarda até que o valor da flag que sinaliza
um novo frame seja igual a 1. Após essa etapa, o vetor global da imagem é
copiado para um vetor local para que seu acesso seja liberado rapidamente e a
flag que sinaliza que há uma nova imagem RGB disponível é zerada. De posse
a imagem capturada, o vetor de imagem RGB é percorrido enquanto os valores
dos coeficientes Y, U e V são calculados de acordo com as seguintes
equações:
= 0,299 + 0,587 + 0,114
= 0,492 − = 0,877 − Como resultado, é obtido um vetor com coeficientes Y, U e V ordenados
em sequência e com todos os valores completos de crominância. Para a
composição do vetor YUV420, o vetor sequenciado é percorrido, com o auxílio
de um vetor buffer local, e os coeficientes são rearranjados de forma a
obedecer ao padrão do sistema YUV. Após a adequação inicial, o vetor YUV é
percorrido novamente e os coeficientes de crominância são sub-amostrados na
relação de 4:1, ou seja, cada quadrado de 2x2 pixels terá apenas uma
informação de crominância U e uma informação de crominância V. Para
realizar essa sub-amostragem, primeiramente é necessário somar 128 a cada
valor de crominância para que não existam valores negativos. Após as somas,
os valores de U são somados entre cada grupo de quatro pixels e uma média é
retirada como sub-amostragem de cor U. O mesmo ocorre para os valores de
V. Desta forma o vetor está pronto no formado YUV420, pois existe uma
amostra de luminância Y para cada pixel e duas amostras de crominância para
cada grupo de quatro pixels. O vetor local YUV420 é atribuído a um vetor
global e é atribuído o valor 1 ao flag que indica que uma nova imagem do tipo
YUV está disponível. Desta forma, o sistema de detecção de movimento irá
buscar a imagem nova para poder comparar com a anterior.
33
4.4.2. COMPRESSÃO JPEG
Esta etapa do sistema ocorrerá após a parte de detecção de movimento
atribuir valor 1 à flag que autoriza que a imagem seja comprimida. O
compressor irá copiar o conteúdo do vetor global com a imagem YUV420 para
um vetor local para que possa ser realizada a compressão.
4.4.2.1.
DCT
Para que a transformada discreta de cossenos seja feita, a imagem é
dividida em blocos de 8x8 pixels para facilitar o processamento e produzir
melhores resultados. A DCT irá deslocar os valores dos coeficientes do
domínio do tempo para o domínio da frequência de acordo com a equação
mostrada na figura 11.
Figura 11 – Equações da Transformada Discreta de Cossenos.
Fonte: Marques Filho, 1999.
Como resultado dessas operações, os componentes mais significativos
para a formação da imagem são dispostos no início do vetor, sendo que o
primeiro valor é chamado de componente DC e possui grande parte da
informação relevante para a imagem. Após a DCT, os resultados são entregues
ao quantizador.
34
4.4.2.2.
QUANTIZAÇÃO
Nesse processo, os coeficientes da imagem são divididos pela matriz
(vetor) de quantização do JPEG, forçando os termos a adquirirem valores ainda
mais próximos de zero, para que possam ser eliminados posteriormente.
4.4.2.3.
ORDENAÇÃO ZIG-ZAG
Os coeficientes dos vetores quantizados são rearranjados como se
tivessem sido alocados em uma matriz e lidos em zig-zag. Dessa forma, é
garantido que os valores maiores e mais significativos fiquem agrupados no
início do vetor e que os valores próximos e iguais a zero fiquem na parte final
para que o codificador por entropia possa ser mais efetivo.
4.4.2.4.
CODIFICAÇÃO POR ENTROPIA
Nesta etapa, o codificador de Huffman codifica os coeficientes
resultantes mapeando os símbolos gerados e codificando-os de acordo com a
probabilidade de ocorrência. Quanto maior a probabilidade de ocorrência do
símbolo, menor deve ser o código que o representa.
4.4.3. RESULTADO DA COMPRESSÃO
Ao final do processo de compressão, é entregue como resultado um
arquivo de extensão .jpeg e é atribuído valor 1 à flag que indica ao sistema de
transmissão que há uma imagem nova para ser transmitida.
35
4.5. TRANSMISSÃO DE DADOS
A disponibilização dos dados processados é feita através de interface
web. Esse sistema aguarda o compressor informar que existe uma nova
imagem para ser enviada. O módulo de transmissão entrega para o servidor
httpd (já contido na distribuição Linux utilizada) a imagem comprimida e esse
aguarda a requisição de transmissão, feita através de conexão TCP. Na
camada de aplicação, a imagem é carregada com a utilização da string <img
src="/?action=stream">. Essa string informa ao servidor que a imagem que
deve ser carregada é o stream de JPG. Ao final da transmissão, a flag de nova
imagem do sistema de compressão é zerada e o transmissor retorna ao estado
inicial onde aguarda uma nova imagem.
36
4.6. FUNCIONAMENTO BÁSICO DO SISTEMA
A figura 7 ilustra de forma simplificada o funcionamento de todas as
partes do sistema. Inicialmente são configurados alguns parâmetros de rede e
formato de imagem da câmara. Em seguida, a imagem é recebida da câmara e
entregue para que o compressor realize a conversão para o padrão YUV420. A
imagem convertida é analisada pelo sistema de detecção de movimento. Se
houver movimento ou se a cena permanece estática por mais de 60 frames
(aproximadamente 20 segundos) a imagem é entregue ao compressor para
que esse realize a compressão no formato JPEG. Após a compressão o
sistema atualiza a imagem e a disponibiliza para o usuário.
Figura 12 – Fluxograma de funcionamento do sistema.
Fonte: Elaboração própria.
37
5. PROCEDIMENTO DE TESTES E VALIDAÇÃO
Para os testes definiu-se um cenário onde era provocado movimento na
cena em intervalos periódicos. Inicialmente foi utilizado o streaming contínuo,
sem detecção de movimento, para obter a quantidade total de tráfego em um
intervalo de 10 minutos. A imagem permaneceu estática. O valor médio obtido
da imagem foi de 22870,16 bytes e o tráfego total durante o período proposto
foi de 41166296 bytes, ou 39,259 MB.
Cenário 1
Cenário 2
Cenário 3
Cenário 4
Duração do movimento
0 segundos
10 segundos
20 segundos
30 segundos
Tempo de pausa
10 minutos
10 segundos
20 segundos
30 segundos
Tabela 1 – Resumo dos cenários de testes.
Tempo total
10 minutos
10 minutos
10 minutos
10 minutos
38
5.1. Cenário 1
O segundo experimento foi feito com o algoritmo de detecção de
movimento ativo, porém mantendo a imagem estática. O gráfico mostrado na
figura 13 representa o tráfego durante essa etapa.
Taxa de transmissão(bytes) x Tempo(s)
25000
20000
15000
Tráfego
10000
5000
1
21
41
61
81
101
121
141
161
181
201
221
241
261
281
301
321
341
361
381
401
421
441
461
481
501
521
541
561
581
0
Figura 13 – Tráfego com detecção de movimento para imagem estática.
Fonte: Elaboração própria.
Conforme citado anteriormente, é feita a atualização da imagem estática
amostrada a cada 20 segundos. Desta forma, obtiveram-se 31 imagens no
intervalo de 10 minutos. O valor médio obtido das imagens foi de 22731,55
bytes e o tráfego total foi de 704678 bytes, ou 688,162 kB, sendo observada
uma diferença considerável no consumo da banda.
39
Figura 14 – Imagem do cenário de testes.
Fonte: Elaboração própria.
Na figura 14 pode-se observar uma imagem estática do cenário de
testes retirada durante um dos testes. O movimento é provocado por uma
locomotiva em escala de um ferrorama. Para facilitar as medidas corretas de
tempo, em cada uma das extremidades dos trilhos que aparecem na figuras 14
foram inseridos trilhos reversores de movimento, tornando o movimento fluido e
contínuo durante o tempo necessário. Para evitar interferências externas
durante os testes, esses foram realizados no período da noite, em um ambiente
fechado apenas com iluminação artificial constante.
40
5.2. Cenário 2
No próximo cenário de teste, provocou-se movimento na cena durante
dez segundos, permanecendo, em seguida, estática por outros dez, durante
dez minutos. O gráfico da figura 15 representa o tráfego em função do tempo.
Taxa de transmissão(bytes) x Tempo(s)
80000
70000
60000
50000
40000
Tráfego
30000
20000
10000
1
21
41
61
81
101
121
141
161
181
201
221
241
261
281
301
321
341
361
381
401
421
441
461
481
501
521
541
561
581
0
Figura 15 – Teste com movimento e estático variando de 10 em 10 segundos.
Fonte: Elaboração própria.
Essas alterações geraram uma taxa média de trinta frames. A média das
imagens com movimento foi de 22972,33 bytes. A quantidade média de tráfego
gerado por movimento foi de 688930,35 bytes e o tráfego total foi de 20675100
bytes, ou 19,717 MB em 10 minutos.
41
5.3. Cenário 3
O cenário seguinte foi composto por movimentos durante vinte segundos
seguidos de outros vinte de imagem estática, durante um período de 10
minutos. A taxa média de imagens geradas durante o movimento foi de 60
frames, e a média do tamanho das mesmas foi de 22895,92 bytes. A
quantidade média de tráfego gerado por movimento foi de 1405631,62 bytes e
o tráfego total foi de 20939628 bytes, ou 19,969 MB em 10 minutos e pode ser
observada no gráfico na figura 10.
Taxa de transmissão(bytes) x Tempo(s)
80000
70000
60000
50000
40000
Tráfego
30000
20000
10000
1
29
57
85
113
141
169
197
225
253
281
309
337
365
393
421
449
477
505
533
561
589
0
Figura 16 – Teste com movimento e estático variando de 20 em 20 segundos.
Fonte: Elaboração própria.
42
5.4. Cenário 4
Por fim, gerou-se movimento durante trinta segundos, mantendo a cena
estática por outros trinta, durante dez minutos. As cenas com movimento
tiveram, em média, 90 frames com tamanho médio de 22905,82 bytes. O
tráfego médio observado por movimento foi de 2074426,45 bytes e o tráfego
total foi de 21073171 bytes, ou 20,097 MB. O gráfico mostrado na figura 11 é
referente ao tráfego observado em 10 minutos.
Taxa de transmissão(bytes) x Tempo(s)
80000
70000
60000
50000
40000
Tráfego
30000
20000
10000
1
31
61
91
121
151
181
211
241
271
301
331
361
391
421
451
481
511
541
571
601
631
0
Figura 17 - Teste com movimento e estático variando de 30 em 30 segundos.
Fonte: Elaboração própria.
É importante ressaltar que os picos observados durante o período de
imagem estática ocorrem devido a atualização periódica (20 segundos) da
imagem mostrada quando não há detecção de movimento.
43
5.5. Comparativo
O cenário ideal desta proposta – vigilância patrimonial - pressupõe
menos ocorrência de movimento que os cenários cinéticos testados nesse
sistema. Para um cenário ideal, supõe-se um volume de tráfego mais próximo
do adquirido no estático. Porém, mesmo para cenários com 50% de
movimento, obtivemos ganho de aproximadamente 50% em efetividade.
O gráfico apresentado informa o valor percentual da banda utilizada em cada
um dos experimentos, tendo como referência o valor total trafegado quando o
algoritmo de detecção de movimento não está ativo.
60,00%
50,22%
50,87%
51,19%
10 segundo
20 segundos
30 segundos
50,00%
40,00%
30,00%
20,00%
10,00%
1,71%
0,00%
Estático
Figura 18 – Comparativo entre os cenários.
Fonte: Elaboração Própria.
44
6. CONCLUSÃO
A proposta do projeto foi criar um sistema de streaming de vídeo que
fosse inteligente do ponto de vista da rede, ou seja, que economizasse a banda
contratada do usuário evitando transmissões de informações redundantes.
Durante o desenvolvimento do projeto algumas formas de atingir o
objetivo proposto foram testadas (redução da imagem, aumento na taxa de
compressão do JPEG), porém mostraram-se inviáveis devido limitação do
hardware utilizado (capacidade de processamento). A solução encontrada, e
que posteriormente mostrou-se bastante eficiente, foi a diminuição da
quantidade de quadros mostrados.
A comparação com os resultados de tráfego obtidos sem o algoritmo
implementado e com a solução proposta indicou um ganho estatístico de banda
de até 98,39% no melhor caso (imagem estática durante todo o tempo) e
48,81% no pior dos casos (perturbações periódicas de 30 segundos e imagem
estática por outros 30), validando o projeto e tendo os resultados obtidos como
satisfatórios.
Em projetos futuros, pode-se utilizar um hardware dedicado ao
processamento de sinais e câmara de melhor qualidade (baixo ruído e maior
velocidade de frames adquiridos), de forma a aprimorar os resultados já
obtidos.
45
7. REFERÊNCIAS
GONZALEZ, Rafael; WOODS, Richard. Processamento de Imagens Digitais.
1. ed. São Paulo: Edgard Blücher LTDA, 2000.
SPIELFOGEL, Jason. Why we like MJPEG compression. Disponível em :
<http://ipsecuritywatch.com/web/online/IPSW-Columns-and-Features/Why-welike-MJPEG-compression/515$14335>. Acesso em: 29 de novembro de 2011.
PONTIFÍCIA UNIVERSIDADE CATÓLICA DO PARANÁ. Sistema Integrado de
Bibliotecas. Manual de normas para trabalhos técnico-científicos: de acordo
com as normas da ABNT. 2010. Disponível em: <www.pucpr.br/biblioteca>.
Acesso em: 3 de dezembro de 2011.
MARQUES FILHO, Ogê; VIEIRA NETO, Hugo. Processamento Digital de
Imagens. 1. ed. Rio de Janeiro: Brasport, 1999.
CHRISTOPOULOS, Charilaos et al. THE JPEG2000 STILL IMAGE CODING
SYSTEM: AN OVERVIEW. IEEE, 2000, 25pp. Disponível em:
<http://pessoal.utfpr.edu.br/hvieir/download/pdi99.pdf>. Acesso em: 29 de
novembro de 2011.
THE JPEG COMMITTEE. Disponível em: <http://www.jpeg.org/>. Acesso em:
29 de novembro de 2011.
46
ANEXO A – GUIA PASSO A PASSO DE DESENVOLVIMENTO DO SISTEMA
Esse guia se propõe a ilustrar de uma forma simplificada as etapas a
serem cumpridas para construção de um sistema de monitoramento de
imagens com detecção de movimento e adaptação dinâmica de largura de
banda, similar ao descrito neste documento. O texto abaixo leva em conta que
o leitor desse documento reproduzirá os procedimentos descritos utilizando
exatamente as mesmas ferramentas de software e hardware para garantir os
mesmos resultados.
Para atingir esses objetivos, os seguintes itens são indispensáveis:
•
Kit FriendlyArm mini2440 com distribuição Linux Qtopia;
•
Câmara modelo CAM130;
•
Compilador
GCC
para
arquitetura
ARM.
(Disponível
em
http://code.google.com/p/princess-alist/downloads/detail?name=armlinux-gcc-4.3.2.tgz&can=2&q=);
•
Computador com SO Linux de qualquer distribuição;
•
Software cliente FTP Filezilla ou similar;
•
Software editor de texto, preferencialmente os que reconhecem
comandos em linguagem C, como o Gedit.
PASSO 1
Baixar e instalar na distribuição linux os softwares Filezilla, Gedit e Arm
Linux GCC. Em caso de dificuldades nesse processo, consultar o site
http://www.vivaolinux.com.br/artigo/Como-instalar-programas-no-Linux.
PASSO 2
Configurar um IP pertencente à rede local do seu computador no kit
FriendlyArm. Esse processo é feito através do software Network Configurations
presente na distribuição Qtopia. Após a configuração, conectar o kit ao roteador
47
através de um cabo UTP padrão crossover e testar a conectividade do PC com
o Kit.
PASSO 3
Para realizar a interface com a câmara, deve ser utilizada a biblioteca
videodev.h (#include <linux/videodev.h>). Essa biblioteca realiza a interface
com o hardware, possibilitando a criação de rotinas de escrita e leitura na
câmara. Desta forma, deve-se configurar os registradores da mesma para que
ela trabalhe de acordo com as necessidades do sistema. O datasheet deve ser
consultado para verificar a configuração mais adequada para cada aplicação.
A imagem capturada deve ser alocada em um vetor global, permitindo
que possa ser acessada - após o término da execução da função - por
qualquer parte do código.
PASSO 4
De posse da imagem, é necessário que uma rotina para detecção de
movimento seja escrita. O trecho de código abaixo é um exemplo de
implementação. Para alterar o threshold basta modificar o valor atribuído às
variáveis mov_threshold e pix_threshold. Os valores deverão ser tão grandes
quanto for baixa a luminosidade do cenário.
//Valor limite de pixels que variaram na cena para considerar movimento
int mov_threshold = 90000;
//Diferença mínima entre 2 píxels de mesma posição para considerar que houve variação no
pixel
int pix_threshold = 50;
//Detector de movimento
for (count = 0; count < size && diff_count < mov_threshold; count++) {
delta_mov =
abs(old_frame[count] - vd->pFramebuffer[count]);
if (delta_mov >= pix_threshold) {
diff_count++;
}
}
48
//Verdadeiro se não houver movimento
if (diff_count != mov_threshold && frames_count < 60) {
frames_count++; //Incrementa o contador de frames estáticos em sequência.
send_frame = 0; //Bloqueia o envio do frame. Um novo frame será aguardado.
}
else{//Verdadeiro se houver movimento ou se frames_count >=60
send_frame = 1; //Permite que o frame atual seja transmitido
frames_count = 0; //Zera o contador de frames estáticos em sequência.
}
//Atribuindo a imagem nova à old_frame para que possa comparar com o frame
seguinte
memcpy((unsigned char *)old_frame,
(unsigned char *)vd->pFramebuffer, vd->framesizeIn);
PASSO 4
Nesta etapa ocorre a compressão da imagem caso tenha sido detectado
movimento. Para tal, existem várias bibliotecas disponíveis e o desenvolvedor
pode escolher a que melhor atenda às necessidades do projeto. Cabe ao
programador realizar as chamadas das funções de forma adequada,
entregando os parâmetros necessários corretamente. Um arquivo no formato
JPEG deverá ser o resultado final da compressão. Posteriormente, este arquivo
será disponibilizado ao servidor HTTPD para que o stream seja realizado.
PASSO 5
Na camada de aplicação, o stream é visualizado utilizando o comando
<img src="/?action=stream">. Trata-se de uma tag HTML que invoca uma
imagem no servidor, nesse caso uma atualização sequente de forma que seja
observada no modelo de um vídeo.
Para acessar a página do stream, basta que o usuário digite o IP
previamente configurado no Kit seguido da porta utilizada e do nome da página
criada. Exemplo: 192.168.0.230:8080/stream.html.
49
PASSO 6
Após a compilação, será criado um arquivo executável. Para transferir o
arquivo ao Kit utiliza-se um cliente FTP como o Filezilla. O arquivo deve ser
colocado em uma pasta de preferência do programador e executado a partir da
mesma no terminal com o comando ./nome_do_arquivo.
PASSO 7
A medição da banda consumida pode ser feita através de aplicativos
diversos. A utilização do Wireshark é recomendada para que sejam observados
o tráfego e sinalização gerados pelo sistema. Em caso de haver necessidade
de troubleshooting, a visualização de um possível erro pode ser feita
facilmente.
Download

pontifícia universidade católica do paraná – pucpr centro de