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:
- ImageAI
- Detectores de disparo único
- YOLO (Solo miras una vez)
- Redes neuronales convolucionales basadas en regiones
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.
Te puede interesar:Python para la PNL: trabajar con la biblioteca FastText de FacebookImageAI 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
Te puede interesar:Leer y escribir YAML en un archivo en Python$ 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:
Te puede interesar:Análisis de datos de la API con MongoDB, Seaborn y Matplotlib- 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.
Te puede interesar:Resolver problemas de secuencia con LSTM en Keras: Parte 2for 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í:
Te puede interesar:Resolución de problemas de secuencias con LSTM en KerasPuede 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
.