Detección de objetos con ImageAI en Python

D

Introducción

La detección de objetos es una tecnología que pertenece al dominio más amplio de Visión por computador. Se trata de identificar y rastrear objetos presentes en imágenes y videos. La detección de objetos tiene múltiples aplicaciones como detección de rostros, detección de vehículos, conteo de peatones, autos autónomos, sistemas de seguridad, etc.

Los dos objetivos principales de la detección de objetos incluyen:

  • Identificar todos los objetos presentes en una imagen.
  • Filtra el objeto de atención

En este artículo, verá cómo realizar la detección de objetos en Python con la ayuda del ImageAI biblioteca.

Aprendizaje profundo para la detección de objetos

Las técnicas de aprendizaje profundo han demostrado ser de vanguardia para varios problemas de detección de objetos. A continuación, se enumeran algunos de los enfoques de aprendizaje profundo más utilizados para la detección de objetos:

En el resto de este artículo, veremos qué es exactamente ImageAI y cómo usarlo para realizar la detección de objetos.

ImageAI

ImageAI es una biblioteca de Python creada para permitir a los desarrolladores crear aplicaciones y sistemas con capacidades autónomas de aprendizaje profundo y visión por computadora utilizando unas pocas líneas de código directo. ImageAI contiene una implementación de Python de casi todos los algoritmos de aprendizaje profundo de última generación como RetinaNet, YOLOv3y TinyYOLOv3.

ImageAI utiliza varias API que funcionan sin conexión: tiene API de detección de objetos, detección de video y seguimiento de objetos a las que se puede llamar sin acceso a Internet. ImageAI hace uso de un modelo previamente entrenado y se puede personalizar fácilmente.

los ObjectDetection La clase de la biblioteca ImageAI contiene funciones para realizar la detección de objetos en cualquier imagen o conjunto de imágenes, utilizando modelos previamente entrenados. Con ImageAI, puede detectar y reconocer 80 tipos diferentes de objetos cotidianos comunes.

Configurar su entorno

En esta parte del tutorial, trabajaremos en la instalación de ImageAI.

Para usar ImageAI necesitas instalar algunas dependencias. El primer paso es tener Python instalado en su computadora. Descargue e instale Python 3 desde sitio web oficial de Python.

Una vez que tenga Python instalado en su computadora, instale las siguientes dependencias usando pip:

TensorFlow

$ pip install tensorflow

OpenCV

$ pip install opencv-python

Keras

$ pip install keras

ImageAI

$ pip install imageAI

Ahora descarga el TinyYOLOv3 archivo de modelo que contiene el modelo de clasificación que se utilizará para la detección de objetos.

Realización de la detección de objetos con ImageAI

Ahora veamos cómo usar realmente la biblioteca ImageAI. Explicaré paso a paso cómo puedes construir tu primer modelo de detección de objetos con ImageAI.

Paso 1

Nuestra primera tarea aquí es crear las carpetas necesarias. Para este tutorial necesitamos las siguientes carpetas:

  • Detección de objetos: carpeta raíz
  • modelos: almacena el modelo previamente entrenado
  • entrada: almacena el archivo de imagen en el que queremos realizar la detección de objetos
  • salida: almacena archivo de imagen con objetos detectados

Una vez que haya creado sus carpetas, su Object detection La carpeta debe tener las siguientes subcarpetas:

├── input
├── models
└── output

3 directories, 0 files
Paso 2

Abra su editor de texto preferido para escribir código Python y cree un nuevo archivo detector.py.

Paso 3

Importar ObjectDetection clase de la biblioteca ImageAI.

from imageai.Detection import ObjectDetection
Etapa 4

Ahora que ha importado la biblioteca imageAI y el ObjectDetection clase, lo siguiente es crear una instancia de la clase ObjectDetection, como se muestra aquí:

detector = ObjectDetection()
Paso 5

Especifiquemos la ruta de nuestra imagen de entrada, imagen de salida y modelo.

