Instalando o PyOpenCV no Ubuntu 18.04

Ultimamente tenho começado meus estudo de visão computacional e por isso precisei encontrar uma forma de instalar o OpenCV no meu computador. Como utilizo o Ubuntu 18.04 no pc de casa e no notebook, acabei criando um passo a passo sobre a instalação do OpenCV

Para quem não sabe a Visão computacional é um campo de pesquisa da computação que busca fazer com que os computadores consigam um alto nível de compreensão de uma imagem digital ou vídeo. Do ponto de vista da engenharia, ele procura automatizar tarefas de forma semelhante ao que o sistema visual humano pode fazer(https://en.wikipedia.org/wiki/Computer_vision)

Para endtender melhor veja este TED da pesquisadora Fei Fei Li mostrando muito bem sobre o que é visão computacional e seus principais desafios.

A biblioteca de programação OpenCV (Open Source Computer Vision) oferece funcionalidade em tempo real de visão computacional. Criada em 1999 pela Intel, elá é uma biblioteca multiplataforma de código aberto e livre para uso seguindo o modelo da licença BSD.

A OpenCV é escrito em C++/C mas existem bindings para Python, Java e MATLAB/OCTAVE. Ela pode ser baixada em seu site oficial https://opencv.org/

Mas vamos deixar de papo e vamos começar a instalação

0. Ambiente

Sistema Operacional: Ubuntu 18.04.1 LTS

Software: OpenCV 3.4 ou maior, python3 e virtualenv

1. Instalando dependências

Durante todo o tutorial vamos utilizar o shell, abra ele e execute os comandos abaixo.

Para configurar e compilar o OpenCV é necessário instalar alguns pacotes e dependências necessárias para a configuração e correta compilação.

$ sudo apt-get install build-essential cmake unzip pkg-config

Agora vamos instalar dependências especificas do OpenCV, como ele processa imagens é necessário instalar o suporte aos formatos padrões tais como JPEG, PNG, TIFF, etc.

$ sudo apt-get install libjpeg-dev libpng-dev libtiff-dev

O mesmo para vídeos, vamos instalar o suporte aos formatos mais utilizados.

$ sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev 
$ sudo apt-get install libxvidcore-dev libx264-dev

Para abrir e exibir imagens/vídeos o OpenCV utiliza o GTK para criar as janelas e interfaces gráficas.

$ sudo apt-get install libgtk-3-dev

E estás duas bibliotecas otimizam varias funções do OpenCV:

$ sudo apt-get install libatlas-base-dev gfortran

E finalmente as bibliotecas de desenvolvimento do Python3

$ sudo apt-get install python3-dev

2. Baixando o código fonte do OpenCV

Em quanto estou escrevendo este tutorial no site https://opencv.org/ a ultima versão disponível é o OpenCV 3.4.1.

Vamos baixá-lo utilizando o wget

$ cd ~
$ wget -O opencv.zip https://github.com/opencv/opencv/archive/3.4.1.zip

E vamos baixar também o modulo opencv_contrib

$ wget -O opencv_contrib.zip https://github.com/opencv/opencv_contrib/archive/3.4.1.zip

Perceba que baixamos todos os arquivos na pasta padrão do seu usuário.

Importante: as versões do opencv e do opencv_contrib devem ser de versões idênticas para não ter problemas de compatibilidade.

Agora vamos descompactar os arquivos.

$ unzip opencv.zip 
$ unzip opencv_contrib.zip

3. Criando um ambiente virtual python

Para garantirmos que não teremos problema futuros com versões incompatíveis de python, pacotes e outros vamos criar um ambiente virtual com o virtualenv para trabalhamos com o OpenCV.

Primeiro vamos criar um diretório e depois vamos criar o ambiente.

$ mkdir OpenCV 
$ cd OpenCV/ 
$ virtualenv -p python3 venv

Agora vamos ativar o ambiente

$ source venv/bin/activate 
(venv) william@william-desktop:~/OpenCV$ 

O OpenCV precisa da biblioteca NumPY, vamos instalá-la em nosso ambiente.

$ pip install numpy

4. Configurando e compilando o OpenCV no Ubuntu 18.04

É muito importante que neste passo você esteja com o ambiente virtual ativado, para verificar pode utilizar o comando a baixo

(venv) william@william-desktop:~/OpenCV$ which python 
/home/william/OpenCV/venv/bin/python

Pela saída do comando pode ser ver que o python utilizado está no caminho correto para o ambiente virtual criado anteriormente.

5. Configurando o OpenCV com o CMake

Agora vamos preparar o OpenCV com o CMake para depois compilar.

$ cd ~/opencv-3.4.1/ 
$ mkdir build 
$ cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D INSTALL_PYTHON_EXAMPLES=ON -D INSTALL_C_EXAMPLES=OFF -D OPENCV_EXTRA_MODULES_PATH=~/opencv_contrib-3.4.1/modules -D PYTHON_EXECUTABLE=/home/william/OpenCV/venv/bin/python -D BUILD_EXAMPLES=ON ..

Nos parâmetros passado para o CMake tem a variável “ PYTHON_EXECUTABLE” deixe ela apontado para o python do seu ambiente virtual, saída do comando which executado agora a pouco. O meu ficou "PYTHON_EXECUTABLE=/home/william/OpenCV/venv/bin/python" .

Agora esperar alguns minutos e depois verifique na saída se foi tudo ok, caso tenha algum problema, revise os passo anteriores, veja se o ambiente está ativado, apague tudo da pasta build e rode o cmake novamente.

6. Compilando o OpenCV no Ubuntu 18.04

Agora com tudo pronto, ainda dentro da pasta build vamos compilar o OpenCV

$ make -j4

Este processo pode demorar 30 minutos ou mais, dependendo da configuração do pc.

7. Instalando

Com os arquivos compilados agora vamos instalar nossa biblioteca de visão computacional em nosso computador

$ sudo make install 
$ sudo ldconfig

8. Finalizando a instalação do Python + OpenCV + Ubuntu 18.04

Os arquivos do OpenCV para Python 3 estão na seguinte pasta

$ ls /usr/local/lib/python3.6/site-packages/
cv2.cpython-36m-x86_64-linux-gnu.so

Vamos renomeá-los para cv2.so para facilitar a importação.

$ cd /usr/local/lib/python3.6/site-packages/ 
$ sudo mv cv2.cpython-36m-x86_64-linux-gnu.so cv2.so

E como ultimo passo vamos criar um link simbólico da biblioteca para dentro do nosso ambiente virtual configurado.

$ cd ~/OpenCV/venv/lib/python3.6/site-packages/
$ ln -s /usr/local/lib/python3.6/site-packages/cv2.so cv2.so

9. Testando o OpenCV

Lembre-se de estar com o ambiente virtual ativado ^_^

$ python Python 3.6.5 (default, May 29 2018, 14:54:29) [GCC 7.3.0] on linux Type "help", "copyright", "credits" or "license" for more information. 
>>> import cv2 
>>> cv2.__version__ '3.4.1' 
>>> 

10. Bônus: Detectando uma face

Vamos criar um pequeno programa que abre uma imagem e detecta e marca as faces encontradas.

Crie um programa python com o seguinte conteúdo.

Conteudo do arquivo detectface.py

# Importa o OpenCV
import cv2

# Define o caminho para o classificador, neste caso Haar Cascade
caminho_classificador = "haarcascade_frontalface_default.xml"
# Define o caminho para a imagem
caminho_imagem = "lenna.png"

# Criar o classificador
classificador = cv2.CascadeClassifier(caminho_classificador)

# Le a imagem
imagem = cv2.imread(caminho_imagem)

# Converte a imagem para escala de cinza
cinza = cv2.cvtColor(imagem, cv2.COLOR_BGR2GRAY)

# Detecta as faces na imagem
faces = classificador.detectMultiScale(
    cinza,
    scaleFactor=1.1,
    minNeighbors=5,
    minSize=(30, 30),
    flags=cv2.CASCADE_SCALE_IMAGE
)

# Desenha um retangulo para cada face encontrada
for (x, y, w, h) in faces:
    cv2.rectangle(imagem, (x, y), (x+w, y+h), (0, 255, 0), 2)

# Mostra a imagem (colorida) com os retangulos desenhados
cv2.imshow("Faces found", imagem)
# Aguarda tecla para fechar a janela
cv2.waitKey(0)

Agora vamos baixar o arquivo xml classificado de face que pode ser encontrado neste link https://github.com/Itseez/opencv/tree/master/data e vamos aproveitar para baixar uma imagem para o texte.

Dentro da pasta que está o programa python que acabamos de criar e com o ambiente virtual ativado execute o seguinte comando.

$ wget -c https://raw.githubusercontent.com/opencv/opencv/master/data/haarcascades/haarcascade_frontalface_default.xml

$ wget -c https://dicasti.s3.amazonaws.com/media/uploads/2018/08/03/lenna.png

Agora execute o programa e veja o resultado

$ python opencv.py

[ INFO:0] Initialize OpenCL runtime...

Detecção de Face com OpenCV e Python
 

Referências

https://www.pyimagesearch.com/2018/05/28/ubuntu-18-04-how-to-install-opencv/

https://linuxconfig.org/install-opencv-on-ubuntu-18-04-bionic-beaver-linux

https://updatedcode.wordpress.com/2016/04/01/deteccao-facial-com-python-e-opencv/


 

 

Sobre o Dicas TI

Somente mais um site sobre internet, tecnologia, desenvolvimento e programação. Uma forma de, tentar, devolver o que aprendi na internet através de pesquisas e estudos. E como falou o pensador Joseph Joubert “Ensinar é aprender duas vezes” mas não se engane aqui você encontrara somente um leve rascunho uma tentativa de ensino e nada mais.