AI con Python - Visione artificiale

La visione artificiale si occupa di modellare e replicare la visione umana utilizzando software e hardware per computer. In questo capitolo imparerai in dettaglio su questo.

Visione computerizzata

La computer vision è una disciplina che studia come ricostruire, interrompere e comprendere una scena 3d dalle sue immagini 2d, in termini di proprietà della struttura presente nella scena.

Gerarchia di visione artificiale

La visione artificiale è divisa in tre categorie di base come segue:

  • Low-level vision - Include l'immagine di processo per l'estrazione delle caratteristiche.

  • Intermediate-level vision - Include il riconoscimento degli oggetti e l'interpretazione della scena 3D

  • High-level vision - Include la descrizione concettuale di una scena come attività, intenzione e comportamento.

Computer Vision vs elaborazione delle immagini

L'elaborazione delle immagini studia la trasformazione da immagine a immagine. L'input e l'output dell'elaborazione delle immagini sono entrambi immagini.

La visione artificiale è la costruzione di descrizioni esplicite e significative di oggetti fisici a partire dalla loro immagine. Il risultato della visione artificiale è una descrizione o un'interpretazione delle strutture nella scena 3D.

Applicazioni

La visione artificiale trova applicazioni nei seguenti campi:

Robotics

  • Localizzazione: determina automaticamente la posizione del robot

  • Navigation

  • Evitamento degli ostacoli

  • Assemblaggio (piolo, saldatura, verniciatura)

  • Manipolazione (es. Manipolatore robotico PUMA)

  • Human Robot Interaction (HRI): robotica intelligente per interagire e servire le persone

Medicine

  • Classificazione e rilevamento (ad es. Classificazione di lesioni o cellule e rilevamento di tumori)

  • Segmentazione 2D / 3D

  • Ricostruzione 3D di organi umani (MRI o ultrasuoni)

  • Chirurgia robotica guidata dalla vista

Security

  • Biometria (iride, impronte digitali, riconoscimento facciale)
  • Sorveglianza: rilevamento di determinate attività o comportamenti sospetti

Transportation

  • Veicolo autonomo
  • Sicurezza, ad es. Monitoraggio della vigilanza del conducente

Industrial Automation Application

  • Ispezione industriale (rilevamento di difetti)
  • Assembly
  • Lettura del codice a barre e dell'etichetta della confezione
  • Ordinamento degli oggetti
  • Comprensione dei documenti (ad es. OCR)

Installazione di pacchetti utili

Per la visione artificiale con Python, puoi utilizzare una popolare libreria chiamata OpenCV(Visione artificiale open source). Si tratta di una libreria di funzioni di programmazione principalmente finalizzate alla visione artificiale in tempo reale. È scritto in C ++ e la sua interfaccia principale è in C ++. Puoi installare questo pacchetto con l'aiuto del seguente comando:

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

Qui X rappresenta la versione di Python installata sulla tua macchina così come il win32 o 64 bit che hai.

Se stai usando il anaconda ambiente, quindi utilizzare il seguente comando per installare OpenCV:

conda install -c conda-forge opencv

Leggere, scrivere e visualizzare un'immagine

La maggior parte delle applicazioni CV ha bisogno di ottenere le immagini come input e produrre le immagini come output. In questa sezione imparerai come leggere e scrivere file immagine con l'aiuto delle funzioni fornite da OpenCV.

Funzioni OpenCV per leggere, mostrare, scrivere un file immagine

OpenCV fornisce le seguenti funzioni a questo scopo:

  • imread() function- Questa è la funzione per leggere un'immagine. OpenCV imread () supporta vari formati di immagine come PNG, JPEG, JPG, TIFF, ecc.

  • imshow() function- Questa è la funzione per mostrare un'immagine in una finestra. La finestra si adatta automaticamente alla dimensione dell'immagine. OpenCV imshow () supporta vari formati di immagine come PNG, JPEG, JPG, TIFF, ecc.

  • imwrite() function- Questa è la funzione per scrivere un'immagine. OpenCV imwrite () supporta vari formati di immagine come PNG, JPEG, JPG, TIFF, ecc.

Esempio

Questo esempio mostra il codice Python per leggere un'immagine in un formato, mostrandolo in una finestra e scrivendo la stessa immagine in un altro formato. Considera i passaggi mostrati di seguito:

Importa il pacchetto OpenCV come mostrato -

import cv2

Ora, per leggere una particolare immagine, usa la funzione imread () -

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

Per mostrare l'immagine, usa il imshow()funzione. Il nome della finestra in cui puoi vedere l'immagine sarebbeimage_flower.

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

