Py: openCV install(linux)
Py: openCV install(linux)

Computer Vision

Directory

Step by step Install OpenCV + Python3 virtualenv virtualenvwrapper

1 Update packages

sudo apt-get update
sudo apt-get upgrade

2 Install OS libraries

2.1 Remove any previous installation of x264

sudo apt-get remove x264 libx264-dev

2.2 Install dependencies

Ne pas hésiter à s’aider de Synaptic Package Manager si il ne trouve pas certaines libraires à la ligne de commande.

sudo apt-get install build-essential checkinstall cmake pkg-config yasm gfortran git
sudo apt-get install libjpeg8-dev libjasper-dev libpng12-dev
# If you are using Ubuntu 14.04
sudo apt-get install libtiff4-dev
# If you are using Ubuntu 16.04
sudo apt-get install libtiff5-dev
sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev libdc1394-22-dev
sudo apt-get install libxine2-dev libv4l-dev
sudo apt-get install libgstreamer0.10-dev libgstreamer-plugins-base0.10-dev
sudo apt-get install libqt4-dev libgtk2.0-dev libtbb-dev
sudo apt-get install libatlas-base-dev
sudo apt-get install libfaac-dev libmp3lame-dev libtheora-dev
sudo apt-get install libvorbis-dev libxvidcore-dev
sudo apt-get install libopencore-amrnb-dev libopencore-amrwb-dev
sudo apt-get install x264 v4l-utils

2.3 Optional dependencies

sudo apt-get install libprotobuf-dev protobuf-compiler
sudo apt-get install libgoogle-glog-dev libgflags-dev
sudo apt-get install libgphoto2-dev libeigen3-dev libhdf5-dev doxygen

3 Install Python libraries

Très probablement déja là

sudo apt-get install python-dev python-pip python3-dev python3-pip
sudo -H pip3 install -U pip numpy

3.1 Python virtualenv (bash)

# Install virtual environment
sudo pip3 install virtualenv virtualenvwrapper

# si bash: (normalement la plus part du monde)
echo "# Virtual Environment Wrapper"  >> ~/.bashrc
echo "source /usr/local/bin/virtualenvwrapper.sh" >> ~/.bashrc
source ~/.bashrc

# create virtual environment
mkvirtualenv test-py3
workon test-py3
  
# install python libraries within this virtual environment
pip install numpy scipy matplotlib scikit-image scikit-learn ipython
  
# quit virtual environment
deactivate

3.1.1 virtualenv avec ZSH

Si ZSH est utilisé à la place de bash, ouvrir le fichier ~/.zshrc et y ajouter:

# virtualenv and virtualenvwrapper
export WORKON_HOME=~/.venvs
source /usr/share/virtualenvwrapper/virtualenvwrapper.sh
export PIP_VIRTUALENV_BASE=~/.venvs

Pour ajouter le nom du venv courant au prompt, on ajoute virtualenv dans un des prompts dans le même fichier. Exemple:

POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(virtualenv dir_joined dir_writable_joined status context_joined)

Pour changer les couleurs:

POWERLEVEL9K_VIRTUALENV_BACKGROUND='clear'
POWERLEVEL9K_VIRTUALENV_FOREGROUND='green'

Python virtualenv (with zsh) CheatSheet

  • install(linux)
  • virtualenv doc

  • mkvirtualenv name $ \Rightarrow $ new virtualenv
  • workon name $ \Rightarrow $ switch to “name” virtualenv
  • workon $ \Rightarrow $ list virtualenvs
  • lsvirtualenv $ \Rightarrow $ same
  • deactivate $ \Rightarrow $ leave current virtualenv
  • virtualenv --version $ \Rightarrow $ check version

  • mkproject name $ \Rightarrow $ creates a project directory
  • deactivate $ \Rightarrow $ leave current project

  • rmvirtualenv name $ \Rightarrow $ delete project
  • cdvirtualenv $ \Rightarrow $ navigate into the directory of the currently activated venv.
  • lssitepackages $ \Rightarrow $ show content of site-packages directory

4 Download OpenCV & OpenCV_contrib

git clone https://github.com/opencv/opencv.git
cd opencv 
git checkout 2b44c0b6493726c465152e1db82cd8e65944d0db 
cd ..
git clone https://github.com/opencv/opencv_contrib.git
cd opencv_contrib
git checkout abf44fcccfe2f281b7442dac243e37b7f436d961
cd ..

5 Compile and install OpenCV with contrib modules

5.1 Create build directory inside OpenCV dir

cd opencv
mkdir build
cd build

5.2 Run CMake

