Está en la página 1de 12

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 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
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

a. OBTENCIÓN DE IMÁGENES
En cuanto a los sujetos de prueba, se utilizaron los datasets de
Kaggle, “QR Codes” y “Geolocated Imagery Dataset
(Scotland)” para generar sujetos de prueba personalizados,
donde se escogerían de 5 a 10 códigos QR aleatorios y se
insertarán en una de las imágenes de Scotland, imágenes, que
a su vez, fueron pegadas de forma sistemática acudiendo
atención al detalle de que estas no se interpongan entre ellas.
El recorrido completo de las primeras 785 imágenes tomó
entre 40 y 55 minutos.

Un ejemplo de sujeto de prueba sería el siguiente:

A continuación, se presentará el código explícito y una breve


explicación de cada función dentro del mismo:

5
● verify
○ Función encargada primordialmente de
verificar la distancia entre los QR
previamente colocados y el que se intenta
colocar, verifica que haya una distancia
mínima de 400px, esto de modo que no
importa qué QR se seleccionen, siempre
haya suficiente espacio entre ellos para no
sobreponerse, return True si el punto
solicitado es válido, False en caso contrario.
● selector
○ Función encargada de seleccionar un punto
aleatorio en el canvas, punto tal que es
inmediatamente verificado bajo la función
verify, si este cumple con las condiciones
especificadas, es agregado al arreglo con el
cual se llamó la función selector.
● saviour
○ Función llamada exclusivamente por el
usuario, es la última función a llamar, es
Explicación de funciones:
aquella que se encarga de guardar las
imágenes generadas previamente en formato
● obtainer
JPG y generar el memorium (csv) de los ID
○ Función encargada de abrir todas las
y de la cantidad de QR de cada ID.
imágenes de un folder y almacenarlas como
objetos mediante la librería glob (para iterar
Una vez conseguidos los sujetos de prueba, es necesario
sobre todos los archivos) y la librería PIL (la
continuar a etiquetar unos cuantos de estos, en este caso se
cual se encarga de abrir los archivos como
etiquetaron 30 diferentes imágenes para entrenar, y 10 para
un objeto con propiedades de clase imagen)
probar la efectividad del mismo.
● paster
○ Función encargada de obtener las
Se utilizó la librería de python LableImg para dar etiquetado a
dimensiones de la imágen sobre la que se
las imágenes, esta librería es de código abierto por lo que
está trabajando en ese momento, entonces,
podemos utilizarlo sin ningún problema, para instalación
procede a llamar a la función selector,
rápida simplemente hay que hacer uso de nuestro asistente de
obtiene los puntos necesarios para insertar
instalación de librerías en python pip con el siguiente
los códigos QR y procede a hacer la
comando:
selección de los mismos bajo la variable
TCO (acronimo para “The Chosen One”), pip install LabelImg
TCO es entonces pegado en la imágen
original y eliminado de la lista de QR Una vez hecho esto, para abrirlo simplemente lo llamamos por
disponibles (variable foreground), la función su nombre en una consola y nos abrirá el software por default:
termina cuando se han recorrido todas las
imágenes de Scotland y se hayan agregado a
la variable new_images, es entonces cuando
se agrega la cantidad numérica de códigos
QR que se le han asignado a dicha
“new_image” al arreglo etiquetes, para su
futura utilización en el memorium de datos
(csv),

6
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
proceso de obtención de imágenes.

A continuación, descargamos algunos de los modelos pre


entrenamos de TensorFlow para agilizar la carga del nuestro,
accedemos a la documentación oficial de TensorFlow,
www.Tensorflow.org/install/source_windows para conseguir
nuestra versión del mismo, en este caso, se ha utilizado
tensorflow 2.11.0 junto con las dependencias CUDA 11.2 y
Creamos el directorio de donde nuestras imágenes se cuDNN 8.1, encontradas en su respectiva documentación, es
encontrarán dentro del proyecto: importante aclarar que para que nuestro código corra de forma
correcta, el uso de python 3.8 es requerido, ya que futuras
versiones contienen un error de compatibilidad a través de la
librería “numpy” en una de las funciones utilizadas en el
entrenamiento.

y una vez dentro de este directorio, generamos 2 carpetas, una


