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 -