OpenCV es la enorme biblioteca de código abierto para visión por computadora, aprendizaje automático y procesamiento de imágenes y ahora juega un papel importante en la operación en tiempo real, lo cual es muy importante en los sistemas actuales. Al usarlo, uno puede procesar imágenes y videos para identificar objetos, rostros o incluso la escritura a mano de un ser humano. Este artículo se centra en la detección de objetos.
Nota: Para obtener más información, consulte Introducción a OpenCV .
Detección de objetos
La detección de objetos es una tecnología informática relacionada con la visión por computadora, el procesamiento de imágenes y el aprendizaje profundo que se ocupa de detectar instancias de objetos en imágenes y videos. Haremos la detección de objetos en este artículo usando algo conocido como cascadas de haar .
cascadas de haar
Los clasificadores Haar Cascade son una forma eficaz de detección de objetos. Este método fue propuesto por Paul Viola y Michael Jones en su artículo Detección rápida de objetos utilizando una cascada potenciada de características simples . Haar Cascade es un enfoque basado en el aprendizaje automático en el que se utilizan muchas imágenes positivas y negativas para entrenar al clasificador.
- Imágenes positivas: estas imágenes contienen las imágenes que queremos que nuestro clasificador identifique.
- Imágenes negativas: imágenes de todo lo demás, que no contienen el objeto que queremos detectar.
Requisitos.
Pasos para descargar los requisitos a continuación:
- Ejecute el siguiente comando en la terminal para instalar opencv.
pip install opencv-python
- Ejecute el siguiente comando para instalar matplotlib en la terminal.
pip install matplotlib
- Para descargar el archivo de cascada haar y la imagen utilizada en el siguiente código como archivo zip, haga clic aquí .
Nota: Coloque el archivo XML y la imagen PNG en la misma carpeta que su secuencia de comandos de Python.
Implementación
Imagen utilizada:
Abriendo una imagen
import cv2 from matplotlib import pyplot as plt # Opening image img = cv2.imread("image.jpg") # OpenCV opens images as BRG # but we want it as RGB and # we also need a grayscale # version img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) img_rgb = cv2.cvtColor(img, cv2.COLOR_BGR2RGB) # Creates the environment # of the picture and shows it plt.subplot(1, 1, 1) plt.imshow(img_rgb) plt.show()
Producción:
Reconocimiento
Usaremos la detectMultiScale()
función de OpenCV para reconocer tanto señales grandes como pequeñas:
# Use minSize because for not # bothering with extra-small # dots that would look like STOP signs found = stop_data.detectMultiScale(img_gray, minSize =(20, 20)) # Don't do anything if there's # no sign amount_found = len(found) if amount_found != 0: # There may be more than one # sign in the image for (x, y, width, height) in found: # We draw a green rectangle around # every recognized sign cv2.rectangle(img_rgb, (x, y), (x + height, y + width), (0, 255, 0), 5)
Aquí está el guión completo para desarrolladores perezosos:
import cv2 from matplotlib import pyplot as plt # Opening image img = cv2.imread("image.jpg") # OpenCV opens images as BRG # but we want it as RGB We'll # also need a grayscale version img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) img_rgb = cv2.cvtColor(img, cv2.COLOR_BGR2RGB) # Use minSize because for not # bothering with extra-small # dots that would look like STOP signs stop_data = cv2.CascadeClassifier('stop_data.xml') found = stop_data.detectMultiScale(img_gray, minSize =(20, 20)) # Don't do anything if there's # no sign amount_found = len(found) if amount_found != 0: # There may be more than one # sign in the image for (x, y, width, height) in found: # We draw a green rectangle around # every recognized sign cv2.rectangle(img_rgb, (x, y), (x + height, y + width), (0, 255, 0), 5) # Creates the environment of # the picture and shows it plt.subplot(1, 1, 1) plt.imshow(img_rgb) plt.show()
Producción :