Está en la página 1de 7

Cetys Universidad, escuela de ingeniería

Ing. en ciencias computacionales : Aprendizaje de máquina


impartido por: Ing. Ulises Orozco

Detección y agrupamiento de códigos QR


Daniel Cruz 31044, Alex B Machado 28111, Samuel Zazueta 33167

I. RESUMEN1 III. OBJETIVOS


El objetivo principal es convertir una imágen con
Este documento este informe del proyecto final, múltiples códigos QR direccionales en una herramienta para
titulado como, “Detección y agrupamiento de códigos QR con agilizar procesos de asistencia/cuestionario para una multitud
orientación independiente” como sabemos que machine donde exista un código QR asignado individualmente.
learning es una de las tendencias de la computación más Especialmente, nuestro objetivo consiste en usar el código
populares se decidió hacer un proyecto que consiste en diseñar QR el cual es muy especial, ya que facilita la forma de
un programa en python, capaz de dectectar y reconocer compartir de manera fácil y rápida. Casi la mitad de la
imágenes o código QR. Se utilizará un algoritmo de población tiene un smartphone, es por esto que las personas
aprendizaje profundo conocido como CNN (Convolutional pueden escanear fácilmente estos códigos también son muy
Neural Network), este algoritmo conseguirá que el programa útiles para las empresas por ejemplo, si en una publicidad se
sea capaz de reconocer y clasificar las imágenes de prueba con quiere saber más información, con el código qr se podría
el objetivo de crear una alternativa de lo que son el pase de mandar a una página web para esto; nosotros lo que queremos
listas convencionales. es poder tomar una foto, y que se registren todos los códigos
QR posibles que se vean en la foto para asi poder la
información que contiene cada uno.
A. Captura de Datos
II. DESCRIPCIÓN DEL PROBLEMA
Con el fin de adquisición de imágenes individuales por
cada código QR en la imagen principal, se aplicarán una serie
Este proyecto se trata de busca resolver el problema de filtros para dar claridad a los patrones de color blanco y
de la eficacia al momento de la toma de asistencias en un negro:
salón de clases o audiencias en general y dar una solución
simple a dar cuestionarios generales asignando un código QR Esto con el fin de poder evaluar cada imagen obtenida con
con orientación sensible a cada invitado de las mismas, a su la base de datos de códigos QR registrados, los datos entonces
vez, facilitando el trabajo para aquellas personas encargadas son guardados individualmente para luego ser manipulados
de recopilar información de dichas audiencias dándole la con mayor facilidad.
facilidad de dar un chequeo automático general con tan solo
B. Aplicación de Filtros
tomar una fotografía.
Después de obtener los datos en un formato simple de
utilizar, estos se compararon con los archivos registrados para
buscar el mayor porcentaje de similitud, con el propósito de
encontrar a su “alumno” registrado, a su vez, se busca capturar
la información de orientación en el cual ha sido captado el
código QR, con el propósito de utilizar el mismo como un
valor de entrada donde se tengan 4 posibles lados, esto para
dar utilidad a la orientación del mismo, por ejemplo, en una
pregunta de opción múltiple, ser capaz de obtener los
resultados individuales de una multitud de códigos QR.

IV. MARCO TEORICO

1. ALGORITMOS PRINCIPAL:
● CNN (convolutional neural network): un subconjunto
del aprendizaje automático . Es uno de los varios
tipos de redes neuronales artificiales que se utilizan
1