Ora possiamo scrivere la stessa immagine nell'altro formato, ad esempio .png usando la funzione imwrite () -

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

L'output True significa che l'immagine è stata scritta con successo come file .png anche nella stessa cartella.

True

Nota - La funzione destroyallWindows () distrugge semplicemente tutte le finestre che abbiamo creato.

Conversione dello spazio colore

In OpenCV, le immagini non vengono memorizzate utilizzando il colore RGB convenzionale, ma vengono memorizzate nell'ordine inverso, ovvero nell'ordine BGR. Quindi il codice colore predefinito durante la lettura di un'immagine è BGR. IlcvtColor() funzione di conversione del colore per convertire l'immagine da un codice colore all'altro.

Esempio

Considera questo esempio per convertire un'immagine da BGR a scala di grigi.

Importa il file OpenCV pacchetto come mostrato -

import cv2

Ora, per leggere una particolare immagine, usa la funzione imread () -

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

Ora, se vediamo questa immagine usando imshow() funzione, quindi possiamo vedere che questa immagine è in BGR.

cv2.imshow('BGR_Penguins',image)

Ora usa cvtColor() funzione per convertire questa immagine in scala di grigi.

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

Rilevamento dei bordi

Gli esseri umani, dopo aver visto uno schizzo approssimativo, possono riconoscere facilmente molti tipi di oggetti e le loro pose. Questo è il motivo per cui i bordi svolgono un ruolo importante nella vita degli esseri umani e nelle applicazioni della visione artificiale. OpenCV fornisce una funzione molto semplice e utile chiamataCanny()per rilevare i bordi.

Esempio

L'esempio seguente mostra una chiara identificazione dei bordi.

Importa il pacchetto OpenCV come mostrato -

import cv2
import numpy as np

Ora, per leggere un'immagine particolare, usa il file imread() funzione.

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

Ora usa il file Canny () funzione per rilevare i bordi dell'immagine già letta.

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

Ora, per mostrare l'immagine con i bordi, usa la funzione imshow ().

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

Questo programma Python creerà un'immagine denominata edges_penguins.jpg con rilevamento dei bordi.

Riconoscimento facciale

Il rilevamento dei volti è una delle affascinanti applicazioni della visione artificiale che lo rende più realistico oltre che futuristico. OpenCV ha una funzione incorporata per eseguire il rilevamento del volto. Useremo il fileHaar classificatore a cascata per il rilevamento dei volti.

Dati Haar Cascade

Abbiamo bisogno di dati per utilizzare il classificatore a cascata Haar. Puoi trovare questi dati nel nostro pacchetto OpenCV. Dopo aver installato OpenCv, puoi vedere il nome della cartellahaarcascades. Ci sarebbero file .xml per diverse applicazioni. Ora copiali tutti per un uso diverso e incollali in una nuova cartella sotto il progetto corrente.

Example

Quello che segue è il codice Python che utilizza Haar Cascade per rilevare il volto di Amitabh Bachan mostrato nell'immagine seguente -

Importa il file OpenCV pacchetto come mostrato -

import cv2
import numpy as np

Ora usa il file HaarCascadeClassifier per rilevare il viso -

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

Ora, per leggere un'immagine particolare, usa il file imread() funzione -

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

Ora convertilo in scala di grigi perché accetterebbe immagini in grigio -

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

Ora, usando face_detection.detectMultiScale, eseguire il rilevamento del volto effettivo

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

Ora, disegna un rettangolo attorno a tutta la faccia -

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)

Questo programma Python creerà un'immagine denominata Face_AB.jpg con rilevamento del volto come mostrato

Rilevamento degli occhi

Il rilevamento degli occhi è un'altra affascinante applicazione della visione artificiale che la rende più realistica oltre che futuristica. OpenCV ha una funzione incorporata per eseguire il rilevamento degli occhi. Useremo il fileHaar cascade classificatore per il rilevamento degli occhi.

Esempio

L'esempio seguente fornisce il codice Python utilizzando Haar Cascade per rilevare il volto di Amitabh Bachan mostrato nell'immagine seguente:

Importa il pacchetto OpenCV come mostrato -

import cv2
import numpy as np

Ora usa il file HaarCascadeClassifier per rilevare il viso -

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

Ora, per leggere un'immagine particolare, usa il file imread() funzione

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

Ora, convertilo in scala di grigi perché accetterebbe immagini in grigio -

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

Ora con l'aiuto di eye_cascade.detectMultiScale, eseguire il rilevamento del volto effettivo

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

Ora, disegna un rettangolo attorno a tutta la faccia -

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)

Questo programma Python creerà un'immagine denominata Eye_AB.jpg con rilevamento degli occhi come mostrato -