A tecnologia deu olhos aos computadores “clássicos” (desktops, notebooks e afins), smartphones e Single-Board Computers. Sistemas computacionais adquiriram a capacidade de “ver” e interpretar o que viram graças a uma vertente tecnológica que cresce cada vez mais: visão computacional. Em poucas palavras, a visão computacional é um campo da tecnologia de software que visa obter, analisar e filtrar características desejadas em imagens (estáticas ou vídeos), utilizando como base a junção de câmeras digitais, processamento de imagens, inteligência artificial e algoritmos de tratamento de imagens. A visão computacional permite, portanto, que computadores adquiram imagens do ambiente em que estão inseridos e busquem por características desejadas, de forma muito mais rápida, eficiente e eficaz que um ser humano faria. Dessa forma, a visão computacional deu verdadeiros “olhos biônicos” aos computadores.

O uso da visão computacional quebrou paradigmas. Muitas coisas que antes eram muito difíceis (ou até mesmo impossíveis) de serem mensuradas e detectadas por sensores agora só dependem de uma câmera e de algoritmos de visão computacional para serem possíveis, tais como: detecção de objetos em movimento, reconhecimento facial, reconhecimento de placas de veículos, estimativa de contagem populacional numa área pública em tempo real e muito mais.

Nesse artigo, você será introduzido ao OpenCV, uma das mais poderosas e populares bibliotecas de visão computacional existentes no mercado. Ainda, você aprenderá a instalar o OpenCV em sua Raspberry Pi 3B, o que lhe permitirá iniciar seus estudos nesse campo tão fascinante da tecnologia.

 

Dicas extra de leitura

mm iot site

 

Material necessário

Para reproduzir os exemplos práticos deste artigo, você precisará de uma Raspberry Pi 3B, mostrada na figura 1.

Figura 1 - Raspberry Pi 3B
Figura 1 - Raspberry Pi 3B | Clique na imagem para ampliar |

 

É altamente recomendável que você utilize cartão micro-SD classe 10 em sua Raspberry Pi, de modo que a utilização da mesma seja muito mais rápida em comparação ao uso de um cartão micro-SD comum. Além disso, dado o alto grau de processamento que o OpenCV demanda para funcionar, é altamente recomendável que você utilize um cooler em sua Raspberry Pi.

Este artigo supõe que você já esteja com a Raspberry Pi 3B totalmente operacional, ou seja, já esteja com o sistema operacional instalado, conexão à rede (cabeada ou wi-fi) estabelecida e que consiga acessar a placa via SSH.

 

 

OpenCV - o que é?

O OpenCV (Open Source Computer Vision Library) é uma biblioteca de visão computacional open-source multiplataforma. Foi desenvolvida em meados dos anos 2000 pela empresa Intel.

O OpenCV reúne todos os recursos necessários para realizar as mais variadas aplicações de visão computacional que você pode imaginar, abrangendo: aquisição / obtenção de imagens de câmeras digitais, e tratamento e processamento de imagens estáticas e vídeo (stream e vídeos gravados) e algoritmos de Inteligência Artificial. Em outras palavras, com OpenCV você pode fazer:

 

  • Aquisição de imagens: você pode fazer aquisição de imagens de uma câmera digital (uma webcam convencional, por exemplo)
  • Tratamento de imagens: tratar imagens estáticas e vídeos, de forma a alterar tamanho, cores, etc. dos mesmos
  • Processamento de imagens: você pode utilizar seus recursos de inteligência artificial contidos no OpenCV, de forma transparente, para as mais diversas tarefas, tais como: reconhecer objetos específicos em imagens, reconhecer faces, reconhecer animais e muito mais.

 

 

Figura 2 - logotipo do projeto OpenCV
Figura 2 - logotipo do projeto OpenCV | Clique na imagem para ampliar |

 

 