model_path = "./models/yolo-tiny.h5"
input_path = "./input/test45.jpg"
output_path = "./output/newimage.jpg"
Paso 6

Después de instanciar el ObjectDetection class ahora podemos llamar a varias funciones de la clase. La clase contiene las siguientes funciones para llamar modelos previamente entrenados: setModelTypeAsRetinaNet(), setModelTypeAsYOLOv3()y setModelTypeAsTinyYOLOv3().

Para el propósito de este tutorial, usaré el pre-entrenado TinyYOLOv3 modelo, y por lo tanto usaremos el setModelTypeAsTinyYOLOv3() función para cargar nuestro modelo.

detector.setModelTypeAsTinyYOLOv3()
Paso 7

A continuación, vamos a llamar a la función setModelPath(). Esta función acepta una cadena que contiene la ruta al modelo entrenado previamente:

detector.setModelPath(model_path)
Paso 8

Este paso llama a la función loadModel() desde el detector ejemplo. Carga el modelo desde la ruta especificada anteriormente usando el setModelPath() método de clase.

detector.loadModel()
Paso 9

Para detectar objetos en la imagen, necesitamos llamar al detectObjectsFromImage función usando el detector objeto que creamos en la sección anterior.

Esta función requiere dos argumentos: input_image y output_image_path. input_image es la ruta donde se ubica la imagen que estamos detectando, mientras que output_image_path El parámetro es la ruta para almacenar la imagen con los objetos detectados. Esta función devuelve un diccionario que contiene los nombres y las probabilidades porcentuales de todos los objetos detectados en la imagen.

detection = detector.detectObjectsFromImage(input_image=input_path, output_image_path=output_path)
Paso 10

Se puede acceder a los elementos del diccionario recorriendo cada elemento del diccionario.

for eachItem in detection:
    print(eachItem["name"] , " : ", eachItem["percentage_probability"])
Código completo para la detección de objetos

Aquí está el código completo para la detección de imágenes:

from imageai.Detection import ObjectDetection

detector = ObjectDetection()

model_path = "./models/yolo-tiny.h5"
input_path = "./input/test45.jpg"
output_path = "./output/newimage.jpg"

detector.setModelTypeAsTinyYOLOv3()
detector.setModelPath(model_path)
detector.loadModel()
detection = detector.detectObjectsFromImage(input_image=input_path, output_image_path=output_path)

for eachItem in detection:
    print(eachItem["name"] , " : ", eachItem["percentage_probability"])

En la salida, puede ver el nombre de cada objeto detectado junto con su porcentaje de probabilidad como se muestra a continuación:
Salida

car  :  54.72719073295593
car  :  58.94589424133301
car  :  62.59384751319885
car  :  74.07448291778564
car  :  91.10507369041443
car  :  97.26507663726807
car  :  97.55765795707703
person  :  53.6459743976593
person  :  56.59831762313843
person  :  72.28181958198547

Imagen original:

La imagen original, es decir, “test45”, se veía así:

Imagen con detección de objetos:

Después de la detección del objeto, la imagen resultante se ve así:

Puede ver que ImageAI ha identificado con éxito automóviles y personas en la imagen.

Conclusión

La detección de objetos es una de las tareas de visión por computadora más comunes. Este artículo explica cómo realizar la detección de objetos en Python utilizando la biblioteca ImageAI con la ayuda de un ejemplo.

Referencias

.

About the author

Ramiro de la Vega

Bienvenido a Pharos.sh

Soy Ramiro de la Vega, Estadounidense con raíces Españolas. Empecé a programar hace casi 20 años cuando era muy jovencito.

Espero que en mi web encuentres la inspiración y ayuda que necesitas para adentrarte en el fantástico mundo de la programación y conseguir tus objetivos por difíciles que sean.

Add comment

Sobre mi

Últimos Post

Etiquetas

Esta web utiliza cookies propias para su correcto funcionamiento. Al hacer clic en el botón Aceptar, aceptas el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Más información
Privacidad