cmake -D CMAKE_BUILD_TYPE=RELEASE \
      -D CMAKE_INSTALL_PREFIX=/usr/local \
      -D INSTALL_C_EXAMPLES=ON \
      -D INSTALL_PYTHON_EXAMPLES=ON \
      -D WITH_TBB=ON \
      -D WITH_V4L=ON \
      -D WITH_QT=ON \
      -D WITH_OPENGL=ON \
      -D OPENCV_EXTRA_MODULES_PATH=../../opencv_contrib/modules \
      -D BUILD_EXAMPLES=ON ..

5.3 Compile and install

sudo make install
sudo sh -c 'echo "/usr/local/lib" >> /etc/ld.so.conf.d/opencv.conf'
sudo ldconfig

Les binaires de OpenCV (cv2.so) penvent ếtre installés soit dans le fichier site-packages soit dist-packages. La commande suivante nous permet de connaitre le bon endroit:

find /usr/local/lib/ -type f -name "cv2*.so"

Cela devrait retourner des chemins d’acces similaires à un des suivants:

# dist-packages:
/usr/local/lib/python3.5/dist-packages/cv2.cpython-35m-x86_64-linux-gnu.so
/usr/local/lib/python3.6/dist-packages/cv2.cpython-36m-x86_64-linux-gnu.so
# site-packages:
/usr/local/lib/python3.5/site-packages/cv2.cpython-35m-x86_64-linux-gnu.so
/usr/local/lib/python3.6/site-packages/cv2.cpython-36m-x86_64-linux-gnu.so

Bien vérifier le chemin de notre machine avant de lancer la commande suivante:

cd ~/.virtualenvs/facecourse-py3/lib/python3.6/site-packages
ln -s /usr/local/lib/python3.6/dist-packages/cv2.cpython-36m-x86_64-linux-gnu.so cv2.so

6 Test OpenCV3

Télécharger RedEyeRemover.zip et l’extraire.

6.1 Test C++ code

Dans le fichier extrait, compiler et lancer:

# compile
# There are backticks ( ` ) around pkg-config command not single quotes
g++ -std=c++11 removeRedEyes.cpp `pkg-config --libs --cflags opencv` -o removeRedEyes
# run
./removeRedEyes

6.2 Test Python code

Activate Python venv

workon facecourse-py3

Quick check

# open ipython (run this command on terminal)
ipython
# import cv2 and print version (run following commands in ipython)
import cv2
print cv2.__version__
# If OpenCV3 is installed correctly, the above command should give output 3.2.0
# Press CTRL+D to exit ipython

Demo RedEyeRemover

python removeRedEyes.py
deactivate

A chaque fois qu’on veut travailler avec des scripts Python qui utilisent OpenCV, on devrait le faire à partir du venv créé ici.

Introduction

Lire une image:

cv2.imread('image', flag)

  • image doit soit être dans le working directory, soit on utilise un full path
  • flag spécifie la façon dont image doit être lue:
    • 1 $ \Rightarrow $ cv2.IMREAD_COLOR $ \Rightarrow $ img couleur, toute transarence est négligée (flag par défaut)
    • 0 $ \Rightarrow $ cv2.IMREAD_GRAYSCALE $ \Rightarrow $ grayscale mode
    • -1 $ \Rightarrow $ cv2.IMREAD_UNCHANGED $ \Rightarrow $ image originale
import numpy as np
import cv2

# Load an color image in grayscale
img = cv2.imread('messi.jpg', 0)

Si le path est erroné, aucune erreur n’apparait mais print(img) retourne None

Afficher une image:

cv2.imshow('window_name', image) $ \Rightarrow $ affiche l’image dans une nouvelle fenêtre (fit to the image size).

  • 'window_name' $ \Rightarrow $ une string avec le nom de la nouvelle fenêtre
  • image $ \Rightarrow $ image à afficher

Nous pouvons afficher autant d’images qu’on veut mais les fenêtres doivent porter des noms différents

import numpy as np
import cv2

# Load an color image in grayscale
img = cv2.imread('messi.jpg', 0)

cv2.imshow('image', img)
cv2.waitKey(0)
cv2.destroyAllWindows()

alt

  • cv2.waitKey() $ \Rightarrow $ permet de binder une touche (plus de détails suivent)
  • cv2.destroyAllWindows() $ \Rightarrow $ détruit toutes les fenếtres créés
  • cv2.destroyWindow() $ \Rightarrow $ détruit une fenêtre spécifique passée en argument

  • cv2.namedWindow('image', flag) $ \Rightarrow $ permet de set la taille de la fenêtre via l’argument flag:
    • cv2.WINDOW_AUTOSIZE $ \Rightarrow $ valeur par défaut
    • cv2.WINDOW_NORMAL $ \Rightarrow $ fenêtre redimensionnable

q pour quitter la lecture d’image

import numpy as np
import cv2

# Load an color image in grayscale
img = cv2.imread('hills.jpg', 0)

cv2.namedWindow('image', cv2.WINDOW_NORMAL)
cv2.imshow('image', img)
cv2.waitKey(0)
cv2.destroyAllWindows()