con el nombre train y la otra con el nombre test, donde
dividiremos nuestras imágenes 30-10 junto con su archivo
continuamos instalando wget para obtener alguna descargar
.xml generado por nuestra librería LabelImg, una vez hecho
alguna utilidad en el futuro de nuestro proyecto y procedemos
esto podemos pasar a nuestra segunda fase. Cabe mencionar
a generar directorios para la instalación de la librería
que todo código presentado en éste documento estará Tensorflow Object Detection y nuestro protoc-compiler
disponible en los .ipynb encontrados en el repositorio adjunto.
Para poder continuar, es necesario evaluar la instalación de
B. ENTRENAMIENTO nuestras librerías y dependencias, por lo que el
Primero que nada debemos crear nuestros directorios para “Verification_Script” será nuestra salvación a partir de ahora,
trabajar con los mismos, con la ayuda de los siguientes para resumirlo en pocas palabras, si este script nos dá un
resultado positivo, significa que podemos proceder con
comandos todo esto se hará automáticamente dentro de la
nuestro entrenamiento sin ningún problema, por lo que
carpeta de nuestro proyecto

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

ahora, con la ayuda de la librería pandas, creamos y clonamos


el repositorio nicknochnack/GenerateTFRecord con al ayuda
del siguiente código
una vez tenemos ese OK, sabemos que estamos listos para
continuar, va a ser necesario instalar algunas dependencias que if not os.path.exists(files['TF_RECORD_SCRIPT']):
por algún motivo no se hayan instalado, esto varía por usuario !git clone
por lo que aquí estás por tu cuenta, los problemas encontrados https://github.com/nicknochnack/GenerateTFRecord
son simples “no se ha encontrado esta librería” por lo que {paths['SCRIPTS_PATH']}
como solución general sería instalar XXXX librería en nuestro
ambiente virtual del proyecto. con el código anterior creamos una nueva carpeta donde se
clonará el repositorio, y clonamos el repositorio en sí.
A continuación, actualizamos tensorflow con el siguiente
comando: con el código siguiente, generamos los récords requeridos.
!pip install tensorflow --upgrade !python {files['TF_RECORD_SCRIPT']} -x
importamos nuestra librería de object detection: {os.path.join(paths['IMAGE_PATH'], 'train')} -l
import object_detection {files['LABELMAP']} -o
y por último verificamos que todas nuestras librerías hayan {os.path.join(paths['ANNOTATION_PATH'], 'train.record')}
sido instaladas, para ello regresamos de nuevo a nuestro
Verification_Script y adicionalmente hacemos uso del !python {files['TF_RECORD_SCRIPT']} -x
siguiente comando: {os.path.join(paths['IMAGE_PATH'], 'test')} -l
!pip list {files['LABELMAP']} -o
y verificamos manualmente que las librerías instaladas hasta {os.path.join(paths['ANNOTATION_PATH'], 'test.record')}
ahora se encuentren en el listado.
el primer código hecho para el record de entrenamiento, y el
segundo para el record de prueba.

Siguiente, copiamos el modelo al folder de entrenamiento con


la ayuda del siguiente código:
if os.name =='posix':
En el código anterior, obtendremos nuestro modelo !cp {os.path.join(paths['PRETRAINED_MODEL_PATH'],
pre-entrenado, por medio del URL obtenido anteriormente, PRETRAINED_MODEL_NAME, 'pipeline.config')}
accederemos al repositorio oficial de TensorFlow para adquirir {os.path.join(paths['CHECKPOINT_PATH'])}
el modelo, que en este proyecto específico utilizamos el if os.name == 'nt':
modelo SSD MobileNet V2 FPNLite 320x320, para detección !copy
de objetos por “single snapshot” en una resolución re-escalada {os.path.join(paths['PRETRAINED_MODEL_PATH'],
de 320x320. PRETRAINED_MODEL_NAME, 'pipeline.config')}
{os.path.join(paths['CHECKPOINT_PATH'])}
Una vez descargado nuestro modelo, debemos crear el label
map para ayudar a nuestra IA a entrenar, en este diccionario es Anótese que ambos códigos hacen lo mismo, pero uno es para
donde debemos colocar el nombre de nuestras etiquetas macOS y el otro para Windows.
generadas por nosotros con la ayuda de la librería LabelImg y
asignarle un id a cada etiqueta, como en este caso solo
requerimos detectar códigos QR, solo tenemos una etiqueta.