1
para diferentes aplicaciones y tipos de datos. Una utiliza para describir cuán nítida (como antónimo de
CNN es un tipo de arquitectura de red para granular) es una imagen de fotografía.
algoritmos de aprendizaje profundo y se usa
específicamente para el reconocimiento de imágenes
y tareas que involucran el procesamiento de datos de ● Compresión sin pérdida y compresión con pérdida:
píxeles . Existen otros tipos de redes neuronales en el cuando queremos reducir el tamaño de un archivo
aprendizaje profundo, pero para identificar y (que puede ser una imagen), pero no queremos
reconocer objetos, las CNN son la arquitectura de red comprometer la calidad, este tipo de compresión se
preferida. Esto los hace muy adecuados para tareas de denomina compresión sin pérdida. El archivo
visión artificial ( CV ) y para aplicaciones en las que comprimido se puede guardar, pero cuando lo
el reconocimiento de objetos es vital, como los requerimos, durante el proceso de descompresión, se
vehículos autónomos y el reconocimiento facial . restaura toda la información y obtenemos la imagen
real (Figura 2-6). Este primer tipo de compresión da
prioridad a la información contenida en el archivo,
2. TERMINOLOGIA: especialmente cuando se comprime texto, donde no
● Machine learning: El aprendizaje de máquina (MA) podemos permitirnos perder ni un solo dato.
es un campo de investigación dedicado a comprender ○
y crear métodos que "aprendan", es decir, métodos 3. HERRAMIENTAS Y LIBRERÍAS
que aprovechan los datos para mejorar el rendimiento
en algún conjunto de tareas.Se considera parte de la
inteligencia artificial. Los algoritmos de aprendizaje ● OpenCv: es una biblioteca libre de visión artificial
automático construyen un modelo basado en datos de originalmente desarrollada por Intel. OpenCV
muestra, conocidos como datos de entrenamiento, significa Open Computer Vision. Su funciones
para hacer predicciones o tomar decisiones sin estar principales es detección de movimiento,
programados explícitamente para hacerlo. reconocimiento de objetos, reconstrucción 3D a partir
de imágenes, son sólo algunos ejemplos de
aplicaciones de OpenCV.
● Red neuronal: Las redes neuronales artificiales
(ANN), generalmente llamadas simplemente redes
neuronales (NN) o redes neuronales, son sistemas ● Tensorflow: es una biblioteca de código abierto para
informáticos inspirados en las redes neuronales aprendizaje automático a través de un rango de
biológicas que constituyen los cerebros de los tareas, y desarrollado por Google para satisfacer sus
animales. Una ANN se basa en una colección de necesidades de sistemas capaces de construir y
unidades o nodos conectados llamados neuronas entrenar redes neuronales para detectar y descifrar
artificiales patrones y correlaciones, análogos al aprendizaje y
razonamiento usados por los humanos.

● código QR: es una etiqueta óptica que contiene


información y puede ser leída por una máquina. ● Keras: Es una biblioteca de software de código
abierto que proporciona una interfaz Python para
Básicamente es cómo un código de barras, pero
redes neuronales artificiales. Keras actúa como una
bidimensional. Un código de barras tradicional es interfaz para la biblioteca Tensor Flow.
unidimensional ya que codifica la información en sus
barras verticales.
● Anaconda: es una distribución libre y abierta​de los
● Detección de objetos: La detección de objetos es una lenguajes Python y R, utilizada en ciencia de datos, y
tecnología de ordenador relacionada con la visión aprendizaje automático. Esto incluye procesamiento
artificial y el procesamiento de imagen que trata de de grandes volúmenes de información, análisis
detectar casos de objetos semánticos de una cierta predictivo y cómputos científicos.
clase en vídeos e imágenes digitales. ○
● numpy: es una biblioteca para el lenguaje de
● Resolución de imagen: La resolución de una imagen programación Python que da soporte para crear
indica la cantidad de detalles que puede observarse en vectores y matrices grandes multidimensionales,
esta. El término es comúnmente utilizado en relación junto con una gran colección de funciones
a imágenes de fotografía digital, pero también se matemáticas de alto nivel para operar con ellas.

2
conduce a una función de activación, que actúa como un
● Matplotlib: Es una biblioteca para la generación de cerebro y toma una decisión.
gráficos en dos dimensiones, a partir de datos
contenidos en listas o arrays en el lenguaje de Ahora que sabemos estos conceptos podemos definir el
programación Python. Proporciona una API, pylab, modelo sobre el cual basaremos nuestro proyecto se decidió
diseñada para recordar a la de MATLAB. que se utilizara CNN Las CNN se utilizan para problemas de
procesamiento y clasificación de imágenes. Con las CNN, hay
● pillow: Pillow es una biblioteca adicional gratuita y algunas capas adicionales, aparte de las neuronas normales.
de código abierto para el lenguaje de programación capas de red sabemos que una red neuronal ANN cada uno de
Python que agrega soporte para abrir, manipular y los nodos está conectado a todos y cada uno de los nodos de la
guardar muchos formatos de archivo de imagen capa siguiente. Esto puede convertirse requiere mucho tiempo
diferentes. y también conduce al problema del sobreajuste*. Las CNN
son utilizadas para corregir este problema. Con las CNN, no
● kaggle: es una comunidad en línea de científicos de tenemos una conexión con cada y cada nodo. Con las CNN,
datos y profesionales del aprendizaje automático. aplicamos filtrado selectivo. El trabajo de las CNN comienza
Kaggle permite a los usuarios encontrar y publicar con la convolución capa, donde aplicamos un filtro (también
conjuntos de datos, explorar y crear modelos en un conocido como kernel) a la entrada imagen. Este núcleo
entorno de ciencia de datos basado en la web; trabajar avanza a grandes zancadas sobre la imagen, bloque por
con otros científicos de datos e ingenieros de bloque, donde cada bloque es una colección de celdas de
aprendizaje automático y participar en concursos para píxeles. Durante este proceso, realizamos multiplicación de
resolver desafíos de ciencia de datos. matrices, lo que da como resultado una imagen de menor
resolución. En la capa de submuestreo (también llamada capa
● LabelImg: Librería de python utilizada para etiquetar de submuestreo) encontramos el valor de píxel promedio
imágenes de prueba, la misma genera archivos .xml (llamado agrupación promedio) o el píxel máximo valor
para cáda imágen por medio de cajas estipuladas por (llamado agrupación máxima) y obtener una imagen de
el usuario. resolución aún más baja.Por último, la salida se conecta a la
capa completamente conectada, donde cada salida máxima de
agrupación está conectada a cada nodo en el totalmente
conectado capa. Después de esto, se sigue una arquitectura de
V. METODOLOGÍA DE LA INVESTIGACIÓN red neuronal.

por eso es que este modelo es el más adecuado para nuestro


Antes de hablar sobre las redes neuronales artificiales sobre un proyecto ya que buscamos clasificar imágenes para poder
conjunto de imágenes para clasificación, primero examinemos utilizarlas como un código qr.
qué son las redes neuronales. Por ejemplo,¿Qué pasa cuando definiremos la dimensión de la imagen. Cada imagen en el
nos lastimamos? Se envía una señal inmediatamente a nuestro conjunto de datos deberá de tener el mismo tamaño para
cerebro, y luego el cerebro responde basado en la intensidad mantener una integridad de datos de entrenamiento.
de la señal. La transferencia de la señal tiene lugar a través de Guardaremos el número de filas de píxeles y número de
las neuronas. Las neuronas transfieren la señal, en forma de columnas de píxeles dentro de las variables r y c Luego
sinapsis, a otra neurona, y el proceso continúa hasta que la definimos el número de clases usando etiquetas de 0 a 9, lo
señal llega al cerebro. que significa que habrá un total de diez clases después dentro
Es importante para nosotros describir a las dendritas y el axón. del módulo de keras, tenemos todo el Conjunto de datos
Las dendritas reciben la señal de otra neurona, y el axón MNIST. Entonces, usamos el conjunto de datos de Keras
transmite la señal a la siguiente neurona. Esta cadena se directamente y con esto extraemos los conjuntos de
detiene en el último nodo, que es el cerebro. Las redes entrenamiento y prueba. que previamente obtendremos de una
neuronales artificiales usan la misma analogía y procesan base datos en ZXing y con esto se realizará un función que se
información mediante neuronas artificiales. La información se encargará de cargar los datos.
transfiere de una neurona artificial a otra, lo que finalmente