Pelo fato de ser muito popular e multiplataforma, é possível utilizar OpenCV nos mais variados sistemas operacionais (Windows, Linux, MacOS, Android, etc.) e com as mais variadas linguagens de programação (C, C++, Python, Java e mais uma infinidade delas). Isso faz com que o OpenCV seja aplicável em uma vasta gama de projetos comerciais e acadêmicos. Isso contribui muito para o crescimento da área de visão computacional mundo afora.

 Outra informação muito importante sobre o OpenCV é sobre sua licença de uso: em resumo, a biblioteca é livre para uso acadêmico e profissional, seguindo a lincença BSD Intel. Ou seja, você pode fazer produtos com OpenCV e não pagar nada em licenças e permissões de uso. Para isso, basta seguir os termos e normas da licença BSD Intel, disponível para consulta neste link: https://opensource.org/licenses/intel-open-source-license.php 

 Para mais detalhes e informações do OpenCV, visite o site oficial do projeto: https://opencv.org/ 

 

 

Onde o OpenCV pode ser usado?

Respondendo de forma curta e objetiva: em qualquer projeto que utilize visão computacional e que possua recursos computacionais para suportar o uso OpenCV.

Um dos únicos pontos de atenção ao se escolher entre usar ou não o OpenCV está nos recursos de hardware do projeto. Em geral, algoritmos que lidam com tratamento e processamento de imagens demandam muita memória e processamento do computador ao qual rodam. Ainda, quanto maiores (com mais resolução e qualidade) as imagens utilizadas forem, mais os algoritmos de tratamento e processamento de imagens vão trabalhar e, portanto, mais recursos computacionais serão exigidos.

Pelo fato de existir uma infinidade de possibilidades de projetos com visão computacional e OpenCV, existe também uma infinidade de casos de uso de recursos computacionais diferentes para projetos com OpenCV. Por essa razão, fica muito difícil (para não dizer impossível) estabelecer uma configuração mínima exigida universal para o OpenCV, uma vez que esta seria altamente dependente do uso desejado. Sendo assim, numa visão mais prática, é altamente aconselhável fazer medições de desempenho enquanto se roda o OpenCV em seu projeto, de forma a se ter noção prática do quanto o OpenCV está demandando do hardware de seu projeto numa dada tarefa e se será necessário um upgrade de hardware ou não.

Para se ter uma referência prática, projetos que envolvam aquisição, tratamento e processamento de imagens (estáticas ou vídeo) para fins de detecção e reconhecimento facial, detecção e obtenção de textos em imagens e buscar e contar objetos numa imagem normalmente podem ser executados com OpenCV em uma Raspberry Pi 3B tranquilamente. Só reforçando: nesses casos, é altamente aconselhável a utilização de um cooler para evitar que os cores do processador cheguem a temperaturas muito altas (o que pode diminuir a vida útil do mesmo).

 

 

Compilação e instalação do OpenCV na Raspberry Pi 3B

Agora que você já sabe o que é o OpenCV, para que serve e onde pode ser usado, é chegada a hora de instalá-lo. Como muitos dos projetos envolvendo visão computacional hoje rodam utilizando como hardware Single-Board Computers, julgo uma boa escolha ensinar o procedimento de compilação e instalação do OpenCV na Raspberry Pi (mais especificamente na versão 3B, a mais popular no momento da escrita deste artigo). Essa escolha se baseia no fato de que a popularidade da Raspberry Pi é enorme e você, leitor, provavelmente deve possuir uma aí por perto.

Para facilitar este processo, criei um script que, quando executado na Raspberry Pi 3B, já faz de forma automática a instalação de todas as dependências necessárias do OpenCV, assim como a compilação e instalação dele também. O script considera que o OpenCV será utilizado na versão 3.X do Python. O script completo encontra-se abaixo.

 

 

