Cree su propio conjunto de datos de imágenes usando Opencv en Machine Learning

Contenidos

Introducción

El aprendizaje automático y las imágenes tienen una gran relación, la clasificación de imágenes ha sido uno de los principales roles del aprendizaje automático a lo largo de los años. Ha sido de gran utilidad durante la pandemia de COVID-19 para reconocer a las personas que no siguen las reglas como usar máscaras y mantener la distancia.

Prerrequisitos

Cada programa tiene algunos prerrequisitos para resolver problemas relacionados con el medio ambiente. Estamos construyendo un conjunto de datos para un proyecto de aprendizaje automático, el requisito mínimo para esto es una máquina con python3 instalado y un módulo de OpenCV en él.

Estoy usando Jupyter Notebook en mi sistema. Si también desea utilizar la misma configuración, debe instalar Anaconda en su máquina y luego instalar OpenCV.

Instalar OpenCV

Para instalar OpenCV, abra el símbolo del sistema si no está usando anaconda. De lo contrario, abra el símbolo del sistema anaconda desde la búsqueda de Windows y escriba el comando que se proporciona a continuación.

pip install opencv-python=3.4.2.17

Ahora ya está todo listo para codificar y preparar su conjunto de datos.

Pasos involucrados

Aquí vamos a cubrir todos los pasos involucrados en la creación de este programa.

Paso 1: Importar módulos

Primero, tenemos que importar todos los módulos requeridos a la consola del programa. Solo necesitamos dos módulos, uno es el «OpenCV» y el otro es el módulo «os». Opencv se usa para capturar y renderizar la imagen usando la cámara de la computadora portátil y el módulo del sistema operativo se usa para crear un directorio.

76310screenshot2072-6768107
import cv2 as cv
import os

Paso 2: crear un objeto de cámara

Como tenemos que crear nuestro propio conjunto de datos de imágenes, necesitamos la cámara, y OpenCV nos ayuda a crear objetos de cámara que se pueden usar más tarde para diversas acciones.

30354screenshot2076-7626402
#argument 0 is given to use the default camera of the laptop
camera = cv.VideoCapture(0)
#Now check if the camera object is created successfully
if not camera.isOpened():
    print("The Camera is not Opened....Exiting")
    exit()

Paso 3: crear carpetas de etiquetas

Ahora, necesitamos crear carpetas para cada etiqueta en aras de la diferenciación. Utilice el código que se proporciona a continuación para crear estas carpetas, puede agregar tantas etiquetas como desee. Hemos dado nombres a nuestras etiquetas de acuerdo con el juego: piedra, papel, tijeras. Estamos preparando un conjunto de datos que podría clasificar la imagen si es una piedra, un papel, una tijera o simplemente un fondo.

13797screenshot2086-8710402
#creating a list of lables "You could add as many you want"
Labels = ["Background","Stone","Paper","Scissors"]
#Now create folders for each label to store images
for label in Labels:
    if not os.path.exists(label):
        os.mkdir(label)

Paso 4: paso final para capturar imágenes

Este es el paso final y más crucial del programa. Se han escrito comentarios en línea para que sea más fácil de entender. Aquí tenemos que capturar imágenes y almacenar esas imágenes de acuerdo con la carpeta de etiquetas. Lea el código a fondo, hemos mencionado cada pequeña cosa aquí.

for folder in Labels:
    #using count variable to name the images in the dataset.
    count = 0
    #Taking input to start the capturing
    print("Press 's' to start data collection for"+folder)
    userinput = input()
    if userinput != 's':
        print("Wrong Input..........")
        exit()
    #clicking 200 images per label, you could change as you want.    
    while count<200:
        #read returns two values one is the exit code and other is the frame
        status, frame = camera.read()
        #check if we get the frame or not
        if not status:
            print("Frame is not been captured..Exiting...")
            break
        #convert the image into gray format for fast caculation
        gray = cv.cvtColor(frame, cv.COLOR_BGR2GRAY)
        #display window with gray image
        cv.imshow("Video Window",gray)
        #resizing the image to store it
        gray = cv.resize(gray, (28,28))
        #Store the image to specific label folder
        cv.imwrite('C:/Users/HP/Documents/AnacondaML/'+folder+'/img'+str(count)+'.png',gray)
        count=count+1
        #to quite the display window press 'q'
        if cv.waitKey(1) == ord('q'):
            break
# When everything done, release the capture
camera.release()
cv.destroyAllWindows()

Implementación práctica

Ahora, ejecute el programa para crear el conjunto de datos. Primero proporcionaremos el fondo, luego la piedra, el papel y las tijeras. Antes de la implementación, siempre debe tener claro lo que ha codificado y cómo la salida lo ayudará a resolver el requisito del caso de uso. Hagamoslo…

Ejecute el programa de una vez

Estamos usando jupyter notebook para ejecutar este programa, puede usar cualquier intérprete de Python. Primero, vaya al menú de la celda y haga clic en «Ejecutar todo», esto ejecutará todas las celdas disponibles de un solo golpe.

41732screenshot2077-7509171

Ahora, se generará un mensaje de entrada, presione ‘s’ y presione enter para comenzar a guardar imágenes para el fondo.

16976screenshot2078-2496871

Después de presionar ‘s’, capturará 200 imágenes del fondo. Aparecerá la ventana de visualización y comenzará a capturar las imágenes, así que salga del marco y permita que la cámara capture el fondo.

45916screenshot2080-8047816

Ahora, pedirá ‘s’ y capturará imágenes de «piedra». Entonces, cierra el puño y muéstralo a la cámara en varias posiciones.

Nota: solo mueva la mano con el puño cerca, no fije la mano en una posición para producir un conjunto de datos bien etiquetado.

38616screenshot2081-1074408

Ahora, repita el mismo proceso para las imágenes de papel y tijeras. No olvide presionar ‘s’ cuando se le solicite, de lo contrario, parecerá que la ventana de visualización está atascada, pero no lo está.

26340screenshot2082-2724197
34776screenshot2083-9098614

El programa se cerrará automáticamente. Ahora puede verificar navegando si el conjunto de datos se creó o no.

Nota: El conjunto de datos de imagen se creará en el mismo directorio donde se almacena el programa Python. Se crearán cuatro directorios según la etiqueta que se les asigne.

58640screenshot2084-9478225

Sí, las carpetas se han creado correctamente, ahora compruebe si las imágenes se han capturado y guardado. El tamaño de la imagen no será el mismo que estaba viendo durante el proceso de captura. Hemos reducido el tamaño de la imagen para que, cuando se utilice en un proyecto de aprendizaje automático para entrenar el modelo, requiera menos recursos y tiempo.

83028screenshot2085-8597068

¡Viva! Hemos creado nuestro propio conjunto de datos de imágenes que, además, se puede utilizar en proyectos de aprendizaje automático para la clasificación.

Suscribite a nuestro Newsletter

No te enviaremos correo SPAM. Lo odiamos tanto como tú.