AI avec Python - Vision par ordinateur

La vision par ordinateur concerne la modélisation et la reproduction de la vision humaine à l'aide de logiciels et de matériel informatique. Dans ce chapitre, vous en apprendrez plus à ce sujet.

Vision par ordinateur

La vision par ordinateur est une discipline qui étudie comment reconstruire, interrompre et comprendre une scène 3D à partir de ses images 2D, en fonction des propriétés de la structure présente dans la scène.

Hiérarchie de la vision par ordinateur

La vision par ordinateur est divisée en trois catégories de base comme suit -

  • Low-level vision - Il comprend une image de processus pour l'extraction des caractéristiques.

  • Intermediate-level vision - Il comprend la reconnaissance d'objets et l'interprétation de scènes 3D

  • High-level vision - Il comprend une description conceptuelle d'une scène comme l'activité, l'intention et le comportement.

Vision par ordinateur vs traitement d'image

Le traitement d'image étudie la transformation d'image en image. L'entrée et la sortie du traitement d'image sont toutes deux des images.

La vision par ordinateur est la construction de descriptions explicites et significatives d'objets physiques à partir de leur image. Le résultat de la vision par ordinateur est une description ou une interprétation de structures dans une scène 3D.

Applications

La vision par ordinateur trouve des applications dans les domaines suivants -

Robotics

  • Localisation: déterminez automatiquement l'emplacement du robot

  • Navigation

  • Évitement des obstacles

  • Assemblage (peg-in-hole, soudure, peinture)

  • Manipulation (par exemple, manipulateur de robot PUMA)

  • Human Robot Interaction (HRI): la robotique intelligente pour interagir et servir les gens

Medicine

  • Classification et détection (par exemple, classification des lésions ou des cellules et détection des tumeurs)

  • Segmentation 2D / 3D

  • Reconstruction d'organes humains en 3D (IRM ou échographie)

  • Chirurgie robotique guidée par la vision

Security

  • Biométrie (iris, empreinte digitale, reconnaissance faciale)
  • Surveillance-détection de certaines activités ou comportements suspects

Transportation

  • Véhicule autonome
  • Sécurité, p. Ex. Surveillance de la vigilance du conducteur

Industrial Automation Application

  • Inspection industrielle (détection de défauts)
  • Assembly
  • Lecture de codes-barres et d'étiquettes d'emballage
  • Tri d'objets
  • Compréhension des documents (par exemple OCR)

Installer des packages utiles

Pour la vision par ordinateur avec Python, vous pouvez utiliser une bibliothèque populaire appelée OpenCV(Open Source Computer Vision). Il s'agit d'une bibliothèque de fonctions de programmation principalement destinées à la vision par ordinateur en temps réel. Il est écrit en C ++ et son interface principale est en C ++. Vous pouvez installer ce package à l'aide de la commande suivante -

pip install opencv_python-X.X-cp36-cp36m-winX.whl

Ici, X représente la version de Python installée sur votre machine ainsi que le win32 ou 64 bits que vous avez.

Si vous utilisez le anaconda environnement, puis utilisez la commande suivante pour installer OpenCV -

conda install -c conda-forge opencv

Lire, écrire et afficher une image

La plupart des applications CV ont besoin d'obtenir les images en entrée et de produire les images en sortie. Dans cette section, vous apprendrez à lire et à écrire un fichier image à l'aide des fonctions fournies par OpenCV.

Fonctions OpenCV pour lire, afficher, écrire un fichier image

OpenCV fournit les fonctions suivantes à cet effet -

  • imread() function- C'est la fonction de lecture d'une image. OpenCV imread () prend en charge divers formats d'image tels que PNG, JPEG, JPG, TIFF, etc.

  • imshow() function- C'est la fonction pour afficher une image dans une fenêtre. La fenêtre s'adapte automatiquement à la taille de l'image. OpenCV imshow () prend en charge divers formats d'image tels que PNG, JPEG, JPG, TIFF, etc.

  • imwrite() function- C'est la fonction d'écriture d'une image. OpenCV imwrite () prend en charge divers formats d'image tels que PNG, JPEG, JPG, TIFF, etc.

Exemple

Cet exemple montre le code Python pour lire une image dans un format - l'afficher dans une fenêtre et écrire la même image dans un autre format. Considérez les étapes ci-dessous -

Importez le package OpenCV comme indiqué -

import cv2

Maintenant, pour lire une image particulière, utilisez la fonction imread () -

image = cv2.imread('image_flower.jpg')

Pour afficher l'image, utilisez le imshow()fonction. Le nom de la fenêtre dans laquelle vous pouvez voir l'image seraitimage_flower.

cv2.imshow('image_flower',image)
cv2.destroyAllwindows()

Maintenant, nous pouvons écrire la même image dans l'autre format, disons .png en utilisant la fonction imwrite () -

cv2.imwrite('image_flower.png',image)

La sortie True signifie que l'image a été écrite avec succès en tant que fichier .png également dans le même dossier.

True

Remarque - La fonction destroyallWindows () détruit simplement toutes les fenêtres que nous avons créées.

Conversion d'espace colorimétrique

