Detectar un objeto con OpenCV-Python

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:

python-opencv-detect-image

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:

detect-object-python-opencv

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 :

python-opencv-detect-image

Publicación traducida automáticamente

Artículo escrito por ROOT0x57B y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *