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.
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.
#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.
#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.
Ahora, se generará un mensaje de entrada, presione ‘s’ y presione enter para comenzar a guardar imágenes para el fondo.
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.
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.
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á.
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.
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.
¡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.