Dans OpenCV, les images ne sont pas stockées en utilisant la couleur RVB conventionnelle, mais elles sont stockées dans l'ordre inverse, c'est-à-dire dans l'ordre BGR. Par conséquent, le code couleur par défaut lors de la lecture d'une image est BGR. lecvtColor() fonction de conversion des couleurs pour convertir l'image d'un code couleur à un autre.

Exemple

Considérez cet exemple pour convertir une image de BGR en niveaux de gris.

Importez le OpenCV paquet comme indiqué -

import cv2

Maintenant, pour lire une image particulière, utilisez la fonction imread () -

image = cv2.imread('image_flower.jpg')

Maintenant, si nous voyons cette image en utilisant imshow() fonction, alors nous pouvons voir que cette image est en BGR.

cv2.imshow('BGR_Penguins',image)

Maintenant, utilisez cvtColor() fonction pour convertir cette image en niveaux de gris.

image = cv2.cvtColor(image,cv2.COLOR_BGR2GRAY)
cv2.imshow('gray_penguins',image)

Détection des bords

Les humains, après avoir vu un croquis approximatif, peuvent facilement reconnaître de nombreux types d'objets et leurs poses. C'est pourquoi les arêtes jouent un rôle important dans la vie des humains ainsi que dans les applications de la vision par ordinateur. OpenCV fournit une fonction très simple et utile appeléeCanny()pour détecter les bords.

Exemple

L'exemple suivant montre une identification claire des arêtes.

Importez le package OpenCV comme indiqué -

import cv2
import numpy as np

Maintenant, pour lire une image particulière, utilisez le imread() fonction.

image = cv2.imread('Penguins.jpg')

Maintenant, utilisez le Canny () fonction de détection des bords de l'image déjà lue.

cv2.imwrite(‘edges_Penguins.jpg’,cv2.Canny(image,200,300))

Maintenant, pour afficher l'image avec des bords, utilisez la fonction imshow ().

cv2.imshow(‘edges’, cv2.imread(‘‘edges_Penguins.jpg’))

Ce programme Python créera une image nommée edges_penguins.jpg avec détection des bords.

Détection facial

La détection des visages est l'une des applications fascinantes de la vision par ordinateur, ce qui la rend plus réaliste et futuriste. OpenCV dispose d'une fonction intégrée pour effectuer la détection des visages. Nous allons utiliser leHaar classificateur en cascade pour la détection de visage.

Données Haar Cascade

Nous avons besoin de données pour utiliser le classificateur en cascade Haar. Vous pouvez trouver ces données dans notre package OpenCV. Après avoir installé OpenCv, vous pouvez voir le nom du dossierhaarcascades. Il y aurait des fichiers .xml pour différentes applications. Maintenant, copiez-les tous pour une utilisation différente et collez-les ensuite dans un nouveau dossier sous le projet actuel.

Example

Ce qui suit est le code Python utilisant Haar Cascade pour détecter le visage d'Amitabh Bachan montré dans l'image suivante -

Importez le OpenCV paquet comme indiqué -

import cv2
import numpy as np

Maintenant, utilisez le HaarCascadeClassifier pour détecter le visage -

face_detection=
cv2.CascadeClassifier('D:/ProgramData/cascadeclassifier/
haarcascade_frontalface_default.xml')

Maintenant, pour lire une image particulière, utilisez le imread() fonction -

img = cv2.imread('AB.jpg')

Maintenant, convertissez-le en niveaux de gris car il accepterait les images grises -

gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

Maintenant, en utilisant face_detection.detectMultiScale, effectuer une détection de visage réelle

faces = face_detection.detectMultiScale(gray, 1.3, 5)

Maintenant, dessinez un rectangle autour de tout le visage -

for (x,y,w,h) in faces:
   img = cv2.rectangle(img,(x,y),(x+w, y+h),(255,0,0),3)
cv2.imwrite('Face_AB.jpg',img)

Ce programme Python créera une image nommée Face_AB.jpg avec détection de visage comme indiqué

Détection des yeux

La détection oculaire est une autre application fascinante de la vision par ordinateur qui la rend plus réaliste et futuriste. OpenCV dispose d'une fonction intégrée pour effectuer la détection des yeux. Nous allons utiliser leHaar cascade classificateur pour la détection des yeux.

Exemple

L'exemple suivant donne le code Python utilisant Haar Cascade pour détecter le visage d'Amitabh Bachan donné dans l'image suivante -

Importez le package OpenCV comme indiqué -

import cv2
import numpy as np

Maintenant, utilisez le HaarCascadeClassifier pour détecter le visage -

eye_cascade = cv2.CascadeClassifier('D:/ProgramData/cascadeclassifier/haarcascade_eye.xml')

Maintenant, pour lire une image particulière, utilisez le imread() fonction

img = cv2.imread('AB_Eye.jpg')

Maintenant, convertissez-le en niveaux de gris car il accepterait les images grises -

gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

Maintenant avec l'aide de eye_cascade.detectMultiScale, effectuer une détection de visage réelle

eyes = eye_cascade.detectMultiScale(gray, 1.03, 5)

Maintenant, dessinez un rectangle autour de tout le visage -

for (ex,ey,ew,eh) in eyes:
   img = cv2.rectangle(img,(ex,ey),(ex+ew, ey+eh),(0,255,0),2)
cv2.imwrite('Eye_AB.jpg',img)

Ce programme Python créera une image nommée Eye_AB.jpg avec détection des yeux comme indiqué -