#!/bin/bash
echo ""
echo "-------------------------------------------------------------------"
echo "Instalando todos os pacotes necessarios para o OpenCV e Python 3..."
echo "-------------------------------------------------------------------"
echo ""
sudo apt-get install -y build-essential cmake pkg-config
sudo apt-get install -y libjpeg-dev libtiff5-dev libjasper-dev libpng12-dev
sudo apt-get install -y libavcodec-dev libavformat-dev libswscale-dev libv4l-dev
sudo apt-get install -y libxvidcore-dev libx264-dev
sudo apt-get install -y libgtk2.0-dev
sudo apt-get install -y libatlas-base-dev gfortran
sudo apt-get install -y python3-dev python3-pip
echo ""
echo "----------------------------------------"
echo "OpenCV 3.1.0 - download do codigo-fonte "
echo "----------------------------------------"
echo ""
cd ~
wget -O opencv.zip https://github.com/Itseez/opencv/archive/3.1.0.zip
unzip opencv.zip
wget -O opencv_contrib.zip https://github.com/Itseez/opencv_contrib/archive/3.1.0.zip
unzip opencv_contrib.zip
echo ""
echo "-------------------------------------"
echo "Instalando numpy e Scipy (Python3)..."
echo "-------------------------------------"
echo ""
sudo pip3 install numpy scipy
echo ""
echo "--------------------------"
echo "Compilando OpenCV 3.1.0..."
echo "--------------------------"
echo ""
cd ~/opencv-3.1.0/
mkdir build
cd build
cmake -D CMAKE_BUILD_TYPE=RELEASE \
    -D ENABLE_PRECOMPILED_HEADERS=OFF \
    -D CMAKE_INSTALL_PREFIX=/usr/local \
    -D INSTALL_PYTHON_EXAMPLES=ON \
    -D OPENCV_EXTRA_MODULES_PATH=~/opencv_contrib-3.1.0/modules \
    -D BUILD_EXAMPLES=ON ..
make -j4
echo ""
echo "---------------------------"
echo "Instalando OpenCV 3.1.0..."
echo "---------------------------"
echo ""
sudo make install
echo ""
echo "-------------------------"
echo "Finalizando instalacao..."
echo "-------------------------"
echo ""
sudo ldconfig
echo ""
echo "----------------------"
echo "Instalacao finalizada!"
echo "----------------------"
echo ""

 

 

Para executar esse script, siga o procedimento abaixo:

 

1. No terminal (via SSH), vá ao diretório home da Raspberry Pi. Para isso, utilize o comando abaixo:

cd ~

 

 

2. Abra o editor de texto nano para o arquivo do script, o qual será aqui chamado de opencv_compile_script.sh. Faça isso utilizando o comando abaixo:

nano opencv_compile_script.sh

 

 

3. Copie (Ctrl + C) e cole (utilizando as teclas Ctrl + Alt + V) o conteúdo do script fornecido acima dentro do editor de texto nano.

 

4. Saia do editor de texto nano e salve o conteúdo inserido pressionando Ctrl + X e depois a tecla S (ou Y, se seu sistema operacional da Raspberry Pi estiver em inglês).

 

5. Dê permissão de execução ao script utilizando o seguinte comando:

chmod +x opencv_compile_script.sh

 

6. Por fim, execute o script como super usuário, conforme comando abaixo. A compilação e instalação do OpenCV irá demorar cerca de duas horas (se você utilizar um cartão micro-SD classe 10, conforme recomendado). É importante que durante este procedimento você não utilize a Raspberry Pi para mais nada, uma vez que este irá utilizar muitos recursos computacionais (processamento e memórias) da placa.

sudo ./opencv_compile_script.sh

 

7. Após a execução completa do script, você pode testar se deu tudo certo abrindo o Python 3 e importando a biblioteca OpenCV. Para isso execute os comandos abaixo:

python3

 

Isso fará abrir o interpretador Python 3. Nele, digite:

import cv2

 

Se não houver erros na execução do “import cv2” no interpretador Python 3, o OpenCV foi compilado e instalado com sucesso.

Para sair do interpretador Python 3, pressione as teclas Ctrl + D.

 

Entendendo o script de compilação e instalação do OpenCV na Raspberry Pi 3B