3
Luego remodelamos con la funcionalidad de numpy porque
actualmente los datos están en un formato de matriz sin
estructura adecuada. Usando remodelar, damos los datos
estructura. Hacemos esto diciéndole a Python que convierta la
matriz de tal manera que tenga todos los valores de píxel en
solo una columna Actualmente, el tipo de datos de x_train y
x_test es Int (entero). Queremos convertirlo en Flotante, para
que podamos aplicar el preprocesamiento sobre él fácilmente.
Ahora tenemos que hacer la normalización. Dividimos cada
uno y cada píxel con el valor de intensidad de píxel más alto
de todo el conjunto, por lo que los datos dan como resultado
un rango inferior de cero a uno. Esto ayuda a entrenar el
modelo de manera eficiente.
También se coloca los códigos qr sobrepuestos en zonas de
x_train /= 255 x_test /= 255 pruebas como estas fotos de la ciudad de scotland, estas
imágenes serían nuestros sujetos de pruebas a realizar para el
Ahora que nos hemos ocupado de los independientes modelo. donde el programa detectará todos los códigos QR en
variables, tenemos que cuidar de las variables, qué son las la imagen. más a futuro se aplicará en una cámara para
etiquetas numéricas reales. Al hacer esto, convertimos los aplicarse en la vida real con diferentes códigos QR impresos y
valores, que están actualmente en formato entero, a valores colocados en ciertos lugares donde la cámara tenga alcance.
categóricos. Por último, devolvemos todos los datos
procesados a nuestro código original. Mientras la métricas de evaluación que se aplica al proyecto,
se conoce como average precision, utilizada para modelos de
return (x_train,x_test,y_train,y_test,input_shape) clasificación. como métrica ya que nos funciona para
determinar el porcentaje de precisión para que la cámara sea
el datasets que se empleados como datos de entrenamiento son capaz de detectar los códigos qr, es una métrica hecha para
sacados de la página web conocido como kaggle conocido determinar la cantidad de predicciones que nuestro modelo
code QR, ese Dataset es para el entrenamiento y prueba, ese acertó. Esto sirve para diferenciar e igualar nuestras
dataset solo tiene la imagen de los QR, son más 10000 predicciones con la realidad.
archivos, podemos utilizarlos para generar imágenes con
varios de estos, dar etiquetas a las nuevas imágenes con
cuántos códigos existen en X imágen y con ello podemos
testear la veracidad de el modelo, ya que tendríamos un dato
que nos exponga si el modelo está correcto o no?, pero por
ahora solo limitaremos a una cierta cantidad como 1000
archivos posibles, para no afectar el rendimiento e impedir
una sobrecarga del modelo aplicado.
donde ‘‘TP’’ representa el true positive de los preliclectos
correctos del modelo, también está “FP” false positive
significa el número de predilectos correctos pero presenta un
error. pero también existen la versión contraria pero en base
con el negativo como false negative ‘’ FN’’ y true negative
‘’TN’’. Tras aplicar la sumatoria de los cuatro valores luego
divididos por los otros dos valores se calcula el puntaje de
predicción aplicada en el modelo.

4
proceso de obtención de imágenes.

no solo eso también estos predilectos también puede calcular


la recall es la métrica de exhaustividad nos va a informar sobre
la cantidad que el modelo de machine learning es capaz de
identificar.

VI. DESCRIPCIÓN DE LA IMPLEMENTACIÓN


