IA con Python - Visión por computadora

La visión por computadora se ocupa de modelar y replicar la visión humana mediante software y hardware. En este capítulo, aprenderá en detalle sobre esto.

Visión por computador

La visión por computadora es una disciplina que estudia cómo reconstruir, interrumpir y comprender una escena 3d a partir de sus imágenes 2d, en términos de las propiedades de la estructura presente en la escena.

Jerarquía de visión artificial

La visión por computadora se divide en tres categorías básicas de la siguiente manera:

  • Low-level vision - Incluye imagen de proceso para extracción de características.

  • Intermediate-level vision - Incluye reconocimiento de objetos e interpretación de escenas 3D

  • High-level vision - Incluye descripción conceptual de una escena como actividad, intención y comportamiento.

Visión por computadora Vs Procesamiento de imágenes

El procesamiento de imágenes estudia la transformación de imagen a imagen. La entrada y la salida del procesamiento de imágenes son imágenes.

La visión por computadora es la construcción de descripciones explícitas y significativas de objetos físicos a partir de su imagen. El resultado de la visión por computadora es una descripción o una interpretación de estructuras en una escena 3D.

Aplicaciones

La visión por computadora encuentra aplicaciones en los siguientes campos:

Robotics

  • Localización: determinar la ubicación del robot automáticamente

  • Navigation

  • Evitación de obstáculos

  • Montaje (clavija en agujero, soldadura, pintura)

  • Manipulación (por ejemplo, manipulador de robot PUMA)

  • Interacción de robot humano (HRI): robótica inteligente para interactuar y servir a las personas

Medicine

  • Clasificación y detección (por ejemplo, clasificación de lesiones o células y detección de tumores)

  • Segmentación 2D / 3D

  • Reconstrucción de órganos humanos en 3D (resonancia magnética o ultrasonido)

  • Cirugía robótica guiada por visión

Security

  • Biometría (iris, huellas dactilares, reconocimiento facial)
  • Vigilancia: detección de determinadas actividades o comportamientos sospechosos

Transportation

  • Vehículo autónomo
  • Seguridad, por ejemplo, vigilancia de la vigilancia del conductor

Industrial Automation Application

  • Inspección industrial (detección de defectos)
  • Assembly
  • Lectura de códigos de barras y etiquetas de paquetes
  • Clasificación de objetos
  • Comprensión de documentos (por ejemplo, OCR)

Instalación de paquetes útiles

Para la visión por computadora con Python, puede usar una biblioteca popular llamada OpenCV(Visión por computadora de código abierto). Es una biblioteca de funciones de programación orientada principalmente a la visión por computadora en tiempo real. Está escrito en C ++ y su interfaz principal está en C ++. Puede instalar este paquete con la ayuda del siguiente comando:

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

Aquí X representa la versión de Python instalada en su máquina, así como la versión win32 o 64 bit que tiene.

Si está utilizando el anaconda entorno, luego use el siguiente comando para instalar OpenCV -

conda install -c conda-forge opencv

Leer, escribir y mostrar una imagen

La mayoría de las aplicaciones de CV necesitan obtener las imágenes como entrada y producirlas como salida. En esta sección, aprenderá a leer y escribir archivos de imagen con la ayuda de las funciones proporcionadas por OpenCV.

Funciones OpenCV para leer, mostrar y escribir un archivo de imagen

OpenCV proporciona las siguientes funciones para este propósito:

  • imread() function- Esta es la función para leer una imagen. OpenCV imread () admite varios formatos de imagen como PNG, JPEG, JPG, TIFF, etc.

  • imshow() function- Esta es la función para mostrar una imagen en una ventana. La ventana se ajusta automáticamente al tamaño de la imagen. OpenCV imshow () admite varios formatos de imagen como PNG, JPEG, JPG, TIFF, etc.

  • imwrite() function- Esta es la función para escribir una imagen. OpenCV imwrite () admite varios formatos de imagen como PNG, JPEG, JPG, TIFF, etc.

Ejemplo

Este ejemplo muestra el código de Python para leer una imagen en un formato, mostrándola en una ventana y escribiendo la misma imagen en otro formato. Considere los pasos que se muestran a continuación:

Importe el paquete OpenCV como se muestra:

import cv2

Ahora, para leer una imagen en particular, use la función imread () -

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

