1
PONTIFÍCIA UNIVERSIDADE CATÓLICA DO RIO GRANDE DO SUL
FACULDADE DE ENGENHARIA
SISTEMA EMBARCADO PARA PROCESSAMENTO DE IMAGENS
COM AQUISIÇÃO DE CARACTERÍSTICAS APLICADA A
AQUICULTURA
Porto Alegre, 06 de dezembro de 2017.
Autor: Guilherme Sehnem Cavalheiro
Pontifícia Universidade Católica do Rio Grande do Sul
Curso de Engenharia Elétrica-Eletrônica
Av. Ipiranga 6681, - Prédio 30 - CEP: 90619-900 - Porto Alegre - RS - Brasil
Email: [email protected]
Orientador: Prof. Anderson Royes Terroso
Pontifícia Universidade Católica do Rio Grande do Sul
Av. Ipiranga 6681, - Prédio 30 - Bloco F - Sala 204 - CEP: 90619-900 - Porto Alegre - RS-
Brasil
Email: [email protected]
2
RESUMO
O estudo do crescimento de peixes passa por medições individuais e regulares para os
mais variados fins da aquicultura, seja na criação ou pesquisa sobre as espécies dos animais.
Propõe-se o desenvolvimento de um protótipo de aquário para peixes com um sistema de
processamento embarcado, com o qual será feita a extração de alguns dados dos animais
como o comprimento de cada peixe, a cor e a quantidade de peixes contidos no aquário,
automatizando a etapa de extração de medidas dos peixes e limitando a manipulação manual
dos mesmos. A extração dos dados será feita a partir de uma câmera conectada ao
microcomputador Raspberry Pi 3, com o qual utilizando Processamento de Imagens em
linguagem Python e com a biblioteca OpenCV, poderemos extrair os dados e apresentá-los
em uma tela com entrada HDMI. Deste modo poderemos facilitar o trabalho de aquisição de
medidas e contagens de peixes, bem como tornar o processo mais rápido e prático.
Palavras-chave: peixes. características. quantificação. câmera. opencv.
3
EMBEDDED SYSTEM FOR IMAGE PROCESSING WITH
ACQUISITION OF CHARACTERISTICS APPLIED TO
AQUACULTURE
ABSTRACT
The study of fish growth involves individual and regular measurements for the most
varied purposes of aquaculture, whether in breeding or research on animal species. It is
proposed the development of a prototype of aquatic basin for fish with an embedded
processing system, with which will be made the extraction of some data of the animals as the
length of each fish, the color and quantity of fish contained in a basin , automating the step of
extracting fish measurements and limiting the manual manipulation of the fish. The data
extraction will be done from a camera connected to the Raspberry Pi 3 microcomputer, with
which using Python Image Processing and the OpenCV library, we can extract the data and
present it on a screen with HDMI input. In this way we can facilitate the work of acquiring
measurements and counts of fish, as well as making the process faster and more practical.
Key-words: fish. measures. quantification. camera. opencv.
4
1 INTRODUÇÃO
A aquicultura no Brasil é um setor que está em expansão. A indústria do peixe
emprega hoje cerca um milhão de pessoas e de acordo com as estatísticas da Organização das
Nações Unidas para Alimentação e Agricultura (FAO), o mercado de aquicultura deve crescer
mais de 100% até o ano de 2025. Com o crescimento desse mercado, torna-se necessário o
emprego de novas tecnologias nessa área.
É de grande interesse para pesquisadores e criadores de peixes a obtenção de dados
quantificativos relacionados aos animais aquáticos. Não foi encontrado no Brasil um sistema
inteligente para monitoramento de um conjunto de peixes capaz de obter dados como o
comprimento e quantidade de peixes contidas em um aquário de forma rápida, precisa e
prática. Os dispositivos disponíveis no mercado realizam apenas a contagem de peixes, mas
nenhum é capaz de medí-los ou capaz de adquirir outros tipos de informações como por
exemplo a cor de cada peixe, que permite a identificação dos mesmos.
Será visto ao longo deste artigo como construir um protótipo para obtenção de dados
relacionados aos peixes apresentando a metodologia, o dimensionamento do protótipo e o
resultado de simulações. Ao final deste artigo serão apresentados uma conclusão e as
referências bibliográficas.
1.1 Tema de Pesquisa
Com este trabalho propõe-se o desenvolvimento de um protótipo de bacia aquática
para peixes com um sistema de processamento embarcado, com o qual será feita a extração
de algumas características dos animais, tais como o comprimento de cada peixe, a cor e a
quantidade de peixes que estarão contidos na bacia. A extração desses dados é feita a partir
de uma câmera conectada ao microcomputador Raspberry Pi 3, com o qual utilizando
Processamento de Imagens em linguagem Python e com a biblioteca OpenCV, pode-se
extrair os dados e apresentá-los em uma tela com entrada HDMI.
1.2 Justificativa do Tema
O tema proposto foi inicialmente solicitado durante a realização do programa
BRAFITEC pela instituição francesa IFREMER, localizada em Montpellier, na França,
responsável por fazer pesquisas e exploração marítima. Nesta instituição pesquisadores fazem
medidas regulares e individuais em algumas espécies de peixes, para a obtenção de dados que
possibilitem estudos sobre o desenvolvimento das espécies. Esta etapa de obtenção de dados
5
como medições e contagens unitárias são frequentemente feitas manualmente, sendo um
trabalho impreciso, desgastante e demorado para quem o realiza e ao mesmo tempo
traumatizante para os peixes.
1.3 Objetivo do Trabalho
Este trabalho busca otimizar a etapa de obtenção de dados dos peixes com o
desenvolvimento de um dispositivo de aquisição de vídeo portável que permitirá extrair o
tamanho de cada peixe e a quantidade de peixes contidos em uma bacia aquática,
automatizando assim o trabalho de aquisição de medidas e possibilitando maior precisão e
agilidade na obtenção de dados, tornando esse processo mais rápido e prático.
A realização deste projeto objetiva também um certo conhecimento em Processamento
de Imagens com a biblioteca OpenCV e em programação com liguagem Python, sendo estes
conhecimentos necessários para a realização do projeto.
1.4 Delimitações do Trabalho
O estudo será restringido no desenvolvimento de um protótipo para obtenção de dados
de animais aquáticos, limitando-se ao estudo sobre Processamento de Imagens. Não será feito
qualquer estudo relacionado ao desenvolvimento ou comportamento sobre os peixes.
Tampouco será feito um estudo sobre as classes da biblioteca OpenCV.
1.5 Aplicações
Este trabalho poderá ser usado como auxílio para estudos relacionado aos peixes em
diversas áreas. Como exemplo será possível auxiliar pesquisadores no estudo de alimentos,
possibilitando saber o efeito de diferentes tipos alimentos no crescimento dos peixes.
Permitirá também auxiliar pesquisadores na extração de dados para estudo de novas espécies.
Será útil para criadores de peixes a ter um controle sobre o crescimento populacional em
cardumes bem como a taxa de crescimento que cada tipo de peixe apresenta de acordo com o
tipo de alimentação que está recebendo, ajudando ao criador a aumentar a sua produção. Esse
projeto poderá ser usado para diversos fins, dependendo das necessidades de quem o utilizar.
1.6 Aquicultura no Brasil
Segundo a Organização das Nações Unidas para Agricultura e Alimentação (FAO), a
aquicultura é a mais rápida das atividades agropecuárias em termos de resultados produtivos e
6
uma das poucas capazes de responder com folga ao crescimento populacional, o que pode
contribuir para o combate à fome em todo o mundo.
A aquicultura está sendo fomentada no Brasil por meio do Ministério da Pesca e Cultura,
para que o país deixe de ser um importador e passe a ser um exportador de pescado, tornando-
se uma potência aquícola. Assim abre-se mercado para tecnologias nessa área.
Existe atualmente no mercado vários dispositivos destinados à aquicultura, desde
sensores de ph até alimentadores automáticos, mas poucos destinados a adquirir
características dos peixes. No Brasil existe disponível um sistema que calcula a quantidade de
peixes presente em uma bacia, mas não extrai o comprimento de cada peixe. Esse sistema
existente usa como sensor um tubo onde apenas peixes de porte pequeno possam ser contados.
Com esse projeto pretende-se criar um sistema para fazer a extração de dados como a
quantidade de peixes contidos em uma bacia e o comprimento de cada um deles que seja de
baixo custo e de fácil instalação e que atenda aos requisitos do utilizador, podendo extrair
características de peixes com qualquer tamanho.
7
2 REFERENCIAL TEÓRICO
A seguir serão apresentados alguns conceitos necessários para o desenvolvimento
deste projeto.
2.1 Processamento Digital de Imagens
A área de processamento digital de imagens vem evoluindo continuamente ao longo
dos anos, com um aumento significativo de estudos envolvendo morfologia matemática, redes
neurais, processamento de imagens coloridas, compressão de imagens, reconhecimento de
imagens e sistemas de análise de imagens baseados em conhecimento (GONZALEZ &
WOODS, 2010).
O processamento de imagens é realizado em etapas bem definidas que compartilham
informações entre si para produzir o resultado esperado, de forma que o resultado de cada
etapa interfere diretamente nas etapas subsequentes. As etapas fundamentais para o
processamento digital de imagens se dividem em: aquisição da imagem, filtros de imagem,
segmentação, reconhecimento e interpretação (GONZALEZ & WOODS, 2010).
O processamento de imagens tem como funções facilitar a visualização da imagem ou
adequá-la para análises quantitativas através de correções de defeitos ou realces das regiões de
interesse nas imagens; e a extração e tratamento de dados quantitativos, feitos pelo próprio
computador. (GOMES & VELHO, 2002).
2.1.1 Imagem Digital
Uma imagem pode ser definida como uma função bidimensional f(x,y) , onde x e y
são as coordenadas espaciais de um plano e o valor da amplitude de f é chamado de
intensidade da imagem neste ponto. Quando os valores das coordenadas espaciais x e y e da
amplitude de f são quantidades finitas e discretas, esta imagem é definida como uma imagem
digital. Cada elemento de uma da matriz de uma imagem digital possui uma localização e um
valor específico, que são denominados de elementos pictóricos ou pixel (GONZALEZ &
WOODS, 2010).
Em uma imagem digital colorida o modelo RGB é amplamente utilizado em câmeras de
vídeo coloridas, que medem a quantidade de luz vermelha, verde e azul incidida. No modelo
RGB, cada pixel consiste em três valores de amplitude referente a cada componente de cor
primário e o número de bits utilizado para representar cada pixel é denominado de
profundidade do pixel (GONZALEZ & WOODS, 2010).
8
Para diminuir o peso do processamento digital de imagens, antes de qualquer operação, as
imagens devem ser convertidas do formato RGB para Escala de Cinza. Computacionalmente
essas imagens são armazenadas utilizando-se 8 bits (um byte) por pixel, o que possibilita 256
intensidades possíveis (GONZALEZ & WOODS, 2010). Portanto em uma imagem digital em
tons de cinza, cada pixel possui 8 bits compreendendo o intervalo entre 0 e 255 níveis de
cinza possíveis.
A imagem digital possui um marco inicial na coordenada f(x,y) = (0,0), sendo „x‟
representando as colunas e „y‟ representando as linhas da imagem, conforme demostrado na
Figura 1.
Figura 1: Representação da imagem digital.
Fonte: GONZALEZ & WOODS, 2010.
Um vídeo é formado por várias imagens que são mostradas consecutivamente por um
período de tempo, sendo que sua unidade de medida é definida por Frames por Segundo
(FPS). No processamento digital de um vídeo, são analisadas todas as imagens apresentadas
pelo vídeo, como se fossem imagens individuais.
2.1.2 Filtros de Imagem
Os filtros digitais de imagem são técnicas matemáticas de processamento digital de
imagens, com o objetivo de realizar melhoramentos para a visualização ou para redução de
dados a serem processados nas áreas de interesse. Estas técnicas necessitam de alto poder
computacional de acordo com a qualidade e resolução das imagens de origem. Vamos utilizar
para este projeto os conceitos de Erosão, Dilatação e Suavização, a fim de diminuir os ruídos
que possam dificultar as operações de reconhecimento de objetos em uma imagem.
9
A operação de erosão, mostrada na Figura 2, é usada para eliminar o ruído em uma
imagem. Com essa operação as pequenas manchas ou ruídos em uma imagem são reduzidos a
nada, enquanto as regiões maiores que contêm conteúdo visualmente significativo não são
afetadas (BRADSKI & KHAELER, 2008).
Figura 2: Exemplo da Erosão em uma imagem digital.
Fonte: BRADSKI & KHAELER, 2008.
A operação de dilatação, mostrada na Figura 3, é frequentemente usada quando se
tenta encontrar componentes conectados, ou seja, grandes regiões discretas de cor ou
intensidade de pixels semelhantes. A utilidade da dilatação existe porque, em muitos casos,
uma região contínua poderia ser quebrada em múltiplos componentes como resultado de
ruído, sombras ou algum outro efeito similar na imagem. Uma pequena dilatação fará com
que esses componentes fundam-se (BRADSKI & KHAELER, 2008).
Figura 3: Dilatação em uma imagem digital.
Fonte: BRADSKI & KHAELER, 2008.
A suavização, também chamado de desfocagem, é uma operação de processamento de
imagem simples e frequentemente usada. Geralmente é utilizada para reduzir ruídos ou fazer
10
alisamentos em objetos da imagem, reduzindo a sua resolução. Seu efeito é mostrado na
Figura 4.
Figura 4: Suavização em uma imagem digital.
Fonte: BRADSKI & KHAELER, 2008.
2.1.3 Limiarização
Em muitos casos é comum o desejo de dividir a imagem em regiões de interesse com
base em informações de sua cor ou intensidade de níveis de cinza. Nesses casos, a
limiarização é a técnica indicada. O princípio da limiarização consiste em separar as regiões
de uma imagem quando esta apresenta duas classes, o fundo e o objeto de interesse (FILHO &
NETO, 1999).
Esse processo também é chamado de binarização, já que é caracterizado pela bipartição
do conjunto de cores, segundo um limiar (valor do nível de cinza) determinado. Ou seja, cada
pixel da imagem é convertido em branco, caso seu valor de cinza seja igual ou superior ao
limiar, ou preto, caso contrário (SILVA, 2014).
Com este método é possível identificar os objetos de interesse e ignorar todas as outras
informações desnecessárias em uma imagem. A técnica de limiarização será feita a partir dos
conceitos de histograma e threshold, explicados à seguir.
2.1.4 Histograma de uma Imagem
O histograma é uma representação gráfica da frequência de ocorrências de um
determinado evento. Em uma imagem digital em tons de cinza, o histograma mostra a
frequência de ocorrência de cada um dos tons, como pode ser exemplificado na Figura 5
(MOESLUND, 2012).
11
Figura 5 - Histograma de uma imagem digital em tons de cinza.
Fonte: MOESLUND ,2012.
O gráfico do histograma é plotado com a intensidade dos pixels para 256 tons no eixo
horizontal e, no eixo vertical, a probabilidade de ocorrência dos tons de cinza na imagem
(GONZALEZ & WOODS, 2010).
2.1.5 A Técnica de Threshold
O Threshold é uma técnica de limiarização de níveis de cinza de uma imagem que
pode ser largamente utilizada na detecção de objetos conhecidos em um determinado fundo.
Ao analisar um histograma e detectar a faixa de níveis de cinza que representam o objeto
procurado na imagem, realiza-se a conversão dos pixels internos da faixa informada para o
nível máximo do histograma, valor 255, e os pixels que estiverem fora da faixa informada
receberão o nível mínimo do histograma, valor zero. Após a aplicação do threshold no
intervalo definido no histograma, será possível visualizar com clareza os objetos procurados
na imagem, pois a imagem foi convertida de tons de cinza para preto e branco, de forma que
os objetos procurados estejam com máxima diferença de nível de cinza com relação ao fundo,
maior diferença de contraste, reduzindo também a quantidade de informação a ser processada
(PRESTES, 2013). A Figura 6 exemplifica a operação de Theshold.
12
Figura 6: Threshold aplicado para a segmentação de um objeto.
Fonte: opencv.org.
Esta técnica de binarização da imagem nos permite fazer a segmentação do objeto
desejado, possibilitando a manipulação deste objeto e a extração de dados desejados.
2.1.6 Vizinhança entre Pixels
Um dos principais conceitos no relacionamento entre pixels é o conceito de
vizinhança. Um pixel p com coordenadas espaciais x e y tem quatro vizinhos horizontais e
verticais, cujas coordenadas são dadas pela Tabela 1 (GONZALEZ & WOODS, 2010):
Tabela 1: Representação das coordenadas vizinhança-4
(X,Y-1)
(X-1,Y) (X,Y) (X+1,Y)
(X,Y+1)
Fonte: GONZALEZ & WOODS, 2010.
Este conjunto de pixels mostrados na tabela acima é chamado de vizinhança-4 do pixel
p. Os quatro vizinhos diagonais de p tem suas coordenadas apresentadas na Tabela 2:
Tabela 2: Representação das coordenadas diagonais de um pixel.
(X-1,Y-1)
(X+1,Y-1)
(X,Y)
(X-1,Y+1)
(X+1,Y+1)
Fonte: GONZALEZ & WOODS, 2010.
Esses pontos apresentados na tabela 2, juntamente com a vizinhança-4 da tabela 1, são
chamados de vizinhança-8 de p (GONZALEZ & WOODS, 2010), apresentadas na Tabela 3.
A contiguidade entre os pixels, também denominada conectividade é determinada em geral
pela Conectividade 4 e Conectividade 8. A Conectividade 4 estabelece que somente os 4
13
pixels adjacentes vertical e lateralmente são considerados contíguos, sem levar em conta os
pixels adjacentes da diagonal. Isto significa que se um pixel estiver conectado a outro pixel
adjacente à sua diagonal, eles serão considerados pertencentes a dois objetos separados. A
Conectividade 8 determina que todos os 8 pixels adjacentes são considerados contíguos,
fazendo parte do mesmo objeto (GOMES & VELHO, 2002)..
Tabela 3: Representação das coordenadas vizinhança-8.
(X-1,Y-1) (X,Y-1) (X+1,Y-1)
(X-1,Y) (X,Y) (X+1,Y)
(X-1,Y+1) (X,Y+1) (X+1,Y+1)
Fonte: (GONZALEZ, 2010).
O acesso à cada pixel individual e sua relação aos pixels vizinhos permite a criação de
algoritmos de Processamento de Imagens destinados aos mais variados fins, como por
exemplo identificar objetos a partir de seus contornos.
Após a identificação dos objetos de interesse em uma imagem, podemos fazer a
extração de dados. Em geral, a extração de dados pode ser dividida em dois tipos de medida:
medidas de campo e medidas de região. As medidas de campo se referem ao campo como um
todo, como na medição de número de objetos, área total dos objetos e fração de área, gerando
como resultado apenas um valor por medida. As medidas de região se referem aos objetos
individualmente, ou seja, é extraído um parâmetro de cada objeto na imagem, como por
exemplo, tamanho, forma e posição das partículas (GOMES & VELHO, 2002).
2.1.7 Razão de Aspectos
A Razão de Aspectos (RA) é um parâmetro utilizado para medir o alongamento de um
determinado objeto. Os aspectos, também chamados calibres, feret diameters ou
simplesmente ferets, equivalem às sombras dos objetos em diferentes direções. As principais
medidas são o calibre mínimo e o calibre máximo (AUGUSTO, 2012), mostrados na Figura
7.
14
Figura 7 – Razão de Aspectos.
Fonte: AUGUSTO, 2012.
A razão de aspectos é obtida pela razão entre o calibre mínimo e o calibre máximo,
também chamados de FERETMIN e FERETMAX, de acordo com a seguinte equação:
(1)
Depois de várias adaptações ao objeto, a partir destas sombras são então obtidos os
valores máximo e mínimo de comprimento, definidos respectivamente como o FERETMAX e
FERETMIN. Para encontrar estes dois valores é calculada e escolhida a disposição com a
razão de aspectos de maior valor. Assim, o objeto que se deseja obter suas medidas é então
enquadrado em uma caixa retangular, possibilitando obter o seu comprimento a partir do valor
FERETMAX. Caso o objeto não esteja de forma curvada, é possível obter também sua largura
a partir do valor de FERETMIN.
Visto que os peixes poderão estar dispostos de diferentes maneiras, este método
adaptativo permite calcular seus comprimentos não importando o posicionamento ou
disposição dos peixes.
2.2 A biblioteca OpenCV
OpenCV é uma biblioteca open source de visão computacional que fornece uma
infraestrutura simples de se usar e que possibilita a criação aplicativos sofisticados
rapidamente. Esta biblioteca contém mais de 500 funções que auxiliam no Processamento
Digital de Imagens em diversas áreas. A biblioteca está escrita em C e C++, mas também
15
permite a sua utilização em diversas linguagens de programação como por exemplo em
Python. Pode ser executada em vários sistemas como Linux, Windows e Mac OS X e foi
projetado para uma boa eficiência computacional e com foco em aplicativos em tempo real.
Com esta biblioteca poderemos detectar objetos de interesse, notavelmente os peixes,
a partir de funções que nos permitem identificar objetos em uma imagem e assim com suas
coordenadas na matriz de pixels obter os dados desejados.
2.3 Placa Raspberry Pi
O Raspberry Pi 3 Model B, apresentado na Figura 8, é um minicomputador que possui
entradas e saídas que qualquer computador normal possui, desenvolvido no Reino Unido e
lançado no ano de 2012. Este computador permite a execução de variantes do sistema
operacional Linux e com ele é possível desenvolver algoritmos em linguagem Python. O
Raspberry Pi 3 possui o sistema operacional Raspbian. Fornece entrada para uma câmera,
possibilitando obter imagens em tempo real que nos permitirão, utilizando processamento de
imagens com a biblioteca OpenCV, obter os dados desejados como o comprimento dos
peixes, cores e quantidade.
Figura 8 – Placa a ser utilizada.
Fonte: raspberrypi.org
Esta placa possui dimensões 85,60 mm × 53,98 mm × 17 mm, com 4 núcleos de
processamento e com frequência de operação de 1.2 GHz. Suas pequenas dimensões
possibilitam uma portabilidade ao projeto, permitindo sua utilização de modo prático e rápido.
16
3 METODOLOGIA
Para o desenvolvimento do projeto são necessários um sistema para aquisição e
prepocessamento de imagens e uma plataforma contendo uma bacia aquática, destinada à
colocação dos peixes e fixação do sistema embarcado. Será utilizado o microcomputador
Raspberry Pi 3 para o desenvolvimento computacional do projeto, pois além de ser compacto
permite fazer o preocessamento em tempo real. Para a fixação do mesmo, foi desenvolvida
uma plataforma como ilustrada na Figura 9, destinada também à colocação dos peixes na
bacia de onde será capturados imagens para fazer o processamento e obtenção dos dados.
Figura 9 – Plataforma para fixação da câmera e posicionamento dos peixes.
Fonte: O Autor.
No desenvolvimento do modelo computacional foi utilizada a linguagem de programação
Phyton 2.7 que permite desenvolver aplicações de maneira rápida e clara em diversas áreas
tecnológicas, como no nosso caso aplicações para dispositivos portáteis. Como o aplicativo
trabalha com a aquisição e processamento de imagens digitais, foi necessário o uso de uma
biblioteca para processamento de imagens, na qual será utilizado a biblioteca OpenCV. Esta
biblioteca de classes permite, dentre outras aplicações, a manipulação avançada de imagens
digitais. A biblioteca OpenCV possuirá a versão 3.1. Já existem várias outras versões mais
recentes desta biblioteca, mas por conta de compatibilidade de algumas classes da biblioteca com
a linguagem Phyton 2.7 será empregado a versão 3.1 da biblioteca OpenCV.
17
Todas as etapas do projeto são apresentadas no fluxograma da Figura 10 a seguir.
Figura 10 –Fluxograma com as etapas do projeto.
Fonte: O Autor.
Após a fixação da câmera e a instalação da biblioteca OpenCV, pode-se dar início às
etapas de processamento de imagens. O primeiro passo é a digitalização da imagem com a
aquisição do vídeo e a captura das imagens individuais. Após a obtenção da imagem digital, o
próximo passo consiste na binarização da imagem, para que seja possível identificar os
objetos em etapas posteriores. É necessário agora aplicar filtros de imagem. Os filtros de
imagem servem para melhorar a qualidade da imagem, para que as próximas etapas sejam
bem-sucedidas. Ao passar por todas essas etapas pode-se então fazer a identificação de
18
objetos. O papel básico desta etapa é separar a imagem em partes ou objetos de interesse. Ao
identificar todos os objetos de interesse na imagem inicia-se então a etapa de obtenção de
dados. Esta etapa nos permitirá obter dados numéricos no qual algumas características dos
objetos nas imagens são extraídas. Após todo o processo se inicia novamente, analisando as
várias imagens de um vídeo em tempo real.
3.1 Dimensionamento da plafaforma e posicionamento da câmera
Afim de extrair dados sobre os peixes torna-se necessário que esses peixes estejam
inseridos em uma bacia com água e que a câmera esteja em condições de obter as imagens dos
mesmos.
Para este projeto foi desenvolvido então um protótipo de uma plataforma onde é
possível posicionar os peixes, junto com um suporte para a câmera, no qual será posicionada a
uma altura H acima da plataforma, como é mostrado na Figura 11.
Figura 11 – Plataforma para fixação da câmera e posicionamento dos peixes.
Fonte: O Autor.
As dimensões da bacia podem sem escolhidas de maneira com que caibam os peixes a
serem processados. Já a câmera deve ser posicionada acima da plataforma, podendo a altura H
para o posicionamento ser arbitrária e escolhida pelo projetista de modo que possibilite
capturar imagens no qual possuam todos os peixes ilustrados.
19
Esta plataforma, no qual foi feita em acrílico, foi projetada com a ajuda do software
AutoCAD e do software Maker Case disponível no site “www.makercase.com”. Visto que
todas as medidas no dimensionamento dos elementos podem ser arbitrárias, sendo as
calibragens para cálculo dos peixes processadas numericamente, este projeto pode ser
portável e facilmente adaptável para outros meios onde a bacia para posicionamento dos
peixes tenham diferentes obstáculos e restrições.
3.2 Instalação da biblioteca OpenCV 3.1
Esta é uma biblioteca Open Source de processamento de imagens disponível para
várias linguagens de programação, dentre elas as linguagens Python, C/C++ e Java. Como
iremos trabalhar com um sistema operacional Raspbian, baseada no sistema Linux,
utilizaremos então a linguagem de programação Python 2.7.
Será demonstrada a instalação desta biblioteca para o sistema Linux na parte de
“Aplicação da Metodologia” no item 4, onde todos os passos serão explicados. A biblioteca
OpenCV está disponível para as mais diversas plataformas no site “opencv.org”, onde são
apresentados também tutorias para a sua instalação dependendo da linguagem e plataforma a
ser utilizada.
3.3 Aquisição de Imagens
Após ser concluída a instalação da biblioteca OpenCV, podemos então começar a
parte de processamento de imagens. A primeira coisa a se fazer é a aquisição de imagens, que
serão provenientes de vídeos em tempo real capturados por uma camera com cabo USB.
O projeto será destinado, além da contagem dos peixes, à obtenção de medidas dos
mesmos e para isso não é necessária que a resolução das imagens sejam de alta definição.
Para aumentar a rapidez de processamento é recomendável a captura de videos com uma
resolução de 640x480 pixels a uma taxa de 32 fps, uma resolução mais baixa, mas que não
prejudicará na obtenção dos dados.
Ao fazer a captura de uma imagem proveniente de um vídeo, esta imagem estará no
formato RGB, visto que a câmera faz vídeos coloridos. Para facilitar as próximas etapas de
processamento e também para diminuir a quantidade de dados a serem processados, torna-se
necessário transformar a imagem obtida do formato RGB para escalas de cinza, deixando assim
o processamento mais rápido.
20
3.4 Binarização
Esta etapa consiste em reduzir a quantidade de informações contida em uma imagem,
com o objetivo de deixar na imagem apenas as informações relevantes, neste caso
características referentes aos peixes. Para que isso seja feito será necessário utilizar as
ferramentas de histograma e threshold.
O histograma fornece a quantidade de pixels que cada nível de cinza, compreendidos
de 0 a 255, está representado em uma imagem. Com ele é possível identificar quais níveis de
cinza estarão representados os peixes.
Após identificar os níveis de cinza com o qual estão representados os peixes, pode-se
usar a técnica de threshold. Esta técnica permite binarizar a imagem, deixando na imagem
apenas as informações com os níveis de cinza pertinentes aos peixes. Assim, em todos os
pixels que representam os peixes será atribuído o nível 255, cor branca, enquanto as outras
informações desnecessárias contidas na imagem receberão o valor 0, cor preta.
3.5 Filtros de Imagem
Como será apresentado nas próximas etapas, para que seja possível obter dados dos
objetos na imagem, os objetos serão identificados através do método dos contornos. Após
uma imagem ser binarizada as bordas dos objetos, que estarão na cor branca, poderão ter
descontinuidades, resquícios de outros objetos que não nos interessam como por exemplo a
interferência da luz na câmera e outros possíveis pequenos problemas que podem dificultar
nas próximas etapas.
Afim de realizar melhoramentos para o processamento das próximas etapas ou para a
redução de dados a serem processados nas áreas de interesse, serão utilizadas algumas
técnicas conhecidas como filtro de imagens, sendo elas as técnicas de Erosão, Dilatação e
Suavização.
A técnica de Erosão, como o próprio nome diz, irá corroer as bordas dos objetos
contidas na imagem. Se algum determinado objeto for muito pequeno, com a aplicação da
erosão este objeto irá ser corroído até desaparecer, dependendo do nível de erosão. Caso os
peixes estejam em contato um com o outro, estará representado na imagem apenas um objeto.
Esta técnica será então uma ferramenta muito útil também para separar objetos, possibilitando
que os peixes se movam e colidam uns com os outros que ainda assim será possível identificá-
los através da técnica de contornos e extrair os dados desejados.
A aplicação da erosão causará o efeito negativo de diminuir o tamanho dos objetos.
Para este projeto o objetivo é extrair as medidas de comprimento dos peixes e se apenas ser
21
aplicado a técnica de erosão, serão obtidas medidas inexatas. Para suprir este problema, após
utilizar a técnica de erosão, pode-se utilizar a técnica de dilatação. Como o próprio nome já
sugere, esta técnica irá dilatar as bordas dos objetos da imagem. Afim de repor a informação
perdida com a erosão, usa-se a dilatação na mesma proporção que a erosão foi feita,
recuperando as informações de medidas dos peixes.
Com a técnica de dilatação, em consequência de os objetos terem suas bordas
aumentadas, poderemos ter algumas descontinuidades em suas bordas ou mesmo alguns
ruídos. Afim de reparar esses possíveis problemas nas bordas dos objetos será aplicada a
técnica de suavização. Esta técnica irá suavizar as bordas dos objetos, reparando possíveis
problemas. Para as próximas etapas, é crucial a identificação das bordas dos objetos, sendo
indispensável a correção de possíveis problemas com os mesmos.
3.6 Identificação de Objetos
Para a identificação dos objetos em uma imagem serão aplicados os conceitos de
vizinhança-8 entre pixels. Com o conceito da vizinhança de pixels é possível implementar a
técnica dos contornos, no qual com uma varredura na matriz de pixels são identificados nos
objetos da imagem pontos contíguos em suas bordas possuindo a mesma cor ou intensidade.
A técnica dos contornos analisa toda a imagem e cria vetores com coordenadas de
pixels, no qual cada vetor possui todas as coordenadas das bordas de um objeto na imagem,
sendo declarado um vetor para cada objeto. Essas bordas são sempre fechadas, ou seja, a
coordenada de início de um contorno é também a coordenada de término do mesmo. Após a
atribuição dos vetores de coordenadas, todos esses vetores são indexados em um único vetor,
sendo este último o vetor de objetos.
A detecção dos contornos de objetos é importante pois sabendo suas coordenadas,
podemos obter várias informações sobre os objetos como área, perímetro, comprimento,
largura, formas e quantidade de objetos.
Esta técnica necessita que as imagens em análise sejam binárias, ou seja, na cor preta e
branca sendo que os objetos de análise estejam na cor branca e inseridos em um fundo preto,
para que funcione com eficiência e precisão. Aqui se percebe que as etapas anteriores são,
portanto, indispensáveis para esta etapa de detecção de objetos onde é indispensável o uso da
técnica de binarização com threshold antes de aplicarmos a técnica dos contornos.
22
3.7 Obtenção de Dados
Ao aplicar a técnica dos contornos, são identificados todos os objetos da imagem e
obtidas as suas coordenadas que são armazenadas em vetores. Deve-se então fazer uma
filtragem de dados para ignorar os objetos que não são do nosso interesse e assim serão
identificados quais contornos correspondem aos peixes. Deste modo é possível então saber
qual a quantidade de peixes que estarão contidos na bacia e como já foram identificadas as
coordenadas dos pixels correspondentes aos peixes, pode-se identificar as suas respectivas
cores a partir da imagem original no formato colorido RGB.
Com as coordenadas dos peixes identificadas, será possível usar o método da razão de
aspectos para obter as medidas dos peixes. Este método adaptativo, no qual pode ser
facilmente aplicado com a biblioteca OpenCV, irá analisar as coordenadas dos peixes e irá
enquadrar cada peixe em um retângulo, no qual o comprimento do peixe será o comprimento
maior do retângulo, medida conhecida como calibre máximo ou FERETMAX.
Esta medida do calibre máximo que nos fornece o comprimento do peixe é uma
medida dada em pixels. É necessário então converter o comprimento dos peixes em pixels
para centímetros. Para isto, utiliza-se um objeto com medidas conhecidas e em ele é extraído
um valor de offset, no qual este valor será uma constante de calibre correspondente à altura H
da câmera. Aplica-se a seguinte conversão mostrada na fórmula 2 a seguir.
(2)
A constante de offset, que fará a conversão da medida dos peixes de pixels para
centímetros, é calculada usando qualquer objeto com comprimento conhecido para a
calibração dos valores recebidos pela câmera. Para saber o seu valor numérico é preciso saber
o comprimento real de algum objeto e dividi-lo pelo valor de calibre máximo medido em
pixels encontrado através do processamento.
O comprimento real dos objetos a serem mensurados dar-se-á, portanto, pela equação
3, onde o comprimento dos peixes com unidade em centímetros será obtido através da
multiplicação do valor medido em pixels pelo valor de offset calculado.
(3)
23
O valor de offset encontrado será a constante correspondente à altura H da câmera em
relação aos peixes. Logo, se ocorrer variação da altura H deverá ser feita nova calibragem da
câmera, caso contrário serão fornecidas medidas com valores incorretos.
24
4 APLICAÇÃO DA METODOLOGIA PROPOSTA
Para o desenvolvimento do projeto são necessárias algumas ferramentas, as quais
encontram-se listadas abaixo.
Um Raspberry Pi 2 Model B com câmera;
Um teclado com saída USB;
Um monitor com entrada HDMI;
Uma bacia aquática com suporte para o Raspberry Pi.
Com posse destes materiais pode-se iniciar o desenvolvimento do projeto. A seguir
serão apresentadas todas as etapas do projeto, inicialmente mostrando como foi desenvolvida
a bacia aquática e posteriormente entrando em detalhes na parte de processamento de
imagens.
4.1 Dimensionamento da plafaforma e posicionamento da câmera
A plataforma no qual serão colocados os peixes e posicionada a câmera, mostrada na
Figura 12, foi desenvolvida com a ajuda dos softwares AutoCAD e Maker Case. Foi impressa
com material acrílico e vedadas todas as suas conexões para impedir a passagem de água.
Figura 12 – Plataforma feita em acrílico.
Fonte : O Autor.
25
As dimensões da bacia foram arbitrárias, com largura de 210 mm, comprimento de
280mm e profundidade de 50 mm. A câmera irá ser posicionada a uma altura H = 45 cm,
altura na qual irá possibilitar a câmera de capturar imagens dos peixes em boa qualidade.
Após a confecção da plataforma, faz-se necessário agora conectar o teclado e o
monitor ao microcomputador para que seja possível utilizá-lo. Após a conexão dos periféricos
é preciso posicionar e ajustar adequadamente a câmera para que possibilite capturar imagens
dos peixes sem cortes ou interferências.
4.2 Instalação da biblioteca OpenCV 3.1
No Anexo A é apresentado um tutorial para fazer a instalação da biblioteca OpenCV
versão 3.1.0 e das ferramentas de desenvolvimento em liguagem Python versão 2.7 no
Raspberry Pi 3 Modelo B, para que seja possível processar imagens em linguagem Python.
4.3 Aquisição de Imagens
A aquisição de imagens é feita a partir da câmera do Raspberry Pi em formato de cores
RGB. Para que seja possível utilizá-la é necessário primeiro habilitá-la a partir das
configurações do microcomputador.
No programa a ser compilado, inicialmente inicializa-se a câmera para a captura de
vídeos. Os vídeos serão capturados com resolução de 640x480 pixels com taxa de 32 frames
por segundo.
As linhas de código para estes procedimentos são apresentadas a seguir:
Todos os comandos das etapas subsequentes deverão estar dentro de um loop, para que
se permita a captura e processamento de imagens periodicamente. Após a inicialização da
câmera, são extraídas imagens periódicas do vídeo em tempo real com a seguinte linha de
código, que está inserida em um loop:
26
Assim obtém-se a imagem da Figura 13.
Figura 13 – Imagem no formato RGB
Fonte : O Autor.
4.4 Binarização
A imagem adquirida na etapa anterior está no formato RGB. Antes de prosseguir para
as próximas etapas é necessário transformar a imagem colorida para tons de cinza, no qual
cada pixel possuirá uma intensidade entre o valor 0 e 255, para que seja possível fazer a
segmentação.
A conversão da imagem colorida para tons de cinza pode ser feita com a função
cvtColor da biblioteca OpenCV, como verifica-se abaixo:
A partir da conversão a imagem adquirida pela câmera apresentada na Figura 13,
ficará como mostra a imagem da Figura 14.
27
Figure 14 – Imagem em tons de cinza
Fonte : O Autor.
Obtemos agora o Histograma da Figura 14 para saber quais tons de cinza representam
os objetos de interesse. A obtenção do histograma pode ser feita com as linhas de código a
seguir.
Esses comandos apresentarão o histograma da Figura 14, no qual mostra a quantidade
de pixels que estão representados com cada nível de tons de cinza, como se pode ver na
Figura 15.
28
Figura 15 – Histograma da Figura 14
Fonte : O Autor.
Analisando o histograma na Figura 15, podemos aplicar a técnica de threshold para
fazer a segmentação dos objetos. A técnica de threshold permite binarizar a imagem,
selecionando os níveis de tons de cinza que representam as informações desejadas e
transformando os pixels com estes níveis para a cor branca, com valor 255. Os pixels que
possuírem valores diferentes dos que são representados pelos objetos de interesse serão
transformados para o valor 0, representado pela cor preta.
Esta técnica irá permitir fazer a detecção dos objetos na imagem, no qual possuirá
como resultado uma imagem com as informações referentes aos peixes destacadas com
apenas dois níveis de cores. Sua implementação consiste em limitar um valor mínimo e um
valor máximo de intensidade no qual estará o range de níveis de cinza que possuirão
informações úteis, valores que são fornecidos pelo histograma da Figura 15. Outra opção para
escolher os valores delimitadores do threshold é por tentativa e erro. Aplica-se o threshold
conforme as seguintes linhas de comandos:
Como resultado da segmentação a partir do threshold a Figura 14 será transformada
então na Figura 16
29
Figure 16 – Imagem binarizada.
Fonte : O Autor.
4.5 Filtros de Imagem
Após a segmentação dos objetos de interesse, é importante aplicar algumas técnicas
para reduzir alguns detalhes que possam dificultar o reconhecimento dos objetos, tornando a
próxima etapa mais eficaz.
Inicialmente, após a aplicação do threshold na etapa de binarização, usa-se a técnica
de dilatação para unir pontos remanescentes dos objetos da Figura 16, com a função dilate
apresentada a seguir, disponível na biblioteca Opencv.
Esta técnica aplicada na imagem da Figura 16 resulta na imagem da Figura 17.
30
Figura 17 – Resultado da função Dilate
Fonte : O Autor.
Nota-se a partir da Figura 17 que a função dilate torna o contorno dos objetos mais
uniformes, facilitando assim a detecção de contornos na etapa de identificação de Objetos.
Como esta aplicação é destinada a obter característica de peixes, que podem colidir-se
uns contra os outros, torna-se necessário a utilização da técnica da erosão para separar objetos
unidos. Esta técnica pode ser aplicada com a função erode disponível na biblioteca Opencv,
de acordo com o seguinte comando:
A aplicação desta função na Figura 17 resulta na Figura 18.
Figura 18 – Resultado da função Erode
Fonte : O Autor.
31
A técnica da erosão ajuda também a eliminar informações que não são de interesse,
como pequenos pontos que sobram como vestígios após a segmentação, sendo eliminados
dependendo e sua área e grau de erosão aplicado.
Para reduzir os ruídos na imagem, aplica-se a função blur disponível na biblioteca
Opencv, o qual irá suavizar as bordas dos objetos segmentados, com a seguinte linha de
comando:
Aplicando esta técnica na Figura 18, tem-se como resultado a Figura 19.
Figura 19 – Resultado da aplicação Blur
Fonte : O Autor.
4.6 Identificação de Objetos
Para adquirir características de objetos é necessário conhecer as suas coordenadas na
matriz de pixels da imagem. A biblioteca OpenCV fornece ferramentas que identificam todas
as bordas dos objetos na imagem, sendo elas as funções Canny e FindContours.
A função Canny irá analisar a imagem da etapa anterior e irá criar uma nova imagem,
no qual serão inseridas apenas as informações referentes às bordas de todos os objetos. A
função FindContours irá ter como entrada a imagem de saída da função Canny, irá encontrar
todas as bordas que possuem disposição fechada, as quais representam os objetos na imagem,
32
e armazenar as coordenadas destes objetos em matrizes, as quais serão indiciadas em um vetor
de contornos. Cada índice nesse vetor representará um objeto na imagem.
A função Canny pode ser aplicada com a seguinte linha de comando abaixo e a
imagem de saída edges está representada na Figura 20.
Figura 20 – Imagem de saída da função Canny
Fonte : O Autor.
Aplica-se agora a função FindContours com a seguinte linha de comando:
Pode-se ver o resultado desta aplicação na imagem da Figura 21, no qual todos os
contornos encontrados são representados, no qual foram preenchidos com o nível 255 para
reduzir o número de informações.
33
Figura 21 – Contornos dos objetos
Fonte : O Autor.
Ao adquirir as coordenadas dos objetos na imagem, teremos que selecionar quais
contornos são relativos ao objeto que se quer extrair dados, pois o vetor de objetos também
possui coordenadas de contornos relativo a sombras na imagem e interferências causadas pela
luminosidade. Deve-se então aplicar um filtro de contornos, afim de remover as coordenadas
irrelevantes.
Pode-se usar como filtro de contornos o cálculo da área de cada objeto, onde todos os
objetos que possuem uma área em pixels inferior à área definida como mínima serão
descartados. Após esse filtro restarão no vetor de coordenadas apenas as coordenadas relativas
aos objetos de interesse, pois normalmente os objetos de maiores áreas na imagem são os
desejados enquanto os outros contornos frequentemente possuem área muito menor. Dentro
de um loop para fazer a análise de todos os índices da matriz de contornos, o filtro de área
pode ser aplicado com um comando if da seguinte maneira, onde para o nosso caso é
suficiente um filtro de área de 400 pixels:
Após a aplicação do filtro e área e serem descartados os objetos irrelevantes, tem-se
apenas as coordenadas de identificação relativas aos objetos de interesse, representados na
Figura 22, e agora é possível extrair características dos mesmos.
34
Figura 22 – Objetos de Interesse
Fonte : O Autor.
4.7 Obtenção de Dados
Após a aplicação do filtro de área nos objetos nos restaram no vetor de contornos
apenas as coordenadas relativas aos peixes. Para extrair os dados dos mesmos é necessário
processar um índice do vetor de cada vez. Para isso isso utiliza-se um loop no qual com base
nas coordenadas dos contornos dos peixes será possível extrair o comprimento e a cor de cada
peixe. Assim, pode-se saber a quantidade de peixes apenas criando uma variável inteira que
irá ser incrementada a cada vez que for extraída os dados dos contornos dos peixes,
informando ao final do loop a quantidade de peixes presentes.
Inicia-se a análise para extrair o comprimento de cada peixe à partir do íncice 0 do vetor
de contornos. Para extrair o comprimento dos peixes utilizaremos a técnica de Razão de
Aspectos, no qual irá analizar as coordenadas do contorno e irá adaptar um retângulo, no qual
o comprimento do retângulo nos informará o comprimento do peixe. Dentro de um loop para
analizar todos os índices do vetor de contornos, a Razão de Aspectos é aplicada com as
seguintes linhas de comando, utilizando a função minAreaRect, fornecida pela biblioteca
OpenCV:
35
O retângulo criado se adapta ao objeto não importando a sua direção de movimento ou
ângulo de orientação, o que permite aos peixes mover-se livrementes. Para saber então o
comprimento do FeretMax que nos fornecerá o comprimento do peixe medido em pixels,
devemos saber quais são as coordenadas dos cantos do retângulo criado, que são forncecidas
pela função boxPoints, como mostram os comandos abaixo.
O retangulo adaptado para cada objeto ficará disposto como na Figura 23.
Figura 23 – Retângulo fornecido pela aplicação da Razão de Aspectos
Fonte : O Autor.
A partir das coordenadas dos quatro cantos do retângulo, pode-se então calcular o
comprimento do peixe apenas medindo a distância do comprimento do retângulo, aplicando a
fórmula 4:
(4)
36
Para a impletentação da fórmula 4, visto que o retângulo criado pode estar com
angulos de orientações variados devemos calcular a distância euclidiana dos pontos, pois a
matriz de pixels de uma imagem contém indices estáticos e o retângulo pode estar orientado
em qualquer direção. Aplica-se então a fórmula 5.
√ (Pixels) (5)
Pode-se também usar os outros dois pontos do retângulo (y2, x2) e (y3, x3) para
calcular o comprimento. Opcionalmente pode-se calcular a largura dos peixes a partir destes
pontos. Faz-se o cálculo do comprimento com as seguintes linhas de comando:
O comprimento encontrado está medido em pixels e, portanto, não é o valor real do
peixe em centímetros. Deve-se então converter este valor com unidade em pixels para
centímetros. Para isso multiplica-se então o comprimento em pixels por um valor de offset,
que será encontrado utilizando um objeto com comprimento conhecido. Adquire-se a imagem
desse objeto e obtém-se o valor calculado em pixels fornecida pela fórmula 5, após calcula-se
o valor do offset a partir da fórmula 2.
(2)
O comprimento em centímetros é então adquirido aplicando a fórmula 3.
(3)
37
Podemos agora apresentar todos os resultados na imagem de origem em formato RGB.
Na figura Figura 24 está representada a imagem final com todas as informações desejadas,
com a quantidade de objetos e o comprimento de cada um deles.
Figura 24 – Imagem final com os resultados
Fonte : O Autor.
Após o fim da extração de dados, como o processo está em um loop, inicia-se
novamente a captura de imagens a partir da câmera e é feito todo o processamento novamente
para as próximas imagens, permitindo assim fazer o processamento com video em tempo real.
38
5 CONCLUSÃO
Os dados extraidos condizem com os dados reais dos peixes. O principal problema a
ser resolvido na adaptação da camera para outras plataformas é a interferência causada pela
luminosidade que degrada a qualidade das imagens. Esse problema pode ser resolvido com
outros métodos de processamento de imagens ou com a instalação da câmera em uma
plataforma onde as luzes fiquem dispostas de modo que não causem problemas.
Com a plataforma que foi desenvolvida a interferência da luz na câmera pode resultar em um
erro de até 2 mm no cálculo do comprimento dos peixes, uma valor de 3% em relação ao
tamanho real, erro considerado pequeno. A interferência na iluminação também resulta em
uma dificuldade em separar objetos, como por exemplo se dois peixes estiverem unidos.
Como foi visto para o dimensionamento da plataforma e altura da câmera as medidas
podem ser arbitrárias, o único requisito é que a câmera seja capaz de capturar imagens
completas e com qualidade. Isso permite que o sistema possa ser facilmente adaptado para
qualquer ambiente com diferentes restrições.
Após fazer a instalação da câmera na plataforma e fazer o cálculo do offset para a
calibragem da câmera com a altura H, essa altura da câmera em relação a plataforma não pode
variar, caso contrário haverá erros de cálculo e será necessário fazer um novo cálculo de
offset. Por isso é importante que a plataforma a ser desenvolvida possua uma certa
estabilidade.
O sistema desenvolvido possibilita a extração de dados dos peixes sendo que não
existem restrições às dimensões dos mesmos, diferenciando-se dos outros sistemas de
extração de dados de peixes disponíveis no mercado.
Apesar de ter-se feito o projeto com o microcomputador Raspbarry Pi, este projeto
pode ser desenvolvido com diferentes plataformas. Para que o projeto seja portável foi
desenvolvido na placa versão 3 Modelo B, que é mais rápido em relação ao Raspbarry Pi
versão 1 e 2 e cumpre aos requisitos do projeto, mas mesmo assim não possui uma velocidade
de processamento realmente boa. Se um dos requisitos para o projeto for velocidade no
processamento, é necessário que o sistema seja desenvolvido em um sistema computacional
com maior poder de processamento.
39
6 REFERÊNCIAS
GONZALES, Rafael C.; WOODS, Richard E. Processamento de Imagens Digitais. São
Paulo: Pearson Education do Brasil, 2010.
MOESLUND, Thomas B.; Introduction to Video and Image Processing. London: Springer,
2012.
BRADSKI; KHAELER; Learning OpenCV. USA: O‟Reilly Media, 2008.
MARQUES FILHO, Ogê; VIEIRA NETO, Hugo. Processamento Digital de Imagens, Rio de
Janeiro: Brasport, 1999.
GOMES, J.; VELHO, L. Computação Gráfica: Imagem. Rio de Janeiro: IMPA, 2002.
KARES, Augusto; Identificação Automática do Grau de Maturação de Pelotas de Minério de
Ferro. Rio de Janeiro, PUCRIO, 2013
PRESTES, Lucas; PONTIFÍCIA UNIVERSIDADE CATÓLICA DO RIO GRANDE DO
SUL, Faculdade de Engenharia. Instrumento Portátil para Aquisição, Digitalização e
Processamento de Imagens a ser Aplicado na Avaliação do Sistema de Equilíbrio Humano,
2013. Tese (Mestrado em Engenharia).
SILVA, Almeida; UNIVERSIDADE DO ESTADO DO RIO GRANDE DO NORTE, Sistema
de contagem automática de objetos utilizando processamento digital de imagens em
dispositivos móveis, 2014. Dissertação (Mestrado em Ciência da Computação).
AUGUSTO, Karen Soares; PONTIFÍCIA UNIVERSIDADE CATÓLICA DO RIO DE
JANEIRO, Departamento de Engenharia de Materiais. Identificação automática do grau de
maturação de pelotas de minério de ferro, 2012. Dissertação (Mestrado em Engenharia de
Materiais).
40
ANEXO A
7 INSTALAÇÃO DA BIBLIOTECA OPENCV 3.1
Todas as etapas a seguir necessitam que o Raspberry Pi tenha acesso à internet para
fazer todos downloads necessários. Não serão detalhadas todas as funcionalidades das
bibliotecas a serem instaladas. As instruções para a instalação de qualquer versão da
biblioteca OpenCV pode ser encontradas no site “raspberrypi.org”.
7.1 Instalação de Dependências
Primeiramente é importante atualizar algumas bibliotecas já instaladas no
microcomputador. Para isso é necessário abrir o terminal e inserir os seguintes comandos :
$ sudo apt-get update
$ sudo apt-get upgrade
Será instalado agora o compilador CMAKE, requerido para instalar a biblioteca
OpenCV :
$ sudo apt-get install build-essential cmake pkg-config
É necessario o uso algumas bibliotecas de imagens complementares para a leitura de
imagens com a câmera. Esses pacotes nos permitem fazer a leitura de diferentes formatos de
imagem tais como os formatos JPEG, PNG, TIFF, entre outros.
$ sudo apt-get install libjpeg8-dev libtiff4-dev libjasper-dev libpng12-dev
As bibliotecas a serem instaladas a seguir permitem obter videos em tempo real.
$ sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev
$ sudo apt-get install libxvidcore-dev libx264-dev
Instala-se agora a biblioteca de desenvolvimento GTK. Essa biblioteca é necessária
para construir interfaces gráficas para apresentação dos resultados e é utilizada pela biblioteca
HIGHGUI disponível no Opencv, que permite visualizar as imagens diretamente no monitor.
$ sudo apt-get install libgtk2.0-dev
Biblioteca para otimizar operações com a biblioteca OpenCV.
41
$ sudo apt-get install libatlas-base-dev gfortran
Instala-se as ferramentas python 2.7 e também a versão python 3 para poder gerar os
binários que possibilitam instalar a biblioteca OpenCV para trabalhar com Python.
$ sudo apt-get install python2.7-dev python3-dev
7.2 Download OpenCV
Agora que todas as dependências necessárias estão instaladas podemos baixar a
biblioteca OpenCV 3.1.
$ cd ~
$ wget -O opencv.zip https://github.com/Itseez/opencv/archive/3.1.0.zip
$ unzip opencv.zip
Instala-se uma ferramenta “opencv-contrib” que possibilita fazer um repositório
necessário para algumas funções da biblioteca OpenCV.
$ wget -O opencv_contrib.zip https://github.com/Itseez/opencv_contrib/archive/3.1.0.zip
$ unzip opencv_contrib.zip
7.3 Criação de um Ambiente Virtual
Antes de compilarmos a biblioteca OpenCV, necessitamos da ferramenta “pip” que
funciona como um gerenciador da linguagem Python.
$ wget https://bootstrap.pypa.io/get-pip.py
$ sudo python get-pip.py
É necessário criar um ambiente virtual que faça a ligação da biblioteca OpenCV com a
liguagem Pyhton para fazer a compilação da biblioteca. Para isso instala-se as
bibliotecas “virtualenv” e “virtualenvwrapper”.
$ sudo pip install virtualenv virtualenvwrapper
$ sudo rm -rf ~/.cache/pip
É necessário agora atualizar o arquivo ~/.profile e incluir as linhas a seguir.
export WORKON_HOME=$HOME/.virtualenvs
source /usr/local/bin/virtualenvwrapper.sh
Após salvar as alterações, insere-se o comando abaixo.
42
$ source ~/.profile
Cria-se agora o ambiente virtual com o qual usaremos para desenvolver aplicações
com processamento de imagens.
$ mkvirtualenv cv -p python2
Esse comando cria um ambiente virtual chamado “cv” permitindo usar a ferramenta
python. Falta agora instalar a ferramenta “numpy”, um pacote com ferramentas em linguagem
python usadas para desenvolver aplicações.
$ pip install numpy
7.4 Compilando e instalando a biblioteca Opencv 3.1
Será feita agora a compilação da biblioteca OpenCV. É importante que o ambiente
virtual cv criado na Parte 8 esteja ativado, uma vez que a biblioteca OpenCV é compilada com
as ferramentas Python e NumPy da Parte 9. Caso o ambiente cv não esteja ativado, o OpenCV
será compilado de maneira que possa ser incompatível com algumas funcionalidades das
ferramentas Python e NumPy e assim acarretar em erros.
$ cd opencv-3.1.0
$ mkdir build
$ cd build
$ cmake -D CMAKE_BUILD_TYPE=RELEASE -D
CMAKE_INSTALL_PREFIX=/usr/local -D BUILD_NEW_PYTHON_SUPPORT=ON -D
INSTALL_C_EXAMPLES=ON -D INSTALL_PYTHON_EXAMPLES=ON -D
BUILD_EXAMPLES=ON ..
Inserimos então o seguinte comando, que levará em torno de três horas para ser
concluído :
$ make -j4
O comando -j4 habilita o microcomputador a usar seus 4 núcleos, tornando a
compilação mais rápida. Após a compilação, finalmente é possível agora instalar a biblioteca
OpenCV :
$ sudo make install
$ sudo ldconfig
43
A biblioteca OpenCV foi instalada no local /usr/local/lib/python2.7/site-packages.
Para permitir utilizá-la no ambiente virtual cv criado anteriormente, deve-se inserir os
comandos a seguir.
$ cd ~/.virtualenvs/cv/lib/python2.7/site-packages/
$ ln -s /usr/local/lib/python2.7/site-packages/cv2.so cv2.so
$ ln -s /usr/local/lib/python2.7/site-packages/cv.py cv.py
Todas as ferramentas necessárias para o desenvolvimento do projeto estão prontas
para serem usadas. É necessário, antes de cada utilização das bibliotecas, inserir o seguinte
comando:
$ source ~/.profile
$ workon cv
Em seguinda, pode-se compilar o arquivo com o algoritmo que foi desenvolvido:
$ python TCC.py
Para a instalação da biblioteca OpenCV em outros sistemas operacionais pode-se
consultar o site „„opencv.org‟‟.