Creamos el directorio de donde nuestras imágenes se
Una vez conseguidos los sujetos de prueba, es necesario
encontrarán dentro del proyecto:
continuar a etiquetar unos cuantos de estos, en este caso se
etiquetaron 30 diferentes imágenes para entrenar, y 10 para
probar la efectividad del mismo.

Se utilizó la librería de python LableImg para dar etiquetado a


las imágenes, esta librería es de código abierto por lo que
podemos utilizarlo sin ningún problema, para instalación
rápida simplemente hay que hacer uso de nuestro asistente de
instalación de librerías en python pip con el siguiente
comando: y una vez dentro de este directorio, generamos 2 carpetas, una
con el nombre train y la otra con el nombre test, donde
pip install LabelImg dividiremos nuestras imágenes 30-10 junto con su archivo
.xml generado por nuestra librería LabelImg, una vez hecho
Una vez hecho esto, para abrirlo simplemente lo llamamos por esto podemos pasar a nuestra segunda fase. Cabe mencionar
su nombre en una consola y nos abrirá el software por default: que todo código presentado en éste documento estará
disponible en los .ipynb encontrados en el repositorio adjunto.

A. ENTRENAMIENTO
Primero que nada debemos crear nuestros directorios para
trabajar con los mismos, con la ayuda de los siguientes
comandos todo esto se hará automáticamente dentro de la
carpeta de nuestro proyecto

una vez etiquetadas nuestras imágenes, damos comienzo a la


segunda fase, la de entrenamiento.

Importamos algunas librerías para comenzar a capturar


nuestras imágenes, se ha dado la opción de utilizar la cámara
web de nuestro dispositivo para capturar imágenes en el
momento, para más información de esto consultar el primer
.ipynb encontrado en el repositorio, donde se lleva todo el

5
debemos dar una pausa y enfocarnos en que éste corra sin
problemas:

una vez tenemos ese OK, sabemos que estamos listos para
continuar, va a ser necesario instalar algunas dependencias que
por algún motivo no se hayan instalado, esto varía por usuario
por lo que aquí estás por tu cuenta, los problemas encontrados
son simples “no se ha encontrado esta librería” por lo que
como solución general sería instalar XXXX librería en nuestro
ambiente virtual del proyecto.

A continuación, actualizamos tensorflow con el siguiente


comando:
!pip install tensorflow --upgrade
A continuación, descargamos algunos de los modelos pre importamos nuestra librería de object detection:
entrenamos de TensorFlow para agilizar la carga del nuestro, import object_detection
accedemos a la documentación oficial de TensorFlow, y por último verificamos que todas nuestras librerías hayan
www.Tensorflow.org/install/source_windows para conseguir sido instaladas, para ello regresamos de nuevo a nuestro
nuestra versión del mismo, en este caso, se ha utilizado Verification_Script y adicionalmente hacemos uso del
tensorflow 2.11.0 junto con las dependencias CUDA 11.2 y siguiente comando:
cuDNN 8.1, encontradas en su respectiva documentación, es !pip list
importante aclarar que para que nuestro código corra de forma y verificamos manualmente que las librerías instaladas hasta
correcta, el uso de python 3.8 es requerido, ya que futuras ahora se encuentren en el listado.
versiones contienen un error de compatibilidad a través de la
librería “numpy” en una de las funciones utilizadas en el
entrenamiento.

En el código anterior, obtendremos nuestro modelo


pre-entrenado, por medio del URL obtenido anteriormente,
accederemos al repositorio oficial de TensorFlow para adquirir
el modelo, que en este proyecto específico utilizamos el
modelo SSD MobileNet V2 FPNLite 320x320, para detección
de objetos por “single snapshot” en una resolución re-escalada
continuamos instalando wget para obtener alguna descargar
de 320x320.
alguna utilidad en el futuro de nuestro proyecto y procedemos
a generar directorios para la instalación de la librería
Una vez descargado nuestro modelo, debemos crear el label
Tensorflow Object Detection y nuestro protoc-compiler
map para ayudar a nuestra IA a entrenar, en este diccionario es
donde debemos colocar el nombre de nuestras etiquetas
Para poder continuar, es necesario evaluar la instalación de
generadas por nosotros con la ayuda de la librería LabelImg y
nuestras librerías y dependencias, por lo que el
asignarle un id a cada etiqueta, como en este caso solo
“Verification_Script” será nuestra salvación a partir de ahora,
requerimos detectar códigos QR, solo tenemos una etiqueta.
para resumirlo en pocas palabras, si este script nos dá un
resultado positivo, significa que podemos proceder con
nuestro entrenamiento sin ningún problema, por lo que