8
Continuamos importando las librerías requeridas para el
entrenamiento de nuestra IA y modificamos el pipeline para y utilizamos el siguiente comando para hacer uso de nuestra
hacer uso de los directorios de nuestro sistema, en el segundo librería tensorboard poder ver las métricas de evaluación
.ipynb podrá encontrar el código que hace esto por nosotros antes mencionadas:
automáticamente. tensorboard --logdir=.

y finalmente, una vez configurado todo esto, podemos pasar a


entrenar nuestro modelo.

Definimos el directorio de nuestro modelo con la ayuda de la


librería os y el siguiente código: y si queremos ver las gráficas de nuestra implementación al
TRAINING_SCRIPT = momento de entrenarse, podemos correr el mismo comando en
os.path.join(paths['APIMODEL_PATH'], 'research', la carpeta
'object_detection', 'model_main_tf2.py') “[ProjectFolder]\Tensorflow\workspace\models\my_ssd_mob
net\train”
y ejecutamos el siguiente comando para comenzar con nuestro
entrenamiento, en este punto es posible modificar el número
de steps que nuestra IA tomará durante su entrenamiento, para
el entrenamiento básico de nuestra IA, una cantidad de 2000
steps nos parecen suficientes, pero este puede variar
dependiendo de la complejidad que tiene la misma. nótese que
dependiendo de si se utiliza TensorFlow_GPU y se cuenta con
una tarjeta gráfica, la velocidad de entrenamiento se mejorará
exponencialmente a si se entrena sólo con el uso de CPU:
python
Tensorflow\models\research\object_detection\model_main_
tf2.py
y con eso concluye la sección de entrenamiento, por lo que
--model_dir=Tensorflow\workspace\models\my_ssd_mobne podemos seguir con la implementación en tiempo real.
t
--pipeline_config_path=Tensorflow\workspace\models\my_ C. Implementación
ssd_mobnet\pipeline.config --num_train_steps=2000 Para comenzar, cargamos nuestro modelo desde el checkpoint
generado anteriormente, para ello, corremos el siguiente
Una vez entrenado nuestro modelo, podemos pasar a probar a código (es necesario modificar el checkpoint que estamos
evaluar el mismo, con el siguiente comando y con la ayuda de utilizando ya que dependiendo de la cantidad de steps con los
tensorflow, podemos utilizar las métricas de evaluación que hayamos entrenado nuestra IA, una cantidad distinta de
recomendadas para una CNN: checkpoints se habrán hecho, para ello, modificamos la línea
python “ckpt.restore(os.path.join(paths['CHECKPOINT_PATH'],
Tensorflow\models\research\object_detection\model_main_ 'ckpt-3')).expect_partial()” y personalizamos SOLO el número
tf2.py de lo que está en negritas):
--model_dir=Tensorflow\workspace\models\my_ssd_mobne
t
--pipeline_config_path=Tensorflow\workspace\models\my_
ssd_mobnet\pipeline.config --num_train_steps=2000

y para ver nuestros resultados, debemos acceder por medio de


consola al directorio
“[ProjectFolder]\Tensorflow\workspace\models\my_ssd_mob
net\eval”

9
Ahora, vamos a detectar los códigos QR de una imágen
seleccionada, para ello, corremos el siguiente código para
importar dependencias necesarias y finalmente, para utilizar nuestro modelo en tiempo real,
utilizaremos la librería cv2 para conectarnos a nuestra cámara
y dejarle saber al modelo que le estarémos enviando
información de forma constante, utilizamos el siguiente
código para ello

y el siguiente para dar utilizar nuestro Label Map.