Para melhor compreender o script utilizado para a compilação e instalação do OpenCV na Raspberry Pi 3B, iremos dividi-lo em seis seções.

Na primeira seção, é feita a instalação de todas as dependências do OpenCV. Esta pode ser vista abaixo.

echo ""
echo "-------------------------------------------------------------------"
echo "Instalando todos os pacotes necessarios para o OpenCV e Python 3..."
echo "-------------------------------------------------------------------"
echo ""
sudo apt-get install -y build-essential cmake pkg-config
sudo apt-get install -y libjpeg-dev libtiff5-dev libjasper-dev libpng12-dev
sudo apt-get install -y libavcodec-dev libavformat-dev libswscale-dev libv4l-dev
sudo apt-get install -y libxvidcore-dev libx264-dev
sudo apt-get install -y libgtk2.0-dev
sudo apt-get install -y libatlas-base-dev gfortran
sudo apt-get install -y python3-dev python3-pip

 

 

Na segunda seção do código, é baixado o código-fonte do OpenCV do seu repositório oficial no Github. É baixada a versão 3.1.0, uma das versões mais estáveis atualmente.. Esta seção está abaixo:

echo ""
echo "----------------------------------------"
echo "OpenCV 3.1.0 - download do codigo-fonte "
echo "----------------------------------------"
echo ""
cd ~
wget -O opencv.zip https://github.com/Itseez/opencv/archive/3.1.0.zip
unzip opencv.zip
wget -O opencv_contrib.zip https://github.com/Itseez/opencv_contrib/archive/3.1.0.zip
unzip opencv_contrib.zip

 

 

Na quarta seção, é chegada a hora da compilação do OpenCV. Esta parte é a mais demorada (leva em torno de duas horas para ser concluída, utilizando cartão micro-SD classe 10 na Raspberry Pi 3B).

Note que a compilação faz uso do parâmetro j4 no comando make. Isso faz com que todos os núcleos (cores) do processador da Raspberry Pi 3B sejam utilizados nesta compilação, o que minimiza o tempo total deste processo. Sem este parâmetro, o tempo total de compilação poderia subir de duas horas para 8 ou 9 horas (ou até mais, caso não for utilizado o cartão micro-SD classe 10). Esta seção se encontra abaixo:

echo ""
echo "--------------------------"
echo "Compilando OpenCV 3.1.0..."
echo "--------------------------"
echo ""
cd ~/opencv-3.1.0/
mkdir build
cd build
cmake -D CMAKE_BUILD_TYPE=RELEASE \
    -D ENABLE_PRECOMPILED_HEADERS=OFF \
    -D CMAKE_INSTALL_PREFIX=/usr/local \
    -D INSTALL_PYTHON_EXAMPLES=ON \
    -D OPENCV_EXTRA_MODULES_PATH=~/opencv_contrib-3.1.0/modules \
    -D BUILD_EXAMPLES=ON ..
make -j4

 

Por fim, na quinta e sexta seções, é feita a instalação do OpenCV compilado e o processo de links no Linux para a biblioteca, conforme mostrado abaixo:

echo ""
echo "---------------------------"
echo "Instalando OpenCV 3.1.0..."
echo "---------------------------"
echo ""
sudo make install
echo ""
echo "-------------------------"
echo "Finalizando instalacao..."
echo "-------------------------"
echo ""
sudo ldconfig

 

 

Conclusão

Neste artigo, você aprendeu o que é, o que abrange e onde é usado o OpenCV. Ainda, você também aprendeu como compilar e instalar o OpenCV na Raspberry Pi 3B. Desta forma, você já tem o conhecimento e ferramentas necessários para iniciar seus estudos na área de visão computacional com OpenCV.

A área de visão computacional está em grande crescimento na tecnologia. Logo, trata-se de um campo muito atrativo para se explorar, sobretudo pelos estudiosos e por aqueles que desejam um lugar no mercado de tecnologia nos próximos anos.