6
inventarios, actividades administrativas, registros de piezas,
etc

en este proyecto nos dedicamos en utilizar este algoritmo


donde lo usamos como un detección de objetos (especialmente
códigos QR) en base s de una cámara, este proyecto fue capaz
de reconocer los diferentes de datos de entrenamiento creados
para entrenar el proyecto y que sea capaz de mejorar la
precisión del proyecto reconozca múltiples códigos QR en
VII. DESCRIPCIÓN DE LOS RESULTADOS cierta distancia y en la misma cámara.

VIII. CONCLUSION IX. REFERENCIAS


[1] DataScientest. (2022), Convolutional Neural Network, Recuperado de:
La red neuronal convolucional es una técnica popular de https://datascientest.com/es/convolutional-neural-network-es
aprendizaje profundo para las tareas actuales de
reconocimiento visual. Como todas las técnicas de aprendizaje [2] Marous, J. (19 de marzo de 2018). 15 Applications of AI and Machine
Learning in Financial Marketing. The Financial Brand. Recuperado de:
profundo, CNN depende mucho del tamaño y la calidad de los <https://thefinancialbrand.com/71350/ai-machine-learning-analytics-m
datos de entrenamiento. Dado un conjunto de datos bien arketing-banking-trends//>
preparados, las CNN son capaces de superar a los humanos en
tareas de reconocimiento visual. Sin embargo, todavía no son [3] Schmarzo, B. (9 de enero de 2014). Business Analytics: Moving From
Descriptive to Predictive Analytics [mensaje en un blog]. Dell EMC.
resistentes a los artefactos visuales como el deslumbramiento
Recuperado de:
y el ruido, que los humanos pueden manejar. La teoría de la <https://infocus.dellemc.com/william_schmarzo/business-analytics-mo
CNN aún se está desarrollando y los investigadores están ving-from-descriptive-to-predictive-analytics//>
trabajando para dotarla de propiedades como la atención
activa y la memoria en línea, lo que permite a las CNN evaluar [4] McKinsey Global Institute (2011). Big Data: The Next Frontier for
Innovation, Competition and Productivity. Recuperado de:
nuevos elementos que son muy diferentes de los que fueron <https://www.mckinsey.com/~/media/McKinsey/Business%20Function
entrenados. Esto simula mejor el sistema visual de los s/McKinsey%20Digital/Our%20Insights/Big%20data%20The%20next
mamíferos, avanzando así hacia un sistema de reconocimiento %20frontier%20for%20innovation/MGI_big_data_exec_summary.ashx
visual artificial más inteligente. >

[5] Figueroa Nazuno, Jesús, coord. Advances in: artificial intelligence,


computing science and computer engineering. México: IPN-Centro de
Podemos decir que los códigos QR son una herramienta muy Investigación en Computación, 2004.
importante para nuestra sociedad ya que por su facilidad de
[6] Weik, M.H. (2000). image recognition. In: Computer Science and
uso y ahorro de tiempo en digitación de información los
Communications Dictionary. Springer, Boston, MA.
códigos QR son actualmente parte de la vida de los https://ebiblio.cetys.mx:4083/10.1007/1-4020-0613-6_8657
consumidores en varios países del mundo. Entre los usos
prácticos de los códigos QR está un control eficiente de

También podría gustarte