category_index =
label_map_util.create_category_index_from_labelmap(files['L
ABELMAP'])

declaramos nuestra dirección a la imagen que queremos


utilizar, la cual deberá ser introducida en la carpeta test que
generamos anteriormente y modificamos nombre de archivo al
de la imágen que queremos utilizar
IMAGE_PATH = os.path.join(paths['IMAGE_PATH'], 'test',
'feature-image-tickets-min.jpg')

Corremos el siguiente código y finalmente obtenemos la


imágen procesada:

y si todo sale bien, la cámara debería activarse junto con el


modelo y obteniendo así el resultado deseado.

10
y para concluir con nuestros resultados, aquí hay una imágen
VII. DESCRIPCIÓN DE LOS RESULTADOS del modelo funcionando a través de una webcam.

Referenciando a lo escrito anteriormente, las siguientes


gráficas nos muestran la precisión con la que se encontraron
los códigos QR dentro de la imágen, como se puede apreciar
el modelo ha sido bastante certero en comparación al
etiquetado, por lo que se puede decir que ha sido un éxito.

En los anexos se puede encontrar un pequeño video


demostrativo de ambos métodos.
En cuanto a la evaluación general al entrenar, las gráficas
demuestran que nuestro modelo ha seguido correctamente con
las características necesarias para obtener un buen modelo, por
lo que el modelo puede ser determinado como preciso.
VIII. CONCLUSION

La red neuronal convolucional es una técnica popular de


aprendizaje profundo para las tareas actuales de
reconocimiento visual. Como todas las técnicas de aprendizaje
profundo, CNN depende mucho del tamaño y la calidad de los
datos de entrenamiento. Dado un conjunto de datos bien
preparados, las CNN son capaces de superar a los humanos en
tareas de reconocimiento visual. Sin embargo, todavía no son
resistentes a los artefactos visuales como el deslumbramiento
y el ruido, que los humanos pueden manejar. La teoría de la
CNN aún se está desarrollando y los investigadores están
trabajando para dotarla de propiedades como la atención
Esta imágen ha sido obtenida de Google para propósitos de activa y la memoria en línea, lo que permite a las CNN evaluar
prueba de nuestro modelo, y como se puede observar, ha nuevos elementos que son muy diferentes de los que fueron
detectado correctamente la posición de todos los códigos QR entrenados. Esto simula mejor el sistema visual de los
en pantalla. mamíferos, avanzando así hacia un sistema de reconocimiento
visual artificial más inteligente.

Podemos decir que los códigos QR son una herramienta muy


importante para nuestra sociedad ya que por su facilidad de
uso y ahorro de tiempo en digitación de información los
códigos QR son actualmente parte de la vida de los
consumidores en varios países del mundo. Entre los usos
prácticos de los códigos QR está un control eficiente de
inventarios, actividades administrativas, registros de piezas,
etc

11
en este proyecto nos dedicamos en utilizar este algoritmo
[4] McKinsey Global Institute (2011). Big Data: The Next Frontier for
donde lo usamos como un detección de objetos (especialmente
Innovation, Competition and Productivity. Recuperado de:
códigos QR) en base s de una cámara, este proyecto fue capaz <https://www.mckinsey.com/~/media/McKinsey/Business%20Function
de reconocer los diferentes de datos de entrenamiento creados s/McKinsey%20Digital/Our%20Insights/Big%20data%20The%20next
para entrenar el proyecto y que sea capaz de mejorar la %20frontier%20for%20innovation/MGI_big_data_exec_summary.ashx
precisión del proyecto reconozca múltiples códigos QR en >
cierta distancia y en la misma cámara. [5] Figueroa Nazuno, Jesús, coord. Advances in: artificial intelligence,
computing science and computer engineering. México: IPN-Centro de
Investigación en Computación, 2004.

[6] Weik, M.H. (2000). image recognition. In: Computer Science and
Communications Dictionary. Springer, Boston, MA.
IX. REFERENCIAS https://ebiblio.cetys.mx:4083/10.1007/1-4020-0613-6_8657

[1] DataScientest. (2022), Convolutional Neural Network, Recuperado de:


https://datascientest.com/es/convolutional-neural-network-es
X. Anexos
[2] Marous, J. (19 de marzo de 2018). 15 Applications of AI and Machine
Learning in Financial Marketing. The Financial Brand. Recuperado de: Repositorio del proyecto:
<https://thefinancialbrand.com/71350/ai-machine-learning-analytics-m https://github.com/danielCruzSalazar/QRCodeDetection
arketing-banking-trends//>
Video de demostración:
[3] Schmarzo, B. (9 de enero de 2014). Business Analytics: Moving From
Descriptive to Predictive Analytics [mensaje en un blog]. Dell EMC. https://youtu.be/1VZ26LrTrRI
Recuperado de:
<https://infocus.dellemc.com/william_schmarzo/business-analytics-mo
ving-from-descriptive-to-predictive-analytics//>

12

También podría gustarte