Para mostrar la imagen, utilice el imshow()función. El nombre de la ventana en la que puede ver la imagen seríaimage_flower.

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

Ahora, podemos escribir la misma imagen en el otro formato, digamos .png usando la función imwrite () -

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

El resultado True significa que la imagen se ha escrito correctamente como archivo .png también en la misma carpeta.

True

Nota: la función destroyallWindows () simplemente destruye todas las ventanas que creamos.

Conversión de espacio de color

En OpenCV, las imágenes no se almacenan utilizando el color RGB convencional, sino que se almacenan en orden inverso, es decir, en el orden BGR. Por lo tanto, el código de color predeterminado al leer una imagen es BGR. loscvtColor() función de conversión de color para convertir la imagen de un código de color a otro.

Ejemplo

Considere este ejemplo para convertir una imagen de BGR a escala de grises.

Importar el OpenCV paquete como se muestra -

import cv2

Ahora, para leer una imagen en particular, use la función imread () -

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

Ahora, si vemos esta imagen usando imshow() función, entonces podemos ver que esta imagen está en BGR.

cv2.imshow('BGR_Penguins',image)

Ahora usa cvtColor() función para convertir esta imagen a escala de grises.

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

Detección de bordes

Los humanos, después de ver un boceto aproximado, pueden reconocer fácilmente muchos tipos de objetos y sus poses. Es por eso que los bordes juegan un papel importante en la vida de los humanos, así como en las aplicaciones de la visión por computadora. OpenCV proporciona una función muy simple y útil llamadaCanny()para detectar los bordes.

Ejemplo

El siguiente ejemplo muestra una clara identificación de los bordes.

Importe el paquete OpenCV como se muestra -

import cv2
import numpy as np

Ahora, para leer una imagen en particular, use el imread() función.

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

Ahora, usa el Canny () función para detectar los bordes de la imagen ya leída.

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

Ahora, para mostrar la imagen con bordes, use la función imshow ().

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

Este programa de Python creará una imagen llamada edges_penguins.jpg con detección de bordes.

Detección de rostro

La detección de rostros es una de las fascinantes aplicaciones de la visión por computadora que la hace más realista y futurista. OpenCV tiene una función incorporada para realizar la detección de rostros. Vamos a utilizar elHaar clasificador en cascada para la detección de rostros.

Datos de Haar Cascade

Necesitamos datos para usar el clasificador en cascada de Haar. Puede encontrar estos datos en nuestro paquete OpenCV. Después de instalar OpenCv, puede ver el nombre de la carpetahaarcascades. Habría archivos .xml para diferentes aplicaciones. Ahora, cópielos todos para diferentes usos y péguelos en una nueva carpeta debajo del proyecto actual.

Example

El siguiente es el código Python que usa Haar Cascade para detectar la cara de Amitabh Bachan que se muestra en la siguiente imagen:

Importar el OpenCV paquete como se muestra -

import cv2
import numpy as np

Ahora, usa el HaarCascadeClassifier para detectar la cara -

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

Ahora, para leer una imagen en particular, use el imread() función -

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

Ahora, conviértalo a escala de grises porque aceptaría imágenes grises.

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

Ahora, usando face_detection.detectMultiScale, realizar detección de rostros real

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

Ahora, dibuja un rectángulo alrededor de toda la cara.

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)

Este programa de Python creará una imagen llamada Face_AB.jpg con detección de rostros como se muestra

Detección de ojos

La detección de ojos es otra aplicación fascinante de la visión por computadora que la hace más realista y futurista. OpenCV tiene una función incorporada para realizar la detección de ojos. Vamos a utilizar elHaar cascade clasificador para la detección de ojos.

Ejemplo

El siguiente ejemplo muestra el código Python usando Haar Cascade para detectar el rostro de Amitabh Bachan que se muestra en la siguiente imagen:

Importe el paquete OpenCV como se muestra -

import cv2
import numpy as np

Ahora, usa el HaarCascadeClassifier para detectar la cara -

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

Ahora, para leer una imagen en particular, use el imread() función

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

Ahora, conviértalo a escala de grises porque aceptaría imágenes grises.

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

Ahora con la ayuda de eye_cascade.detectMultiScale, realiza detección de rostros real

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

Ahora, dibuja un rectángulo alrededor de toda la cara.

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)

Este programa de Python creará una imagen llamada Eye_AB.jpg con detección de ojos como se muestra -