Detección de objetos con ImageAI en Python

    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

    .

    Etiquetas:

    Deja una respuesta

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