Está en la página 1de 104

ASISTENTE DE NAVEGACIÓN PARA PERSONAS CON LIMITACIONES VISUALES

SOBRE PLATAFORMAS GPU EN ESPACIOS CERRADOS CONTROLADOS

MARIO ALEJANDRO REYES MEDINA


GABRIEL FELIPE SILVA ESPEJO

UNIVERSIDAD PEDAGÓGICA Y TECNOLÓGICA DE COLOMBIA


FACULTAD DE INGENIERIA
ESCUELA DE INGENIERÍA ELECTRÓNICA
2022
ASISTENTE DE NAVEGACIÓN PARA PERSONAS CON LIMITACIONES VISUALES
SOBRE PLATAFORMAS GPU EN ESPACIOS CERRADOS CONTROLADOS

MARIO ALEJANDRO REYES MEDINA


GABRIEL FELIPE SILVA ESPEJO

Trabajo de grado en la modalidad de participación en Grupo de Investigación para optar al


título de Ingeniero Electrónico

Director
Ing. ROBERT ALEXANDER LIMAS SIERRA

Codirector
Ing. WILSON JAVIER PÉREZ HOLGUÍN, PhD.

UNIVERSIDAD PEDAGÓGICA Y TECNOLÓGICA DE COLOMBIA


FACULTAD DE INGENIERIA
ESCUELA DE INGENIERÍA ELECTRÓNICA
2022
La autoridad científica de la Universidad reside en ella misma, por lo tanto, no responde por las
opiniones expresadas en este trabajo de grado.

Se autoriza su uso y reproducción indicando el origen.

iii
Nota de aceptación:

Aprobado por el Comité de Currículo en cumplimiento de los requisitos exigidos por la


Universidad Pedagógica y Tecnológica de Colombia para optar al título de Ingeniero
Electrónico, actuando como jurados:

NOMBRES Y APELLIDOS DEL JURADO 1 (EN MAYÚSCULA)


Título Académico de mayor nivel

NOMBRES Y APELLIDOS DEL JURADO 2 (EN MAYÚSCULA)


Título Académico de mayor nivel

Tunja, fecha (día, mes, año)

iv
DEDICATORIA

Dedico este trabajo a mis padres y a mis hermanos como reconocimiento al ser un pilar
fundamental no solo para realizar este proyecto sino también durante toda mi formación
profesional y personal.

Mario Alejandro Reyes Medina.

El presente se lo dedico mis abuelos, padres y hermanos, quienes me incentivaron


continuamente para obtener mi título profesional. Así como a mis amigos y conocidos,
especialmente a Diana Marcela Pulido Avella, Jhon Christopher Rangel y Andrés Esteban
Gómez, quienes me apoyaron de manera continua y desinteresada en la realización del
presente.
Gabriel Felipe Silva Espejo.

v
AGRADECIMIENTOS

Agradecemos al Ing. Wilson Javier Pérez Holguín y al Ing. Robert Alexander Limas Sierra por la
dirección de este trabajo sin su apoyo hubiese sido muy difícil el desarrollo de este proyecto,
también a la Universidad Pedagógica y Tecnológica de Colombia UPTC, en especial a la
escuela de ingeniería electrónica por la formación brindada a lo largo de estos años.

También agradecer al Ing. Josie Esteban Rodríguez Condia por compartir su experiencia con
nosotros la cual fue un gran aporte en el desarrollo de este trabajo, a nuestros compañeros de
la escuela de ingeniería electrónica en especial a Juan David Bautista Muñoz por el apoyo
brindado en este camino de formación académica.

Los agradecimientos también van dirigidos al Grupo de Investigación en Robótica y


Automatización Industrial GIRA por el préstamo de equipos, además de la financiación de la
totalidad de los costos de los elementos usados en la implementación del prototipo.
A las personas que brindaron su ayuda para realizar las pruebas, amigos, familiares e
ingenieros de la escuela de ingeniería electrónica que de una u otra forma colaboraron y
brindaron apoyo en el desarrollo del proyecto.

vi
CONTENIDO
LISTA DE TABLAS.................................................................................................ix
LISTA DE FIGURAS...............................................................................................x
LISTA DE ANEXOS..............................................................................................xii
1. INTRODUCCIÓN.............................................................................1
2. OBJETIVOS....................................................................................3
2.1. Objetivo General 3
2.2. Objetivos Específicos 3
3. MARCO DE REFERENCIA.............................................................4
3.1. Marco Conceptual 4
3.1.1. Limitación Visual 4
3.1.2. GPU 5
3.1.3. CUDA 6
3.1.4. Imagen Digital 7
3.1.5. Espacios de Color 9
3.1.6. Convolución 12
3.1.7. Filtros 13
3.1.8. Operaciones Morfológicas. 15
3.1.9. Mapa de Profundidad de Campo. 17
3.1.10. Algoritmos de Inteligencia Artificial 19
3.1.11. Algoritmos Secuenciales 19
3.1.12. PWM 20
3.1.13. RPI GPIO 20
4. ESTADO DEL ARTE.....................................................................21
4.1. Dispositivos No Basados en Cámaras 21
4.2. Dispositivos Basados en Cámaras. 22
4.3. Dispositivos Híbridos 24
5. DESARROLLO..............................................................................28
5.1. Materiales 28
5.1.1. Hardware 28
5.1.2. Firmware y Software 30
5.2. Técnicas 30
5.2.1. Escalización del Sensor de Profundidad 30
5.2.2. Algoritmo para la Detección de Obstáculos 31

vii
5.2.3. Discriminante de Suelo 32
5.2.4. Trace Planning. 33
5.2.5. Filtro de Media Móvil 33
5.2.6. Distancia por ultrasonido 33
5.2.7. Comunicación con el microcontrolador 34
5.2.8. Generación De Alertas 34
5.3. Metodología 35
5.3.1. Determinación de las Características Mínimas de Diseño 35
5.3.2. Definición del Diseño de Alto Nivel del Prototipo 35
5.3.3. Selección de Hardware Necesario para Funcionamiento del Prototipo 36
5.3.4. Estudio de la Arquitectura y Selección del Kit de Desarrollo para GPU
NVIDIA® Jetson 37
5.3.5. Sensores a Utilizar 37
5.3.6. Análisis, Revisión y Selección de los Algoritmos para la Detección de
Objetos. 39
5.3.7. Análisis del Algoritmo Seleccionado y Detección de las Etapas que
Intervienen en su Funcionamiento 41
5.3.8. Análisis de los Requerimientos por Etapas del Algoritmo Seleccionado
para su Implementación en CUDA. 42
5.3.9. Diseño de Alto Nivel de Cada una de las Etapas para Implementación en
CUDA 43
5.3.10. Implementación, Simulación y Test del Diseño Realizado para Cada
Etapa. 44
5.3.11. Verificación y Validación del Sistema Implementado con Personas en
Condición de Discapacidad Visual. 49
6. PRESENTACIÓN Y ANÁLISIS DE RESULTADOS......................52
7. CONCLUSIONES..........................................................................57
8. RECOMENDACIONES.................................................................58
9. BIBLIOGRAFÍA..............................................................................59
10. ANEXOS........................................................................................63

viii
LISTA DE TABLAS

Tabla 1. Etiquetas de identificación de funciones.............................................................7


Tabla 2. Clasificación de algoritmos secuenciales..........................................................19
Tabla 3. Estado del arte...................................................................................................27
Tabla 4. Generación de señal PWM respecto a la distancia de detección.....................34
Tabla 5. Selección de hardware......................................................................................36
Tabla 6. Comparación de Sensores RGB y Profundidad................................................37
Tabla 7. Comparación de Sensores Ultrasónicos...........................................................38
Tabla 8. Analisis algoritmos inteligencia artificial............................................................39
Tabla 9. Parámetros de entrada para la GPU.................................................................43
Tabla 10. Tiempos de ejecución total y para cada etapa del algoritmo..........................52
Tabla 11. Tiempo de ejecución vs. Número de capas analizadas..................................52
Tabla 12. Tiempos prototipo anterior soportado en CPU i3 Core de segunda generación
.........................................................................................................................................53
Tabla 13. Tiempos prototipo presente, soportado en CPU ARMv8.2 y GPGPU NVIDIA®
Carmel.............................................................................................................................53
Tabla 14. Comparación de prototipos realizados por el grupo GIRA.............................54
Tabla 15. Comodidad de portabilidad del dipositivo.......................................................54
Tabla 16. Preferencia de emisión de alertas...................................................................55
Tabla 17. Dificultad de interpretación de alertas.............................................................56

ix
LISTA DE FIGURAS

Figura1. Arquitectura GPU................................................................................................5


Figura 2. GPU - Organización de hilos y bloques.............................................................6
Figura 3. Imagen digital RGB............................................................................................7
Figura 4. Imagen en escala de grises...............................................................................8
Figura 5. Espacio de color RGB........................................................................................9
Figura 6. Representación del modelo HSV.......................................................................9
Figura 7. Representación del modelo HSI......................................................................11
Figura 8. Convolución bidimensional..............................................................................12
Figura 9. Mecanismo de filtro espacial lineal..................................................................13
Figura 10. Máscaras del operador de Prewitt.................................................................15
Figura 11. Ejemplo de erosión (a) objeto original (en azul), (b) píxeles eliminados en la
operación de erosión (en amarillo) y (c) resultado final..................................................16
Figura 12. Ejemplo de dilatación (a) objeto original (en rojo), (b) píxeles convertidos en
objeto al aplicar la dilatación (en verde) y (c) resultado final..........................................16
Figura 13. Ejemplo de apertura en una imagen binaria..................................................17
Figura 14. Ejemplo de clausura en una imagen binaria..................................................17
Figura 15. Mapa de profundidad generado por visión estéreo.......................................18
Figura 16. Mapa de profundidad generado por cámara con sensor de profundidad.....18
Figura 17. Señal PWM.....................................................................................................20
Figura 18. Pruebas de escalización................................................................................30
Figura 19. Seccionamiento de la imagen y matriz resultante de la detección de objetos
.........................................................................................................................................31
Figura 20. Calculo de distancia de discriminación..........................................................32
Figura 21. Esquema general de la arquitectura interna del dispositivo de guía para
invidentes.........................................................................................................................35
Figura 22. Seccionamiento por algoritmo Otsu...............................................................40
Figura 23. Funcionamiento del Algoritmo Stixel world....................................................40
Figura 24. Ubicación de obstáculo A en los vectores posx y posy para las capas........41
Figura 25. Diseño de alto nivel del algoritmo seleccionado............................................42
Figura 26. Transferencia de datos entre el Host y el Device..........................................42
Figura 27. Diseño etapa de preprocesamiento...............................................................44
Figura 28. Diseño Etapa de Detección............................................................................44
Figura 29. Diseño Etapa post Procesamiento.................................................................44
Figura 30. Imagen RGB y mapa de profundidad obtenidos por el Kinect®....................45
Figura 31. Valor pixel respecto a la distancia tomados con una resolución de 10 bits y 8
bits...................................................................................................................................45
Figura 32. Barrido Umbralización por capas...................................................................46
Figura 33. Detección de ruido “Sal y Pimienta” y eliminación del ruido mediante
operaciones morfológicas................................................................................................47
Figura 34. Seccionamiento y barrido espacial de la escena capturada para determinar
la ubicación de objetos....................................................................................................47
Figura 35. Discriminación del suelo.................................................................................48
Figura 36. Matriz resultante de detección de objetos.....................................................48

x
Figura 37. Vector de generación de alertas....................................................................49
Figura 38. Asistente de navegación................................................................................50
Figura 39. Pista de obstaculos para las pruenas de validación......................................51
Figura 40. Comodidad al portar el prototipo....................................................................54
Figura 41. Preferencia de emisión de alertas..................................................................55
Figura 42. Facilidad de interpretación de alertas por parte de los usuarios...................56
Figura 43 Código main....................................................................................................63
Figura 44 Codigo Prossesing..........................................................................................65
Figura 45 Código tamplates............................................................................................68
Figura 46 Código Operaciones morfológicas..................................................................70
Figura 47 Código templates............................................................................................72
Figura 49 Archivos de audio generados mediante el código de Emisión de Alertas......78
Figura 50 Archivos de estado de ejecución del Código del Asistente............................78
Figura 51 Implementación del prototipo..........................................................................80
Figura 52 Prototipo vista lateral derecha.........................................................................81
Figura 53 Caja de conexiones del prototipo....................................................................82
Figura 54 Diagrama de conexión PIC 12F675 y la Jetson Xavier de NVIDIA................83
Figura 55 Tarjeta principal PCB (Circuito impreso).........................................................83
Figura 56 Vista superior (top side).................................................................................84
Figura 57 vista inferior (bottom side)..............................................................................84

xi
LISTA DE ANEXOS

Anexo A Codigo “GPU Assitant”......................................................................................63


Anexo B Código de detección de objetos.......................................................................65
Anexo C Codigo de Morfologia.......................................................................................70
Anexo D Codigo de utilidades.........................................................................................73
Anexo E Código para el uso de la camara Kinect...........................................................75
Anexo F Codigo de Comunicación por UART.................................................................76
Anexo H Archivos de audio generados...........................................................................78
Anexo I Audios de estado del sistema...........................................................................78
Anexo J Codigo implementado para el sensor Ultrasonico............................................79
Anexo K Prototipo Implmentado.....................................................................................80
Anexo L Diagrama esquematico Módulo de detección..................................................83
Anexo M Placa PCB........................................................................................................83
Anexo N Consentimiento informado para las pruebas de validación.............................84
Anexo O Encuesta realizada los voluntarios de la prueba de valicadión.....................85

xii
1. INTRODUCCIÓN

Cerca del 70% de información que obtiene el ser humano del entorno que lo rodea
proviene del sentido de la vista. Esto demuestra su importancia, ya que permite a las
personas realizar actividades importantes para su vida diaria tales como movilizarse de
manera independiente y llevar a cabo diferentes tareas que aporten a su desarrollo
físico, mental y social (Novoa & Rojas, 2019). Según el Instituto Nacional para Ciegos
(INCI), para el año 2019, las personas con discapacidad visual representaban el 7,2%
de la población total del país (Pulido, 2020). En Colombia, según el censo realizado por
el DANE en el año 2005, el 43,2% del total de discapacitados del país presentaban
algún tipo de discapacidad visual (censos de población y vivienda de 2005)(Romero et
al., 2018). De esta población, el 48,1% considera que las actividades de movilidad
(caminar, correr, saltar, …) son de gran importancia. Mientras que para el 35,6%, las
actividades con mayor relevancia son el aprendizaje. Este censo determinó que el
aspecto de mayor relevancia para las personas invidentes es la movilidad (Romero et
al., 2018).

En la última década, la comunidad científica ha desarrollado dispositivos electrónicos


basados en distintas tecnologías con el objetivo de mejorar la movilidad autónoma de
personas con algún grado de discapacidad visual. Algunas soluciones han logrado tener
una aceptación del 86,7% por parte de los usuarios (H. Zhang & Ye, 2016). Sin
embargo, estos dispositivos presentan varios inconvenientes, entre los que se destacan:
1) el elevado tiempo de procesamiento de la información (Alarcon et al., 2010; Plikynas
et al., 2020; Segura & Lozada, 2019) presentado por las limitaciones técnicas de las
plataformas empleadas afectando directamente la movilidad del usuario y la reacción
del mismo ante variaciones en el entorno. Y 2) la detección errónea de objetos u
obstáculo(Franco & Rodríguez, 2018), ocasionando colisiones del usuario con objetos
que no son detectados oportunamente o que entorpecen el tránsito por la ruta
planificada al detectar erróneamente la presencia de objetos en caminos sin obstáculos.
Este inconveniente es generado por la selección inadecuada de los algoritmos
empleados en el sistema (Idrees et al., 2015) o el mal funcionamiento de los sensores
usados para percibir la información del ambiente (Plikynas et al., 2020) ya que estos se
ven seriamente afectados por condiciones adversas de luminosidad, irregularidades del
terreno, elementos reflectantes, entre otras.

Para afrontar los retos relacionados a la alta velocidad de procesamiento requerida


dentro del funcionamiento de sistemas de navegación autónomos, la comunidad
científica ha empleado diferentes plataformas digitales. Tradicionalmente, se han
empleado microcontroladores para la implementación de estos sistemas. Sin embargo,
estos presentan limitaciones en la velocidad de procesamiento y una baja complejidad
en los datos que pueden tratar (Miño & Gámez, 2020). Otra plataforma en la que se han
implementado este tipo de asistentes son los Smartphones, los cuales a pesar tener
una gran variedad de sensores, fácil asequibilidad y manejo por parte del usuario,
tienen el problema de requerir un alto consumo energético para su funcionamiento
(Murata et al., 2018). Una de las plataformas que se ha destacado para la
implementación de sistemas de alta complejidad computacional son las Unidades de
Procesamiento Gráfico (Graphics Processing Units - GPU) gracias a que logran
procesar grandes volúmenes de datos de manera rápida y eficiente debido a su alto
nivel de paralelismo (Owens et al., 2008).

1
En este proyecto se presenta el desarrollo de un prototipo de un asistente de
navegación para personas con limitaciones visuales sobre plataformas GPU, operando
en espacios cerrados controlados. Se inicia desde la investigación de herramientas
necesarias para la programación de GPUs, para realizar el procesamiento de las
imágenes capturadas y el control de los diferentes periféricos, hasta la prueba de
funcionamiento del asistente desarrollado y la validación de su funcionamiento con un
grupo de voluntarios participantes.

Este trabajo se divide en 8 capítulos: El primer capítulo presenta la introducción. En el


segundo capítulo se muestran los objetivos a cumplir en el desarrollo del proyecto, en el
tercer capítulo se muestran los conceptos básicos para sustentar el proyecto. En el
cuarto capítulo se encuentra la revisión bibliográfica en la que se discuten los diferentes
aportes en este campo realizados por la comunidad académica, el capítulo cinco
contiene el desarrollo del proyecto, además de los materiales que conforman el
asistente de navegación, En el capítulo seis se muestran los resultados obtenidos en la
realización del proyecto. El séptimo capítulo se muestran las conclusiones obtenidas en
el proceso de desarrollo, realización y evaluación del prototipo. Por último, en el capítulo
ocho se presentan las recomendaciones para el uso del asistente de navegación,
trabajos futuros y otras consideraciones.

2
2. OBJETIVOS

2.1. Objetivo General

Desarrollar un prototipo de asistente de navegación para el apoyo a la movilidad de


personas con limitaciones visuales en ambientes cerrados controlados mediante
algoritmos de visión artificial para la detección de obstáculos por medio de GPGPU.

2.2. Objetivos Específicos

 Identificar los algoritmos de visión artificial más empleados en la detección de


obstáculo orientados a la movilidad de personas invidentes en ambientes cerrados
controlados.
 Seleccionar y realizar pruebas a nivel software del algoritmo de detección de
obstáculo tomando como parámetro de desempeño el menor tiempo de ejecución.
 Sintetizar el algoritmo de detección de obstáculos sobre el kit de desarrollo Jetson
Nano mediante CUDA.
 Verificar la efectividad del prototipo diseñado y validar su funcionamiento con
personas en condición de discapacidad visual.

3
3. MARCO DE REFERENCIA

3.1. Marco Conceptual

3.1.1. Limitación Visual

El término de limitación visual hace referencia a cualquier daño ocasionado a la


agudeza visual del ojo y el campo visual del mismo. Este término también se usa para
referirse a los diferentes grados de pérdida visual hasta la pérdida total de la visión
(Giesteira et al., 2013). Se considera que existe una limitación visual cuando hay una
reducción severa de la agudeza visual o del campo visual del ojo aún con el uso de
lentes correctivas. Este daño puede ser causado por diferentes factores dentro de los
que se destacan el mal desarrollo de los órganos visuales (que se puede dar en la
gestación o en la niñez), los accidentes o procedimientos quirúrgicos que afectan los
ojos, vías visuales o hasta el cerebro y las enfermedades como Cataratas, Glaucoma,
Diabetes, Tracoma o Ausencia de vitamina A (World Health organization, 2010).

Según la Clasificación Internacional de Enfermedades CIE, la visión se divide en cuatro


grupos:

 Visión normal
 Discapacidad visual moderada
 Discapacidad visual grave
 Ceguera

Se considera visión normal cuando la persona puede realizar tareas o actividades que
dependan totalmente o en su mayoría del sentido de la vista sin ningún tipo de
asistencia al momento de ejecutarlas y la facultad de percibir imágenes claras del
entorno que lo rodea. Por otro lado, la discapacidad visual moderada hace referencia a
la dificultad de percibir los objetos de manera clara lo que causa que se realicen tareas
de manera casi normal con algún tipo de asistencia visual como los lentes correctivos. A
diferencia de las dos definiciones anteriores, la discapacidad visual grave se refiere a
aquella limitación para realizar tareas que requieren de una gran agudeza visual para
controlar detalles. Por último, la ceguera es la pérdida de la facultad de percibir
imágenes del ambiente, la cual no se puede corregir con gafas o lentes de contacto y
que dificulta la realización de tareas básicas de orientación (Segura & Lozada, 2019).

En el estudio realizado por (Bourne et al., 2021) se encontró que en 2020,


aproximadamente 43,3 millones de personas eran ciegas; 295 millones de personas
tenían una discapacidad visual moderada y grave; 258 millones tenían una
discapacidad visual leve; y 510 millones tenían discapacidad visual por presbicia no
corregida. A nivel mundial, entre 1990 y 2020, el número de personas ciegas aumentó
un 50.6% y el número de personas con discapacidad visual moderada y severa
aumentó un 91.7%. Los autores prevén que para el año 2050, 61 millones de personas
serán ciegas, 474 millones tendrán discapacidad visual entre moderada y grave, 360
millones tendrán discapacidad visual leve, y 866 millones tendrán presbicia no
corregida. Esto muestra que existe una cantidad creciente de la población mundial que
afronta, o afrontará en un futuro cercano, problemas relacionados con el sentido de la

4
visión y la necesidad de afrontar desde distintos escenarios, incluido el tecnológico, las
problemáticas que se derivan de estas condiciones de salud pública.

3.1.2. GPU

La GPU (Graphics Processing Unit) es un acelerador multihilo que permite realizar


múltiples cálculos a través de flujo de datos de forma paralela de las aplicaciones
implementadas. Para mejorar su eficiencia este organiza los hilos en grupos los cuales
comparten el mismo contador de programa. De esta manera ejecuta una sola
instrucción en múltiples hilos y cada uno de estos hilos cuenta con registros de
propósito general que permiten acceder a las diferentes memorias con las que cuenta el
acelerador (Villa et al., 2019).

Muchas de estas unidades usan una arquitectura constituida por varios cientos de
grupos de SM (Streaming MultiProcessors) y a su vez cada uno de los SM está
compuestos por SP (Stream Processors). Un ejemplo de este tipo de arquitecturas es la
arquitectura Fermi (Ver Figura1) de la compañía NVIDIA® (Hernández et al., 2013).

Figura1. Arquitectura GPU

Fuente: (Hernández et al., 2013).

En los últimos años se han identificado diversas aplicaciones con requisitos


computacionales complejos que han sido implementadas en una GPU con gran éxito.
Una de estas aplicaciones es la renderización o representación gráfica de imágenes en
las que es necesario procesar miles de millones de pixeles por segundo. Para esto, las
GPU deben ofrecer una gran capacidad de procesamiento para satisfacer aplicaciones
complejas en tiempo real. Adicionalmente, cuentan con un proceso de pipeline para

5
realizar el paralelismo que a su vez es aplicable a muchos otros campos
computacionales (Owens et al., 2008).

3.1.3. CUDA

Es la sigla para Compute Unified Device Architecture. CUDA es una plataforma de


computación paralela e interfaz de programación de aplicaciones (API) que permite
tener acceso a las GPU diseñadas por NVIDIA® mediante una extensión del lenguaje C
estándar. Incluye un compilador junto a un paquete de herramientas de desarrollo
proporcionadas por NVIDIA® para realizar la codificación de algoritmos a ser
ejecutados por las GPU (Mainzer & Zachmann, 2015). En noviembre de 2006 la
compañía NVIDIA® presentó una plataforma de cómputo paralela de propósito general
que aprovechaba el motor de cómputo en las GPU para dar solución a problemas
computacionales complejos de una manera más eficiente en comparación a un CPU
(NVIDIA, 2021).

En cuanto al procesamiento de datos, CUDA emplea el concepto de kernel. Un kernel o


núcleo hace referencia a funciones realizadas por el programador que serán ejecutadas
la cantidad de veces necesarias de manera paralela. Esta ejecución se realiza por una
cantidad determinada de hilos o Threads, según se requiera, en lugar de solo ejecutarse
una sola vez como una función normal de alto nivel (NVIDIA, 2021), ver Figura 2.

Figura 2. GPU - Organización de hilos y bloques

Fuente: (Nvidia, 2011).

Los hilos se pueden organizar en grupos, dado que pueden sobrepasar el número
permitido para un bloque según lo defina la arquitectura de la GPU. El término bloque
(Block) hace referencia a un conjunto de hilos (Threads) que tienen un límite de
instancias para ser lanzadas durante la ejecución, cuyo valor está dado por la
arquitectura de cada dispositivo en particular. Los bloques de hilos están organizados
de manera conceptual en matrices de 1, 2 y 3 dimensiones denominadas cuadriculas
(Grids) según sea la necesidad de la aplicación. Estas Grids son útiles cuando se
necesita procesar grandes cantidades de datos en paralelo (Ver Figura 2) (NVIDIA,
2021).

Para obtener una alta eficiencia en la ejecución de los kernels se cuenta con el modelo
SIMT (Single Instruction-Multi Thread) que permite el manejo de cientos o miles de hilos

6
a ser ejecutados en paralelo. Su jerarquía, en memoria, por lo general se divide en dos
espacios direccionables: una memoria local que es pequeña y rápida, visible por un
subconjunto de procesos o hilos en ejecución, y una memoria global la cual es más
grande pero más lenta, que es visible por todos los hilos en ejecución. La desventaja del
modelo SIMT es que éste no es eficiente cuando se requiere sincronizar la cantidad de
hilos para garantizar una exclusión mutua en una sección critica (Villegas et al., 2015).

CUDA ofrece las siguientes formas de acceder a los datos mediante múltiples espacios
de memoria durante la ejecución: 1) una memoria global que puede acceder a todos los
hilos ejecutados dentro del kernel; 2) una memoria compartida que posee una velocidad
de acceso intermedia y que permite acceder a todos los hilos en un bloque; y 3) una
memoria local que tiene el menor tiempo de respuesta y permite acceder a un hilo de
los que fue asignada esta memoria (NVIDIA, 2021).

Para administrar los modelos de memoria, NVIDIA® proporciona diferentes etiquetas


que le permiten al compilador distinguir entre las funciones que se pueden ejecutar en la
CPU (host), o en la GPU (device). Estas etiquetas se muestran en la Tabla 1.

Tabla 1. Etiquetas de identificación de funciones.


ETIQUETAS LLAMADA DESDE EJECUTADA EN
__host__ Host Host
__global__ Host Device
__device__ Device Device
Fuente: (NVIDIA, 2021).

3.1.4. Imagen Digital

Una imagen digital se define como una función bidimensional f (x , y ) donde x e y son
las coordenadas del plano que contiene un número finito de puntos o elementos
conocidos como pixeles que componen la imagen, y la función f (x , y ) es la amplitud en
el punto con coordenadas ¿, y ¿ la cual también es conocida como la intensidad o nivel
de gris que la imagen tiene en ese píxel. Se habla de una imagen digital si en la función
de la imagen hay valores de intensidad finitos y discretos (Dobernak, 2015).

Figura 3. Imagen digital RGB.

Fuente: (Dobernak, 2015).

7
Una de las características más importantes de una imagen es su resolución espacial, la
cual hace referencia a la cantidad de pixeles que la conforman. Es común expresar la
resolución de una imagen por medio de dos valores numéricos: el primero hace
referencia al número de columnas de pixeles o ancho de la imagen y el segundo a las
filas totales de pixeles o alto de la imagen (Dobernak, 2015).

Dentro de las imágenes digitales existen las imágenes a color, las cuales tienen las
mismas características mencionadas anteriormente. Sin embargo, en este tipo de
imagen cada pixel se codifica según el espacio de color que se esté usando. Un
ejemplo de esto son las imágenes RGB (Red, Green, Blue), en donde cada píxel se
muestra como un color constituido por diferentes cantidades de las componentes de
color rojo, verde y azul como se muestra en la Figura 3.

Además de las imágenes a color, están las imágenes en escala de grises (ver Figura 4),
estas son arreglos bidimensionales los cuales contienen información acerca de la
intensidad de luz o luminancia que presenta cada píxel de la imagen. Normalmente, los
valores de cada píxel se encuentran codificados en 8 bits, es decir, cada píxel puede
tomar un valor entre 0 y 255, siendo 0 el valor numérico correspondiente al color negro
y 255 al color blanco.

Figura 4. Imagen en escala de grises

Fuente: (MatLab, 2022).

Existen varios métodos a través de los cuales es posible realizar la transformación de


una imagen en color a una imagen en escala de grises. La mayoría de éstos utilizan el
espacio RGB para pasar una imagen en color a su equivalente en escala de grises
debido a su simplicidad de manejo. Una de las formas más usadas es el promedio de
las tres componentes del espacio RGB (ver Ecuación 1) (Cortes Osorio et al., 2011):

 R ( x , y ) canal rojo de la imagen a color


 G ( x , y ) canal verde de la imagen a color
 B (x, y) canal azul de la imagen a color
 ImGris( x , y) imagen en escala de grises resultante del promedio de los canales de
la imagen RGB
R ( x , y ) +G ( x , y ) , B(x , y) (1)
ImGris(x , y)=
3

8
3.1.5. Espacios de Color

Los espacios de color hacen referencia a los distintos planos espaciales con los cuales
se puede trabajar una imagen digital a color. Existen varias representaciones espaciales
entre las que se destacan el RGB, HSV, HSI y el modelo YCbCr.

El espacio de color RGB es uno de los modelos más utilizados por los sistemas
informáticos para crear y realizar la reproducción de colores en los monitores. La
representación gráfica del modelo establece los ejes rojos (Red – R), verde (Green -G)
y azul (Blue – B). Cada componente de color depende de una coordenada especifica
como se muestra en la Figura 5.

Figura 5. Espacio de color RGB

Fuente: (Dobernak, 2015).

Las siglas HSV (Hue, Saturation, Value) hacen referencia al Tono, Saturación y Valor,
respectivamente. El sistema coordenado para este espacio es cilíndrico. La pirámide
hexagonal presentada en la Figura 6 corresponde al subconjunto en donde la
distribución de colores varía dependiendo a la ubicación dentro del plano espacial. En
este modelo los colores más brillantes están contenidos en el área hexagonal donde el
valor de la componente es V=1. Para medir el tono en este plano se usa el ángulo de
apertura tomando como referencia el eje S. El color rojo se sitúa a 0º, el verde a los
120º y el azul a los 240º, mientras que los colores complementarios se encuentran a
180° de su color primario. El vértice en donde las componentes S y V tienen un valor
igual a 0 corresponde al color negro, el color blanco corresponde a las coordenadas
donde S=0 y V=1.

Figura 6. Representación del modelo HSV

Fuente: (Dobernak, 2015).

9
Este espacio puede ser obtenido a partir de una transformación no lineal del espacio
RGB, usando las siguientes expresiones (ver Ecuaciones 2 a 4):

 R canal rojo de la imagen RGB


 G canal verde de la imagen RGB
 B canal azul de la imagen RGB
 H componente H (tono) de la imagen HSV
 S componente S (saturación) de la imagen HSV

V componente V(valor) de la imagen HSV


1
( ( R−G )+( R−B)) (2)
−1 2
H=cos ¿
√(( R−G)¿ ¿ 2+(R−B)(G−B))
min ⁡( R , G, B)
S=1−3 (3)
R+G+ B
1 (4)
V = ( R+ B+G)
3

Este espacio tiene la ventaja de ser invariante a las condiciones de luz. Sin embargo, la
alta complejidad computacional que requiere para ser implementada, sobre todo en
plataformas como FPGA (Field Programmable Gate Array) dificulta su uso (Dobernak,
2015).

El espacio HSI (Hue, Saturation, Intensity) (ver Figura 7) hace referencia al Tono,
Saturación, Intensidad y es una transformación no lineal del espacio RGB que modifica
el subespacio del cubo transformándolo en dos conos unidos por la base.
Geométricamente, está compuesto por las componentes S, H e I, que corresponden a
una componente de saturación (S) que es la distancia radial del cono y proporciona una
medida del grado del color que se mezcla con la luz blanca, la componente del tono (H)
que es el ángulo respecto al eje rojo y da una magnitud de la longitud de onda
dominante, varía en 360° con separaciones angulares de 120° entre cada color primario
con igual separación para los colores secundarios. La componente de intensidad (I) es
la distancia a lo largo del eje perpendicular al plano de color e indica el valor del brillo y
la información acromática; valores bajos en este eje componente corresponden a los
colores oscuros y los superiores están asociados a los colores claros hasta llegar al
blanco (ver Ecuaciones blanco (ver Ecuaciones 5 a 8. Transformaciones no lineales del
espacio RGB a HSI) (Dobernak, 2015).

A pesar de las ventajas que este espacio ofrece, tiene la misma limitante que el modelo
HSV debido a que tiene una alta complejidad computacional para ser implementada en
aplicaciones hardware debido a sus transformaciones no lineales, lo que lo hace poco
práctico.

El modelo YCbCr es una codificación no lineal del espacio RGB, usada comúnmente
por los estudios de televisión europeos y en la compresión de imágenes. En este
modelo el color se representa por tres componentes o parámetros, uno de ellos es la
luminancia (Y) y dos valores diferentes de color (Cb y Cr). La luminancia (Y) es la

10
cantidad lineal de luz directamente proporcional a su intensidad física. Puede ser
calculada como una suma ponderada de los componentes del espacio RGB.

Figura 7. Representación del modelo HSI

Fuente: (Dobernak, 2015).


 R canal rojo de la imagen RGB
 G canal verde de la imagen RGB
 B canal azul de la imagen RGB
 H componente H (tono) de la imagen HSI
 S componente S (saturación) de la imagen HSI
 I componente I(intensidad) de la imagen HSI

H=
{360−θ
θ si B ≤G
si B> G
(5)

{ }
−1 ( R−G ) +(R−B)
θ=cos 1 (6)
2
2 [ ( RG ) +( R−B)(G−B)] 2

3 min ⁡[R ,G ; B ]
S=1− (7)
(R+G+ B)
1 (8)
I = (R +G+ B)
3

Las características que tiene este modelo en cuanto a la separación de luminancia e


información cromática hacen que éste tenga una mayor ventaja que otros métodos en
cuanto a compresión y transferencia de información de la imagen. Esto se debe a que la
mayor parte de información está contenida en la componente de luminancia y se
transmite con mayor precisión, lo que causa que los valores de las componentes Cb y
Cr disminuyan, contribuyendo a disminuir la perdida de información.

11
En el caso de los sistemas digitales, la ventaja que tiene este modelo es que ahorra
recursos computacionales y ancho de banda para su transmisión. Sin embargo, este
espacio no ofrece buenos resultados con los algoritmos de visión por computadora
como por ejemplo en la segmentación de objetos por color (ver Ecuaciones 9 a 10.
Transformaciones no lineales del espacio RGB a YCrCb) (Dobernak, 2015).

 R canal rojo de la imagen RGB


 G canal verde de la imagen RGB
 B canal azul de la imagen RGB
 Y componente Y (luminancia) de la imagen YCbCr
 Cb componente Cb de la imagen YCbCr
 Cr componente Cr de la imagen YCbCr
Y =0.299 R+ 0.587 G+ 0.114 (9)

Cr=R−Y (10)
Cb=B−Y (11)

3.1.6. Convolución

La convolución se define como un operador matemático que se encarga de transformar


dos funciones dando como resultado una tercera. Esta operación se puede realizar en
tiempo continuo o en tiempo discreto según las necesidades; se define en el tiempo
continuo como (Ver ecuación 12) (Gonzalez et al., 2009):

f(t)*h(t)¿ ∫ f ( τ ) h(t−τ )dτ (12)
−∞

Para realizar esta misma operación en tiempo discreto y con sistemas digitales se tiene
la siguiente expresión (Ver Ecuación 13) (Gonzalez et al., 2009).

y [ n]= ∑ h [ k ] x [n−k ] (13)
k=−∞

En cuanto al uso de esta operación en el procesamiento digital de imágenes se realiza


una extensión de la convolución a dos dimensiones con lo cual esta operación se define
como (ver Ecuación 14) (Gonzalez et al., 2009).
a b
w ( x , y )∗f ( x , y )= ∑ ∑ w ( s , t ) f ( x−s , y−t ) (14)
s=−a t=−b

La convolución bidimensional discreta es la base de algunos procesamientos comunes,


como el filtrado de imágenes. Al realizar la convolución entre una imagen y la máscara
espacial o ventana, el valor del pixel de salida se calcula en función a la suma
ponderada de los pixeles vecinos (Baron et al., 2002).

En la Figura 8 (izquierda), se muestra la matriz de la imagen en la que cada píxel está


representado por su valor numérico. El píxel para el que vamos a realizar la operación
de convolución se presenta con borde rojo, mientras que el área de acción de la

12
ventana se presenta con borde verde. En el medio se muestra la ventana de
convolución y a la derecha el resultado obtenido. Para realizar la convolución se realiza
la multiplicación entre cada elemento de la ventana de la imagen y la ventana de
convolución, para luego sumar todos los productos y así obtener el nuevo valor del
píxel.

Figura 8. Convolución bidimensional

Fuente: (Gimp org, 2021).

Para el ejemplo de la Figura 8, se observa que la mayoría de los elementos de la


ventana de convolución son 0. Esto hace que el resultado final de la operación
modifique el valor del píxel de la imagen original asignándole el valor de 42 (ver
Ecuación 15).

Pixel resultado =( 40∗0 ) + ( 42∗1 ) +…+(58∗0)=42 (15)

El resultado de esta operación se ubica en un píxel desplazado en vertical de la


posición en la que se encuentra el píxel original, dando lugar a la imagen procesada al
repetir este proceso para toda la imagen.

3.1.7. Filtros

Los filtros son una de las principales herramientas en el procesamiento digital de


imágenes y son usados en este campo para el desarrollo de un gran número de
aplicaciones. El concepto de filtro se ha tomado del procesamiento de señales para ser
usado en el campo del procesamiento de imágenes, debido a que está asociado con
permitir o rechazar componentes de frecuencia (Gonzalez et al., 2009). La aplicación de
filtros en una imagen modifica o mejora características de esta. Un ejemplo de las
correcciones realizadas por estos se puede encontrar en el proceso de resaltar o
atenuar bordes, eliminar ruido y destacar contornos.

Comúnmente, los filtros suelen clasificarse en filtros lineales y filtros no lineales. Los
filtros lineales son usados en la eliminación de ruido y la modificación de los niveles de
intensidad de la imagen (Baron et al., 2002). En cambio, los filtros no lineales tienen
como objetivo reducir el ruido en la imagen (Latouche et al., 2017).

Figura 9. Mecanismo de filtro espacial lineal

13
Fuente: (Gonzalez et al., 2009).

Algunos de los filtros más empleados por la comunidad científica dentro del
procesamiento digital de imágenes son: el filtro de Laplace, el filtro de Gauss, el filtro de
Roberts y el filtro de Prewitt.

3.1.7.1 Filtro de Laplace

Este filtro se usa para destacar los bordes de una imagen. Usa el operador de Laplace
en la imagen; éste es un operador isotrópico (es decir, es independiente a la dirección
de la discontinuidad en la imagen) por lo cual recibe este nombre. Éste filtro se define
como se muestra en la (Ver ecuación 16).
∂2 f
 2 calculo del gradiente en sentido de las columnas.
∂ xf2
 2 cálculo del gradiente en sentido de las filas.
 ∂ 2y
∇ f vector gradiente.
2 2
2 ∂ f ∂ f
∇ f= 2
+ 2 (16)
∂x ∂y

En el caso de realizar la formulación del Laplaciano, este puede ser implementado de


forma digital de varias maneras, de las cuales las más frecuente es la siguiente (ver
Ecuación 17),

 f ( x , y ) función de la imagen digital.


2
 ∇ f ( x , y ) vector gradiente.
 a = f ( x+ 1, y )
 b = f (x−1 , y)
 c = f (x , y +1)
 d = f (x , y−1)
 e = 4 f ( x , y)
∇ 2 f ( x , y )=¿ (17)

14
Cabe resaltar que este filtro no se usa directamente en la práctica por ser muy sensible
al ruido que presente la imagen, por lo que se aplica después de usar una máscara para
realzar los contornos (González et al., 2009).

3.1.7.2 Filtro de Gauss

El filtro de Gauss difumina las imágenes y permite eliminar ruido. Es similar al filtro de
media, pero se usa una máscara diferente que se obtiene por medio de la Ecuación 18,
logrando un difuminado mucho más uniforme.

 x coordenada de la columna del filtro


 y coordenada de la fila del filtro
 δ varianza
 g ( x , y ) imagen filtrada
2 2
−x + y
1 2δ
2

g ( x , y )= 2
е (18)
2 лδ

Las ventajas que tiene este filtro es que es separable lo que quiere decir que en vez de
realizar una operación bidimensional es posible realizar dos operaciones
unidimensionales, una de ellas en sentido horizontal y la otra en sentido vertical
(González et al., 2009).

3.1.7.3 Filtro de Roberts

Este filtro es empleado en el proceso de detección de bordes mediante el cálculo de la


primera y segunda derivada, las cuales permiten identificar los puntos de interés en la
imagen. Estos operadores son representados mediante la ecuación (Ver ecuación 19):

 gx coordenadas del pixel en sentido de las columnas.


 gy coordenada del píxel en sentido de las filas.
 ∇ f vector gradiente.

[]
∂f
∇ f =grad =
gx
gy
=
[ ]
∂x
∂f
(19)

∂y

El operador de Roberts es el más simple de todos ya que emplea la dirección diagonal


para calcular el vector gradiente usado en su respectiva máscara o matriz (González et
al., 2009).

3.1.7.4 Filtro de Prewitt

Este filtro, al igual que el de Roberts, sirve para realizar la detección de bordes. Este
operador expande la definición del gradiente a una máscara de 3x3 mejorando su
funcionamiento ante el ruido mediante el uso las ecuaciones de Sobel. Sin embargo, a
diferencia del Filtro de Sobel, este no le da importancia a los pixeles de la imagen que
estén cercanos al centro de la máscara obteniendo una máscara como la mostrada en
la Figura 10 (González et al., 2009).

15
Figura 10. Máscaras del operador de Prewitt

Fuente: (González et al., 2009).

3.1.8. Operaciones Morfológicas.

Las operaciones morfológicas son herramientas muy utilizadas en el procesamiento de


imágenes. Estas operaciones simplifican la información que contiene la imagen.
Comúnmente se usan para preservar aspectos relevantes de la imagen y eliminar los
elementos que no sean de interés, con lo que se puede realizar selección de objetos,
extracción de rasgos, detección de fallos, entre otras (Fernández, 2020).

Estas operaciones se pueden usar también para realizar la supresión de ruido o la


simplificación de formas, destacar la estructura de objetos y una descripción cualitativa
de objetos (área, perímetro, diámetro, entre otras) (Fernández, 2020).

Las operaciones morfológicas básicas se definen como erosión y dilatación. La


combinación de estas permite realizar operaciones morfológicas más complejas
denominadas apertura y clausura.

3.1.8.1 Erosión

Consiste en la eliminación de los pixeles del objeto en donde al menos uno de sus
pixeles en su vecindad pertenezca al fondo. La aplicación de esta operación tiene el
efecto de reducir el objeto o eliminar objetos que sean muy pequeños (ver Figura 11)
(Fernández, 2020).

Figura 11. Ejemplo de erosión (a) objeto original (en azul), (b) píxeles
eliminados en la operación de erosión (en amarillo) y (c) resultado final.

Fuente: (Fernández, 2020).

3.1.8.2 Dilatación

Todos los pixeles que pertenezcan al fondo se convierten en pixeles del objeto si al
menos uno de los pixeles que esté en su vecindad pertenece a dicho objeto. Esta

16
operación tiene como efecto aumentar el tamaño de los objetos o rellenar agujeros que
puedan estar dentro del objeto a destacar (Ver Figura 12) (Fernández, 2020).

Figura 12. Ejemplo de dilatación (a) objeto original (en rojo), (b) píxeles
convertidos en objeto al aplicar la dilatación (en verde) y (c) resultado final

Fuente: (Fernández, 2020).

3.1.8.3 Apertura

Consiste en aplicar primero erosión a la imagen y al resultado obtenido se le aplica la


operación de dilatación. Tiene como efecto eliminar elementos salientes, conexiones
finas o suavizar los contornos de un objeto como se muestra en la Figura 13
(Fernández, 2020).

Figura 13. Ejemplo de apertura en una imagen binaria

Fuente: (Fernández, 2020).

Esta operación se representa mediante la siguiente expresión (Ver ecuación 20).

 I imagen digital
 H ventana de operación
I ○ H =(I ⦵ H )⨁ H (20)

3.1.8.4 Clausura

Para realizar esta operación se aplica en primer lugar dilatación y luego se realiza
erosión. La clausura tiene como funcionalid unir dos objetos separados por un margen
delgado, eliminar pequeños orificios manteniendo el tamaño del objeto y rellenar o
suavizar el contorno (ver Figura 14) (Fernández, 2020).

17
Figura 14. Ejemplo de clausura en una imagen binaria

Fuente: (Fernández, 2020).

La operación de clausura se puede representar mediante la siguiente expresión (Ver


ecuación 21).

 I imagen digital
 H ventana de operación
I • H =(I ⨁ H)⦵ H (21)

3.1.9. Mapa de Profundidad de Campo.

El mapa de profundidad de campo es el resultado del procesamiento de imágenes para


identificar un objeto o escena de interés. Este mapa ofrece una amplia información
acerca del ambiente u objeto capturado como la presencia de objetos en la escena, la
distancia de dichos objetos al punto de referencia de la toma de la imagen, detalles de
los objetos a analizar, entre otros. Este tipo de mapas suelen ser usados en
aplicaciones de visión artificial, navegación autónoma e inspección de partes mecánicas
(Chang & Maruyama, 2018).

Figura 15. Mapa de profundidad generado por visión estéreo

Fuente: (Parissaki & Otero, 2019).

Existen varios métodos por los cuales es posible generar este tipo de mapa. Uno de
éstos es la técnica de visión estéreo. Esta técnica emplea dos cámaras dispuestas a
una distancia conocida entre sí, con el objetivo de capturar el entorno mediante dos
imágenes con diferente perspectiva. Con esta técnica se busca hacer una
reconstrucción geométrica del entorno mediante la comparación de pixeles presentes
en las dos imágenes por medio de la distancia relativa presente entre dos píxeles que
coincidan entre sí y a partir de este dato, generar un mapa de profundidad. La
desventaja de este método es que requiere mayor capacidad computacional para el
análisis de las imágenes (Ver figura 15) (Parissaki & Otero, 2019).

18
Otro método empleado en la generación de estos mapas es el uso de cámaras que
cuentan con sensores RGB y sensores infrarrojos. En este método, se emplea el sensor
infrarrojo para generar una nube de puntos representativa de la geometría del entorno,
información que permite estimar las coordenadas espaciales de los objetos presentes
en la escena. Esta nube de puntos se puede proyectar en un espacio 2D en donde los
pixeles del mapa generado contienen los valores de distancia. El uso de una cámara
generalmente suele ser suficiente. Sin embargo, si el objeto esta ocluido en referencia a
la cámara el mapa generado puede quedar incompleto. Una solución empleada en este
es el uso de varias cámaras (Ver Figura 16) (Parissaki & Otero, 2019).

Figura 16. Mapa de profundidad generado por cámara con sensor de


profundidad

Fuente: (Xu & Fujimura, 2003).

3.1.10. Algoritmos de Inteligencia Artificial

El concepto de Inteligencia Artificial (IA) puede variar dependiendo del autor tomado
como referencia y el punto de vista que este manifieste. Sin embargo, lo que es claro es
que la IA estudia la inteligencia de los ordenadores o equipos de cómputo para
realizar actividades o tareas que por ahora son mejor realizadas por los seres humanos
(Vasquez & Cardona, 2019).

Algunas de las aplicaciones de la IA se centran en el reconocimiento de patrones, de


caracteres, de voz, de rostros y de objetos. Con el objetivo de solucionar eficientemente
el problema de reconocimiento, en la década de 1950 fueron diseñados los modelos de
las redes neuronal artificiales (Artificial Neural Network– ANN) (Vasquez & Cardona,
2019). Gracias a los avances obtenidos en el área de los sistemas de computación,
estos modelos han evolucionado, creando nuevos métodos de inferencia. Los modelos
modernos emplean arquitecturas compuestas por un conjunto de diferentes tipos de
capas y son denominadas redes profundas. Esta arquitectura se destaca por el uso de
capas especializadas en realizar operaciones de convoluciones. Las arquitecturas que
emplean estas capas han sido denominadas redes neuronales convolucionales
(Convolutional Neural Network – CNN).

Uno de los algoritmos más populares de IA que emplea la arquitectura de CNN es


conocido como YOLO (You Only Look Once), el cual ha tenido éxito en la detección de
objetos en tiempo real. Este algoritmo ha sido muy utilizado en diversas aplicaciones
como detectar señales de tráfico, personas, parquímetros y animales y objetos (Jadhav
et al., 2020).

19
3.1.11. Algoritmos Secuenciales

Este tipo de algoritmos se basa en el principio de acondicionar o preprocesar una


imagen con el fin de mejorar o adecuar alguna(s) de sus características, lo que facilita
realizar posteriormente la extracción de información de interés.

Este tipo de algoritmos puede dividirse en tres tipos: procesamiento a alto nivel,
procesamiento a nivel medio y procesamiento de bajo nivel. Para cada nivel en
particular se realiza un conjunto de operaciones diferentes como se muestra en la Tabla
2.

Tabla 2. Clasificación de algoritmos secuenciales


Nivel de Características Ejemplo
Procesamiento
Se realizan operaciones que Operaciones morfológicas simples, filtrado,
Bajo tienen en cuenta todos los pixeles modificación del histograma, detección de
de la imagen bordes
Se realizan operaciones más Segmentación de la imagen, etiquetado de
Medio complejas, usando bloques o regiones, conectividad de pixeles
grupos de pixeles
Usa operaciones con alta Correlación, Matching, cálculo de distancia de
Alto complejidad, son costosas objetos u obtención de datos en 3
computacionalmente y usan dimensiones
pixeles concretos de la imagen
Fuente: Adaptada de (De Frías et al., 2019).

3.1.12. PWM

La modulación PWM (Pulse Width Modulation) es una técnica que consiste en realizar
la variación del ancho de pulso o ciclo de trabajo de una señal periódica (típicamente
cuadrada), que permite determinar el tiempo en el que la señal se encuentra en nivel
alto o bajo con respecto al periodo de la señal. Este tipo de modulación tiene diversas
aplicaciones que incluyen el control de brillo de LEDs, control de velocidad de motores,
y aplicaciones de electrónica de potencia (ver Figura 17) (Vanegas & Marulanda, 2017).

Realizando su representación matemática (ver Ecuación 22):

τ
D= (22)
T
En donde,
 D es el ciclo de trabajo
 τ es el ancho de pulso
 T es el periodo de la señal
Figura 17. Señal PWM

20
Fuente: Autores.

3.1.13. RPI GPIO

Esta librería permite realizar el control de los puertos GPIO (General-Purpose Input-
Output) que poseen las tarjetas Jetson de NVIDIA® los cuales se pueden configurar
como puertos digitales de entrada/salida. Gracias a que el puerto GPIO de las tarjetas
Jetson es muy similar al de las tarjetas Raspberry Pi, es posible realizar la
programación de este mediante el lenguaje Python empleando el paquete JetsonGPIO,
el cual tiene la misma API que la biblioteca RPIGPIO (NVIDIA, 2019).

21
4. ESTADO DEL ARTE

Los sistemas de navegación para personas con discapacidad visual han sido
ampliamente investigados por la comunidad científica. Comúnmente, las
implementaciones realizadas se enfocan en operar en entornos cerrados controlados,
donde los cambios en las variables ambientales no son muy frecuentes, facilitando la
detección de objetos. Algunos ejemplos de estos entornos incluyen casas, edificios y
centros comerciales (Patel et al., 2018).

Los sistemas de asistencia y navegación se clasifican de acuerdo con los sensores


empleados por el dispositivo (Tapu et al., 2013). Esta clasificación agrupa a los
dispositivos en: i) no basados en cámaras, ii) basados en cámaras e iii) híbridos.

4.1. Dispositivos No Basados en Cámaras

Los sistemas no basados en cámaras son comúnmente usados en la industria y en la


robótica, apoyados en sistemas de navegación que emplean tecnologías como:
radiofrecuencia (Radio Frequency Identification - RFID), comunicación de campo
cercano (Near-field communication - NFC) y bluetooth de baja energía (Bluetooth Low
Energy - BLE). Los usuarios de este tipo de tecnologías portan un equipo que permite
realizar el rastreo (computador, smartphone) y mediante el uso de algoritmos, calculan
la posición de los usuarios apoyados en receptores infrarrojos (Infrared - IR), sensores
ultrasónicos y módulos GPS (Global Positioning System – GPS) (Hameed & Ahmed,
2019).

Un ejemplo de este tipo de sistemas se presenta en (Sadi et al., 2014), trabajo que
muestra el desarrollo de unos lentes compuestos por un sensor ultrasónico y un
microcontrolador encargado de realizar la adquisición de datos y determinar la
presencia de obstáculos en la ruta del usuario. Las ventajas de este sistema son la
portabilidad que ofrece y el alcance de detección permitido por el sensor ultrasónico (0 a
3m). Sin embargo, la precisión de este dispositivo es baja limitando las aplicaciones en
las que puede ser utilizado.

Igualmente, en (Obando & Sotomayor, 2015) se describe un dispositivo electrónico de


asistencia para personas invidentes. Este dispositivo está compuesto por un chaleco en
el que se ubican cuatro sensores ultrasónicos y 2 microcontroladores, uno de ellos,
configurado en modo maestro, se encarga de recibir la información proveniente de los
sensores y enviar las alertas audibles en forma de mensajes pregrabados para informar
al usuario acerca de los objetos presentes en el entorno. Por su parte, el segundo
microcontrolador se encuentra configurado en modo el esclavo y se encarga de generar
alertas hápticas mediante seis motores vibratorios ubicados en el chaleco.

Otro dispositivo, (Miño & Gámez, 2020) es un asistente a la navegación conformado por
un sensor ultrasónico con un rango de detección de 17 a 30 cm y un módulo GPS. El
sensor ultrasónico es usado para realizar la detección de objetos en la ruta trazada
mediante el GPS. Este dispositivo genera una alerta háptica que varía en intensidad
respecto a la distancia a la que se detecta el objeto. Una de las desventajas de este
dispositivo es que, en ambientes cerrados como edificios, el módulo GPS tiene

22
dificultades para establecer una buena recepción de datos, lo que dificulta establecer la
ubicación del usuario.

Un proyecto que hace un aporte en este campo es el Smart Cane (Vasquez & Cardona,
2019). Este es un dispositivo portable que consta de una red de sensores ultrasónicos,
un sensor de humedad y un microcontrolador que procesa los datos provenientes de los
sensores. Para interactuar con el usuario este tiene una serie de motores hápticos y un
zumbador. Este último permite enviar mensajes de audio y alertas hápticas al usuario
para advertir acerca de la presencia de un obstáculo.

Además de las diferentes plataformas en las que se soportan los asistentes de


navegación existen también diversas tecnologías que pueden ser usadas para la
implementación de prototipos de asistencia de navegación. Una de estas tecnologías es
el BLE que trabaja realizando una red de etiquetas de navegación en el entorno, tiene
un alcance de 1 a 2 m dependiendo de la propagación de la señal. Uno de los ejemplos
de dispositivos basados en esta tecnología es el asistente SUGAR (Plikynas et al.,
2020) que usa etiquetas (BLE) para dar el posicionamiento del usuario.

Los sensores infrarrojos son usados en espacios interiores para medir la distancia a la
que se encuentran los objetos dentro de la escena de la persona con discapacidad
visual. El rango dinámico de estos sensores oscila entre 0.2 a 14 metros. La desventaja
de los sistemas basados en estos sensores, es que se ven afectados por las
condiciones de luminosidad del ambiente, siendo especialmente susceptibles a la luz
día (Plikynas et al., 2020).

Otros métodos menos convencionales para el desarrollo de navegadores autónomos se


basan en información de campo magnético de la tierra para establecer el
posicionamiento. Por ejemplo en (Plikynas et al., 2020) se utiliza el paisaje magnético
que generan las edificaciones originado por sus estructuras internas y los materiales
con los cuales están construidas. Estas crean perturbaciones en el campo estable de la
tierra y le dan forma al paisaje anteriormente mencionado. Dichas perturbaciones se
usan para generar mapas de interiores a partir del campo geomagnético. Para esto se
toma la huella dactilar magnética y la localización ligera, se construye el mapa
magnético y se lleva a cabo la estimación de la posición del usuario. Sin embargo, los
asistentes basados en estas tecnologías no han tenido gran acogida en el mercado,
dado a que pueden sufrir fallas al tiempo que su interfaz de comunicación transmite
poca información del entorno, lo que incrementa el peligro potencial de colisión
(Vasquez & Cardona, 2019).

4.2. Dispositivos Basados en Cámaras.

Los sistemas basados en cámaras usan sensores RGB como fuente principal de
información, siendo capaces de reconocer objetos. Algunos de estos sistemas emplean
únicamente una cámara y se apoyan en sensores de códigos de respuesta rápida
(Quick Response code - QR)(Idrees et al., 2015).

Un ejemplo de estos asistentes se presenta en (Li et al., 2019), el cual detecta


obstáculos en un ambiente dinámico y ajusta la planificación de la ruta en tiempo real
para mejorar la seguridad mientras se realiza el recorrido. Para esto, el asistente cuenta
con un editor de mapas, analiza la información geométrica de la arquitectura del
ambiente y genera un mapa 2D. Asimismo, aprovechando el posicionamiento que

23
ofrece el VPS (Visual Positioning Service) usado por Google Tango, se realiza un
algoritmo para alinear los mapas y unirlos con un archivo de área visual que genera el
sistema. Además de incorporar una cámara RGB-D para capturar imágenes del
ambiente y pasarlas por un filtro Kalman (con un sello de tiempo para la detección de
obstáculos), este sistema cuenta con una interfaz HMI multimodal para interactúar con
el usuario por medio de canales de voz y audio, y una interacción háptica por medio de
un Smart cane.

Los Smartphone también han sido usados para el desarrollo de estos asistentes. Por
ejemplo, para los Smartphone con sistema Android, se ha desarrollado una aplicación
que identifica códigos QR distribuidos en el piso a una distancia determinada. Este
código brinda información al usuario de su posición actual y solicita el lugar de destino
al cual se quiere dirigir para trazar la ruta óptima correspondiente. La aplicación cuenta
con un rastreo de ruta para detectar desviaciones y enviar alertas audibles al usuario
que lo ayudan a regresar a la ruta trazada. Uno de los inconvenientes es que requiere
estar todo el tiempo en línea. Los desarrolladores esperan poder suplir este
inconveniente con ayuda del módulo GPS que permitiría que la aplicación pueda ser
usada también para ambientes exteriores (Idrees et al., 2015).

Dentro de los prototipos desarrollados para el apoyo apersonas con limitación visual, se
encuentra el propuesto por (Takizawa et al., 2015) que se compone de un sensor
Kinect® de Microsoft®, un teclado numérico un sensor táctil, un bastón blanco y otros
dispositivos de retroalimentación. El sensor Kinect® se usa para capturar imágenes del
entorno e identificar los objetos presentes en la imagen y que estén fuera de rango de
detección del bastón tales como, sillas, escaleras, entre otros. Ha sido diseñado para
enviar la cantidad justa de información al usuario y de la manera más eficiente posible.

Otro dispositivo diseñado dentro de este campo es ejecutado sobre la plataforma


Raspberry Pi 3 (Segura & Lozada, 2019), el cual es capaz de reconocer las diferentes
señales de tránsito entre ellas los tres estados de un semáforo (rojo, amarillo, verde).
Este asistente primero realiza una etapa de preprocesamiento con el fin de destacar la
información de mayor importancia, para dar más facilidad al seccionamiento de los
objetos de interés. Luego realiza una comparación y distinción de los objetos
identificados y de esta manera enviar un mensaje con la información obtenida por medio
de notas audibles. La desventaja de este prototipo es el tiempo que tarda entre la
recepción de los datos a analizar y el envío una alerta, el cual oscila en torno a 4.3
segundos. Esto hace que la fluidez con la que el usuario transita por el entorno sea
limitada.

Además de los dispositivos electrónicos ya mencionados, también se ha desarrollado


aplicaciones web para el apoyo a la movilidad de personas con limitaciones visuales.
Ejemplo de esto es una aplicación web (Jadhav et al., 2020) que pude ser usada en
Smartphone con sistema Android y en PCs. Hace uso de la cámara integrada en el
Smartphone y la cámara webcam del PC. Las imágenes capturadas por las cámaras
son enviadas para ser analizadas en tiempo real por el algoritmo YOLO con que se
realiza la detección de objetos presentes en la imagen y que pueden representar
obstáculos potenciales para el usuario. Una vez obtenida la información necesaria, se
genera una alerta audible con la información de los obstáculos detectados y la ruta a
transitar. La aplicación obtuvo una tasa de aciertos del 75% para la detección de objetos
y su posición en la imagen.

24
En el trabajo realizado por (Konaite et al., 2021) se muestra un dispositivo constituido
sobre una Raspberry 4, una Picamera ubicada en un casco y un parlante. Este prototipo
captura las imágenes del entorno y las envía al algoritmo MobileNet encargado de
realizar la detección de objetos que estén presentes en la imagen capturada, y la
posición en la que están ubicados. El dispositivo solo alerta al usuario por notas de voz.
La precisión en la detección del objeto es igual o mayor al 60%. La desventaja de este
prototipo es que solo procesa 4.5 cuadros por segundo lo cual limita la fluidez con la
cual el usuario transita por el entorno.

Otro aporte en este campo es un prototipo (Romero et al., 2018) que cuenta con una
cámara Kinect® con la que se toman las imágenes de la escena por donde el usuario se
desplaza. Genera dos tipos de alerta audible y no audible, al tiempo que estima la
distancia de los objetos presentes en el ambiente en un rango de 50 a 250 cm. La alerta
no audible se basa en tres dispositivos hápticos que se ubican en el abdomen de la
persona y que indican en qué posición se encuentra el obstáculo (derecha, centro e
izquierda). La alerta audible genera información complementaria como distancia,
ubicación, tamaño (ancho) de los objetos en la escena. Este dispositivo presenta
limitaciones en sus alertas hápticas, debido a que resultan confusas, además de no ser
cómodas de portar en el área abdominal por parte del usuario.

En el trabajo propuesto por (Wang et al., 2017) se desarrolló un prototipo que utiliza una
cámara 3D, un cinturón compuesto por motores vibradores que se controlan por
separado y una interfaz braille, para dar a los usuarios más información del entorno.
Este dispositivo se basa en un algoritmo que recibe la imagen de profundidad, para
luego agrupar los pixeles de la imagen en tres grupos y de esta forma identificar los
objetos en la escena. Cuando el portador del dispositivo se encuentra a dos metros de
distancia del objeto u obstáculo, se emite una alerta por medio del cinturón indicándole
al usuario hacia dónde dirigirse.

Asimismo, en (Franco & Rodríguez, 2018) presenta un dispositivo para detección de


objetos en ambientes cerrados que cuenta con una cámara para la captura de
imágenes del ambiente que rodea a la persona. El algoritmo empleado por este
dispositivo se basa en la extracción de mínimos cuadrados realizar el cálculo de las
pendientes de los contornos de los objetos en la imagen y aplicar un filtro para resaltar
los contornos detectados en la etapa anterior. Esta estrategia permite identificar el
objeto con gran eficacia, sin embargo, el algoritmo no es capaz de distinguir una pared
como un obstáculo en la imagen.

4.3. Dispositivos Híbridos

En cuanto a los sistemas híbridos, se mezclan los dispositivos no basados en cámaras


(RFI, BLE, NFC, …) y el procesamiento de imágenes (Nair et al., 2018) para mejorar la
identificación de objetos (Simoes et al., 2018). El uso de varias tecnologías aumenta la
precisión de los prototipos y facilita la navegación autónoma para llegar al destino
(Plikynas et al., 2020).

En (Nair et al., 2018) se presenta un sistema que utiliza Bluetooth y Google Tango, para
reducir las debilidades que estas dos tecnologías presentan de manera individual. El
sistema recibe por parte del usuario el lugar de destino y luego, mediante las imágenes
tomadas por la plataforma Google Tango y las marcas Bluetooth presentes en el
ambiente, se traza la ruta más corta desde el punto de partida al punto de destino.

25
Cuenta con un módulo vibro táctil con sensores infrarrojos usados para realizar la
detección de objetos cercanos y producir una señal vibratoria proporcional a la
proximidad del objeto. Una de las limitantes que presenta este dispositivo es que tarda
un tiempo considerable en realizar la abstracción de características del entorno en el
que se encuentra el usuario.

Otro dispositivo que integra varias tecnologías es un asistente de navegación descrito


en (Simoes et al., 2018) que incorpora dos formas de realizar el procesamiento de la
información del ambiente: la primera es un modo online que realiza la fusión de datos
de radio frecuencia junto con unos marcadores visuales, o solo por el wifi cuando uno
de los sensores se ve fuertemente afectado por ruidos u otras interferencias; la segunda
forma es el modo offline que consiste en que el mapeo de interiores se realiza mediante
la fusión de datos de radiofrecuencia y marcadores visuales, a partir de lo que construye
una representación del entorno por donde transita la persona portadora del dispositivo.

De igual manera en (Hakim & Fadhil, 2019) se propone un dispositivo que se compone
de unas gafas con un sensor ultrasónico, una cámara RGB-D y un sistema de emisión
de alertas audible. Este captura la imagen RGB y la divide en secciones para
determinar su ubicación en la escena, teniendo en cuenta que los objetos más cercanos
se ubicaran en la parte inferior de la imagen. Una vez se detecta la posición del objeto
en la escena, se analiza la imagen de profundidad con el fin de determinar la distancia a
la cual se encuentra dicho objeto. Si el objeto es transparente o no es detectado por el
sensor de profundidad de la cámara, se hace el uso del sensor ultrasónico con el fin de
evitar colisiones. Una vez se detecta la posición y distancia del objeto, el sistema envía
un mensaje de audio indicando cual es la ruta libre. Si el camino esta obstruido
totalmente, el sistema le pedirá al usuario rotar 90° hacia la derecha o izquierda hasta
encontrar un camino libre.

Las FPGA han sido utilizadas con el fin de desarrollar prototipos eficaces de asistencia
de navegación para personas con discapacidad visual. En este contexto, se han
aplicado algoritmos de disparidad y diferentes arquitecturas de hardware para la
implementación eficiente de dichos algoritmos sobre la FPGA. A partir de estos se
estima la distancia al obstáculo y se envía la alerta correspondiente al usuario mediante
señales audibles. La desventaja es que, a pesar de optimizar el algoritmo, se requiere el
uso de una gran cantidad de recursos para lograr un óptimo desempeño del sistema.
Por esto, se ha recurrido a arquitecturas semi paralelas que buscan reducir el número
de elementos lógicos requeridos para su implementación (Sekhar et al., 2016).

En cuanto a trabajos realizados en este campo en la Universidad Pedagógica y


Tecnológica de Colombia (UPTC), se encuentra un trabajo de grado realizado en el año
2010 al interior del Grupo GIRA por Jhonatan Alarcón y Germán Talero, bajo la
dirección del Ing. Wilson Javier Pérez, en el que se desarrolló un sistema electrónico de
guía para personas invidentes en espacios cerrados controlados. Este sistema estaba
conformado por dos cámaras, dos sensores ultrasónicos, dos actuadores de vibración y
una tarjeta de adquisición basada en el microcontrolador PIC18F2550. El prototipo iba
conectado a un computador portátil dispuesto en la espalda del usuario, encargado de
realizar la identificación de obstáculos a una distancia de hasta 6 metros mediante una
aplicación de Matlab®. Para distancias inferiores a 3 metros, la detección de obstáculos
era realizada mediante los sensores ultrasónicos que enviaban la información al
computador a través de la tarjeta de adquisición de datos. Los actuadores de vibración
le indicaban al usuario la mejor ruta de navegación a seguir. Una de las

26
recomendaciones de este trabajo fue estudiar la viabilidad de implementar el algoritmo
general en un sistema embebido, con el fin de aumentar la velocidad de procesamiento
y la portabilidad del sistema. El dispositivo desarrollado no tenía la capacidad de
detectar puertas de acceso, interruptores, escalones, huecos y objetos pequeños,
además, de tener un tiempo de procesamiento elevado, aproximadamente de treinta
segundos por imagen, lo que constituía el principal problema de esta implementación
(Alarcon et al., 2010).

En la Tabla 3 se presentan algunos de los trabajos analizados durante la revisión


bibliográfica. En esta tabla, los trabajos propuestos se encuentran clasificados de
acuerdo con los sensores y la plataforma empleada, el tipo de sensor y la técnica de
procesamiento empleada.

27
Tabla 3. Estado del arte
TIPO DE SISTEMA PLATAFORMA SENSORES TECNICA DE PROCESAMIENTO AUTOR
Ultrasónico Ecolocalización (Sadi et al., 2014)
Ultrasónico Ecolocalización
Microcontrolador (Miño & Gámez, 2020)
GPS Geolocalización
No basados en cámaras Ultrasónico Ecolocalización (Obando & Sotomayor, 2015)
No registra BLE Beacon No registra (Plikynas et al., 2020)
No registra Ultrasonido Ecolocalización (Vasquez & Cardona, 2019)
No registra No registra Geoposicionamiento (Plikynas et al., 2020)
No registra Cámara RGB-D VPS (Li et al., 2019)
Smartphone Cámara Escaneo código QR (Idrees et al., 2015)
Raspberry pi Rasbpicam Visión por computadora (Segura & Lozada, 2019)
Raspberry pi Cámara Kinect® Visión por computadora (Romero et al., 2018)
Computador personal Cámara web Algoritmo YOLO (Jadhav et al., 2020)
Basado en cámaras
Raspberry pi Picamera Algoritmo MobileNet (Konaite et al., 2021)
Harris Corner detector
Computador Cámara Kinect® (Takizawa et al., 2015)
Visión Stereo
Computador Cámara web Mínimos cuadrados (Franco & Rodríguez, 2018)
Computador portable Cámara RGB-D Variación Stixel World (Wang et al., 2017)
Cámara
No registra BLE Beacon Algoritmo de Dijkstra (Nair et al., 2018)
Google Tango
Ultrasonido Ecolocalización
Computador personal (Alarcon et al., 2010)
Cámara Disparidad
Híbridos Cámara RGB-D Umbralización de Otsu
Raspberry (Hakim & Fadhil, 2019)
Ultrasónico Ecolocalización
Cámara Marcadores visuales

Raspberry Wifi No registra (Simoes et al., 2018)


Sensores de radio Marcadores de radio frecuencia
frecuencia
Fuente: Autores.

28
5. DESARROLLO

5.1. Materiales

5.1.1. Hardware

5.1.1.1 JETSON

Esta tarjeta es un SOM (System On Module) completo, conformado por CPU, GPU,
DRAM y almacenamiento FLASH de alto rendimiento de formato pequeño. Cuenta con
un SDK (software development kit) diseñado por NVIDIA® y denominado JetPack™
para acelerar el software y un SDK de servicios y productos para acelerar el desarrollo
de programas ejecutados en la plataforma. Dentro de las plataformas Jetson, se
encuentra la Xavier NX de NVIDIA®, que presenta las siguientes características
técnicas:

 Voltaje de alimentación: de 9v a 20v.


 Potencia de trabajo: hasta 15W con altas tasas de frecuencias de trabajo tanto de la
CPU como de la GPU.
 GPU volta con 348 núcleos NVIDIA® Core y 48 tensor core.
 Procesador ARM Carmel V8.2 de 64 bits.
 Memoria DRAM de 8GB LPDDR4x.
 Almacenamiento de 16GB de memoria eMMC 5.1.
 4 puertos USB 3.1.
 GPIO de 40 pines, donde varios de estos están dedicados a módulos específicos
como son los módulos PWM.
 Conector HDMI.
 Conector Gigabit ethernet (NVIDIA, 2020b).

Para el funcionamiento del sistema operativo en la plataforma, se realizó la instalación


de Linux Ubuntu versión 18.4 sobre una memoria µSD (µ Secure Digital) de 64GB.

5.1.1.2 Microcontrolador PIC 12F675

Es un microcontrolador con un encapsulado de 8 pines, potente y fácil de programar.


Cuenta con 4 canales para el conversor análogo digital con resolución de 10 bits y una
memoria FLASH de 1.75 Kbytes usada como memoria de programa. Puede ser
alimentado con voltajes en el rango de 2 a 5.5 voltios (Microchip, 2010).

5.1.1.3 Kinect®

El sensor Kinect® es un dispositivo desarrollado por la compañía Microsoft®, orientado


principalmente a la industria de los videojuegos. Este dispositivo está constituido por
una cámara RGB, un sensor infrarrojo o de profundidad, un micrófono multi array y un
procesador personalizado propio de Microsoft®. Posee también una base graduable de
entre 30° y –30° en el eje vertical (Guerrero & Villaluenga, 2013).

29
La cámara Depth o sensor de profundidad 3D funciona a partir de dos elementos, uno
de ellos es un proyector de luz de infrarrojos y un sensor de recepción para este mismo
tipo de luz. El software del Kinect® determina una matriz de 640*480 en la que cada
uno de los pixeles varia su valor dependiendo de la distancia a la que se encuentre el
objeto (Z. Zhang, 2012).

Para el manejo de la cámara Kinect® en el lenguaje de programación Python, se realizó


la instalación del driver freenect y la descarga del repositorio Libfreenect en la que se
encuentra la librería respectiva en lenguaje C. Debido a esto, fue necesaria su
“traducción” a lenguaje Python por medio de un módulo de extensión basado en el
compilador estático cython. Este compilador se encuentra el mismo repositorio,
asegurando así la correcta comunicación, sincronización y envió de comandos, lo que
permitió controlar la calibración de la cámara y extracción de la información
suministrada por el dispositivo Kinect®.

También fue necesaria la instalación de la librería libusb-1.0 para establecer la


comunicación del dispositivo con la plataforma Jetson por medio de interfaz USB 2.0.
Esto permitió acceder a la información proveniente del módulo USB de la Jetson.

5.1.1.4 Sensor de Ultrasonido HRLV-Maxsonar-EZ0

El sensor de ultrasonido HRLV-MaxSonar-EZ0 permite hacer mediciones desde 30cm a


5m con una resolución de 1mm. Los formatos de salida de la distancia medida son:
ancho de pulso, voltaje análogo y digital, y comunicación serial RS232 o TTL. Cuando
se usa la salida de voltaje análogo, la distancia tiene un factor de escala dado por la
ecuación 23:

Vin∗5 mm
distancia= (23)
1024

El rango de medición, depende del voltaje de alimentación, el cual varía entre 2,2 a 5,5
voltios estables (MaxBotix Inc., 2021a).

5.1.1.5 Módulo de Audio

El adaptador ALUMINIUM STEREO SOUND ADAPTER es un adaptador de tarjeta de


sonido y de Audio3D con interfaz USB 2.0. Cuenta con un conector de salida estéreo y
uno de entrada para micrófono. Su cualidad más notable es la de ser compatible con
todos los sistemas operativos convencionales (Windows, Mac, Linux), lo que permite
que sea usado con un sistema portátil o de escritorio (Sabrent, 2021).

5.1.1.6 Módulo de Vibración

El módulo de vibración se encuentra separado en dos secciones: La primera sección


consiste en el uso de dos motores (referencia N20), que tienen una velocidad de
rotación de hasta 8800 RPM. La segunda sección es el driver de potencia conformado
por el módulo Arduino DRV8833. Este es un dispositivo conformado por un puente H
dual para el control de giro para motores DC, que dispone funciones de protección
contra cortocircuitos y sobre corrientes, y bloqueo por subtensión y sobre calentamiento.
Este puede ser alimentado en un rango de tensión entre 3v a 11.8v y de -0.5v a 7v para
sus entradas digitales (Texas, 2015).

30
5.1.2. Firmware y Software

5.1.2.1 Herramientas

Como se mencionó anteriormente, el sistema operativo recomendado por el fabricante


de la tarjeta de desarrollo es Linux (Ubuntu) en su versión 18.4. Este SO permite la
instalación y uso del lenguaje de programación Python en su versión 3.8, usado para el
desarrollo del software principal del prototipo.

Para el desarrollo del programa del microcontrolador se utilizó la suite de desarrollo


CCS Compiler en su versión 5.083 y el simulador funcional Proteus en su versión 8.10.

5.1.2.2 PyCUDA

Es una interfaz de desarrollo que permite acceder a la API de computación paralela


CUDA mediante el uso del lenguaje de alto nivel Python. Esta interfaz permite crear
kernels desarrollados en leguaje C a ser llamados como funciones dentro del código
descrito en Python. Esto permite la posibilidad de trabajar con las librerías disponibles
en este lenguaje y facilitar el desarrollo de diferentes aplicaciones (Klöckner, 2021).

5.2. Técnicas

5.2.1. Escalización del Sensor de Profundidad

La escalización del sensor de profundidad se basó en la obtención de su ecuación


característica, requerida para encontrar una relación entre la distancia detectada y el
valor de los pixeles que la representaban. A continuación, se muestra el set-up de
experimentación empleado en este caso:

Figura 18. Pruebas de escalización

Fuente: Autores.

Se realizó la implementación de un algoritmo en Python para calibrar el dispositivo


empleado para realizar la adquisición y posterior almacenamiento de los datos
correspondientes al mapa de profundidad en formato JPEG y CSV.

Se instaló la cámara Kinect® a una altura de 65 centímetros y con un ángulo de


inclinación de 30° con respecto al dispositivo, 0° con respecto al suelo.

31
Se ubicó un obstáculo con medidas 67cmx106cm frente a la cámara, primero a una
distancia mínima de 50cm, y luego desplazado con variaciones de 10 cm hasta una
distancia máxima de 350cm, (ver Figura 18) Se almacenaron 8 datos por cada
variación.

Mediante un algoritmo en Python se accedió a los datos resultantes del paso anterior,
con el fin de documentar en una hoja de cálculo el valor de los pixeles que
corresponden al objeto identificado como obstáculo.

Se promediaron en a hoja de cálculo los 8 valores obtenidos por cada distancia


recorrida, obteniendo así un valor representativo de píxel.

Con los resultados obtenidos, se realizó la gráfica mostrada en la Figura 31 que


representa la distancia vs valor de píxel. Con esto se agregó la línea de tendencia y
ecuación característica correspondientes (ver Ecuación 31).

Se realizó la misma prueba en diferentes horas del día y con variaciones en el nivel de
luminosidad, tabulando y promediando los resultados obtenidos en cada experimento,
mediante lo que se llegó a la ecuación característica del funcionamiento general del
sensor.

5.2.2. Algoritmo para la Detección de Obstáculos

El siguiente algoritmo es planteado como resultado de la experimentación realizada y se


encuentra basado en el funcionamiento de los algoritmos utilizados por Alarcon et al.,
2010, Romero et al., 2018 y Hakim & Fadhil, 2019:

Se realiza la definición de tres variables que representan el valor máximo, el valor


mínimo de los intervalos dinámicos de las distancias de interés y un valor de incremento
para dichos intervalos.

Se umbraliza el mapa de profundidad entregado por la cámara Kinect®, aplicando como


límites de la umbralización, los valores máximos y mínimos de los intervalos de
distancia definidos anteriormente.

Se aplican operaciones morfológicas.

Se fracciona la imagen en 15 secciones y se evalúa el valor cada uno de los pixeles que
la componen. Teniendo en cuenta que la imagen es binarizada, si existe al menos un
píxel en 1, se determina que hay presencia de un obstáculo en una determinada
sección y de esta manera se logra identificar su posición en la imagen. Los resultados
son plasmados en un vector de 15 posiciones, donde un 1 significa presencia y un 0 la
ausencia de objetos por cada sección.

Figura 19. Seccionamiento de la imagen y matriz resultante de la detección de


objetos

32
Fuente: Autores.

Nota: La grilla y los números para cada sección se realiza de manera representativa
para mayor claridad en este documento, pero no son visualizados en el sistema.

Se anexa el vector pasado a un arreglo matricial, se aplica el aumento al intervalo de


distancias y se realiza el mismo procedimiento desde el paso 2 al 4, hasta ocupar todo
el rango de distancias que compone el mapa de profundidad. El tamaño de la matriz
resultante está determinado por la cantidad de frames analizados, la resolución y la
precisión dependerán del valor de incremento dado por la ecuación (Ver ecuación 24).

¿ frames=∫ ( 255−valor alto ventana¿¿¿ incremento )+ 1 (24)

Se sintetiza la información de los tres segmentos que componen cada columna en la


imagen, con el fin de identificar en cinco posiciones (muy izquierda, izquierda, centro,
derecha y muy derecha) la ubicación de los posibles obstáculos y se realiza este
procedimiento por cada uno de los frames correspondientes a los intervalos de
distancias.

5.2.3. Discriminante de Suelo

El algoritmo para la discriminación del suelo se basó en la teoría de perspectiva


aplicada a la imagen obtenida por la cámara, la cual, en circunstancias ideales, cumple
con los siguientes requisitos (Ver ecuaciones 25 y 26):

Figura 20. Calculo de distancia de discriminación

Está situada a 0 grados


respecto al horizonte (Y = 90°)

a = altura a la que se sitúa la


cámara es conocida

β = apertura del lente de la


cámara

Fuente: Autores.

Para determinar la distancia a la cual la cámara empieza a detectar el suelo como un


obstáculo se utilizaron las siguientes ecuaciones:

33
a
c= (25)
cos β
b=c∗sinβ (26)

Donde b es la distancia desde la cual se empezará a detectar el suelo como un objeto.

Partiendo de la matriz de posicionamiento generada en el algoritmo para la detección de


obstáculos (ver sección 5.2.2..) y tomando en consideración las capas en las cuales el
intervalo de distancias es igual o mayor a la distancia b, se puede realizar un análisis de
las posiciones de los objetos presentes en el ambiente y determinar que si los valores
presentes en las fracciones de la imagen 6 a 8 (ver figura 19) indican la ausencia de un
obstáculo, las secciones 11 a 13 no son tenidas en cuenta dentro del proceso de
detección de objetos debido a que estas secciones pueden generar una detección
errónea del suelo como obstáculo.

5.2.4. Trace Planning.

La mejor ruta de navegación es obtenida analizando la matriz de posicionamiento


obtenida durante la ejecución del algoritmo de detección de obstáculos. El algoritmo de
Trace Planning está diseñado para seleccionar la ruta que no presente algún obstáculo
o la que posea obstáculos más alejados para el usuario y su funcionamiento se describe
en los siguientes puntos:

1. Se selecciona la columna que presenta ausencia de objetos o la que presente un


objeto a mayor distancia del usuario, y esta se elige como la ruta ideal para transitar.
2. Se genera un vector de 5 posiciones con la información necesaria para generar la
alerta. Las posiciones de este vector se encuentran organizadas de la siguiente
manera: las posiciones 0 y 1 indican la información del lado izquierdo, siendo la
posición 0, la señal de control del motor izquierdo, mientras que la posición 1 indica
la distancia mínima a la que se encuentra el obstáculo. Las posiciones 2 y 3 poseen
la misma codificación anterior otorgando la información del lado derecho, y la última
posición almacena la información de la ruta sugerida.

5.2.5. Filtro de Media Móvil

El filtro de media móvil de orden 5 consiste en una depuración de los datos por medio
de la realización de la media aritmética entre la muestra actual y las cuatro muestras
anteriores con la siguiente ecuación:
n

∑ Si
(27)
i=n−4
Sn=
5

5.2.6. Distancia por ultrasonido

La medición, procesamiento y envió del valor análogo arrojado por el sensor de


ultrasonido a la tarjeta de desarrollo, fue realizado en el microcontrolador PIC 12F675
de la siguiente manera:

34
1. Se define el oscilador interno a 4MHz, se habilita el periférico ADC con resolución de
10 bits por el canal 0, se aplica comunicación rs232 por software con un baudrate de
9600 con tamaño de datos de 8 bits y puerto de transmisión por el pin A1 y se
habilita la interrupción por flanco ascendente.
2. Se toma la muestra del valor análogo al cual se le aplica la ecuación 23.
3. Debido a la sensibilidad que el sensor presenta, es necesaria la aplicación del filtro
de media móvil a los datos obtenidos por cada muestra (ecuación 27).
4. Se realiza la iteración de los pasos 2 y 3 cada 250 milisegundos.

Si durante la ejecución del programa, se detecta una interrupción por flanco


ascendente, el valor resultante del filtro de media móvil será enviado por el pin
designado para la comunicación.

5.2.7. Comunicación con el microcontrolador

La comunicación de la plataforma de desarrollo con el microcontrolador es realizada de


la siguiente manera:

1. Por medio de la librería serial, se activa el puerto 1 del periférico de comunicación


serial RS232 con un baudrate de 9600 con tamaño de datos de 8 bits.
2. Por medio de la librería RPI.GPIO se habilita un pin de salida de la plataforma de
desarrollo, el cual está conectado al pin de interrupción del microcontrolador.
3. Entre el subsistema de generación de ruta y generación de alertas, se envía un
flanco ascendente por el pin de salida.
4. Se activa la recepción de datos por el puerto serial.
5. Se realiza la iteración de los pasos 3 y 4.

5.2.8. Generación De Alertas

AUDIBLES

Para las alertas audibles se definió una función que selecciona la posición 4 del vector
de alertas como entrada con el fin de reproducir una alerta pregrabada correspondiente
a la ruta sugerida.

HAPTICAS

Para las alertas hápticas se emplea una función para generar una señal PWM
controlada por medio del siguiente algoritmo:

1. Se seleccionan las posiciones 0, 1, 2 y 3 del vector resultante del trace planning.

2. Se compara el valor (On/Off) para cada motor y, dependiendo de la distancia a


la que se encuentre el objeto; se designa un valor de PWM a cada uno de los
motores.

3. Se ajusta la frecuencia de la señal PWM de acuerdo con los valores a definidos


en la Tabla 4Error: Reference source not found

35
Tabla 4. Generación de señal PWM respecto a la distancia de detección
DISTANCIA MINIMA DISTANCIA MAXIMA (cm) PWM FREFCUENCIA (Hz)
(cm) (%)
50 100 100 2000
101 199 60 1000
200 300 30 25
Fuente: Autores.

5.3. Metodología

5.3.1. Determinación de las Características Mínimas de Diseño

Teniendo en cuenta el diseño realizado por Alarcon et al., 2012, se tomaron en


consideración las siguientes recomendaciones:

 Implementar el sistema de guía para personas invidentes en un sistema de


procesamiento embebido buscando que se garantice una ejecución en tiempo real,
mayor portabilidad y posible comercialización del dispositivo.
 Mejorar la percepción de las cámaras utilizadas o bien, integrar este modelo a
sensores más precisos y menos sensibles a ruidos y luminosidad externa.
 Respecto al método de estimación de profundidad, es necesario realizar la
evaluación de nuevos métodos más robustos, que ofrezcan un mapa de disparidad
más confiable y con un menor costo computacional.

Por lo tanto, se establecieron las siguientes consideraciones técnicas:

 El procesamiento del algoritmo será ejecutado en una plataforma GPU para


propósito general (GPGPU) con el objetivo de explotar las características paralelas
de estos dispositivos.
 Optimizar el algoritmo con el objetivo de disminuir el tiempo de ejecución en
comparación con el proyecto realizado por Alarcon et al., 2012.
 Emplear algoritmos de procesamiento de imágenes como la herramienta principal de
ejecución del software.

5.3.2. Definición del Diseño de Alto Nivel del Prototipo

Una vez establecidas las características de diseño, el primer paso, fue definir la
arquitectura interna del prototipo. Su estructuración fue de gran importancia debido a
que se convirtió en el punto de partida para evaluar la selección de componentes,
sensores y demás elementos del sistema. En la Figura 21 se presenta el diseño de alto
nivel del sistema con los subsistemas correspondientes.

Figura 21. Esquema general de la arquitectura interna del dispositivo de guía para
invidentes

36
Fuente: Autores.

Con base en esta arquitectura general, se procedió a definir los elementos de hardware
que cumplan con las especificaciones definidas para el diseño del asistente de
navegación. La plataforma de control debe encargarse de comandar los sistemas de
adquisición y generación de alertas, además de llevar a cabo los algoritmos de
detección de objetos y generación de rutas.

5.3.3. Selección de Hardware Necesario para Funcionamiento del Prototipo

Teniendo en cuenta los requerimientos técnicos del prototipo, se escogió trabajar sobre
una plataforma basada en una GPU. Esta plataforma, además debe tener la posibilidad
de permitir el desarrollo de aplicaciones de software que exploten las características
paralelas intrínsecas a la arquitectura del dispositivo. En particular, se seleccionó una
plataforma desarrollada por el fabricante NVIDIA® debido a que este tipo de GPUs
permite el desarrollo de aplicaciones por medio de la API CUDA y permite trabajar sobre
Linux Ubuntu, lo que permite mayor control y libertad para el desarrollador

Por último, la plataforma debe contar con diversas interfaces de periféricos, o que, en su
defecto facilite la implementación de estas, pues es necesario contar con las interfaces
de comunicación para lograr una recepción y envío de datos con los diversos
componentes que conforman el proyecto.

Tabla 5. Selección de hardware.


Requerimien Interfaz de Tamaño
Plataforma GPU CPU Memoria OS tos de periféricos (AxAxL)
operación
128 1 puerto
núcleos RAM: para tarjeta
CUDA ARM 2GB Rango microSD
Cortex-A57 temperatura 4 puertos
arquitectur (Quad o de -25 °C -
a Maxwell 97 °C USB 4 cm
Core) 4GB
Jetson soporte Potencia de 1 módulo 9 cm
NANO para: frecuencia PWM
máxima de Linux 5W a 10W 12 cm
CUDA 10 Almacen 1 UART, dos
operación amiento: Voltaje de
frecuencia de 1.43 alimentación módulos SPI
máxima de eMMC
GHz de 5 V 1 puerto
Operación 16 GB GPIO de 40
921MHz pines
Jetson 384 ARMv8.2 RAM: Rango de 1 puerto 4 cm
XAVIER- núcleos (64-bit) 3x 8GB temperatura para tarjeta 9 cm
NX CUDA (Quad Core) –25 °C - 90 microSD
12 cm
48 tensor frecuencia Almacen °C 4 puertos
Cores máxima de Linux USB
amiento: Potencia
arquitectur operación eMMC soportada de 2 módulos
a Volta 1900 MHz 10W a 15W PWM
16 GB
soporte Voltaje de 2 módulos
para: alimentación: SPI, 1 UART

37
CUDA 10
frecuencia 1 puerto de
máxima de 9Va 20V 40 pines
operación GPIO
de 1100
MHz
Fuente: Elaborada a partir de (NVIDIA, 2020b, 2020a).

Como se observa en la Tabla 5, el fabricante NVIDIA® ofrece dos kits de desarrollo que
cumplen con las especificaciones de diseño para el sistema de navegación planteado.
Sin embargo, estas se diferencian en la cantidad de núcleos, velocidad de frecuencia
máxima y arquitectura que presentan.

5.3.4. Estudio de la Arquitectura y Selección del Kit de Desarrollo para GPU NVIDIA®
Jetson

Una de las principales diferencias entre las plataformas Jetson disponibles en el


mercado (ver Tabla 5 ) se encuentra en la arquitectura implementada, característica que
determina el funcionamiento de los kits de desarrollo. Algunas de las características
definidas por la arquitectura se muestran a continuación:

 La arquitectura Volta permite operar a frecuencias mayores en comparación con la


arquitectura Maxwell.
 Las plataformas GPUs diseñadas por el fabricante NVIDIA® se encuentran
conformadas por estructuras SM. Estas secciones se encuentran divididas en cuatro
bloques de procesamiento conformados por un búfer de instrucciones y núcleos
CUDA. Sin embargo, la arquitectura Volta posee un componente adicional,
denominado Tensor Core, especializado en realizar operaciones matemáticas
matriciales como la multiplicación y suma (FMA) (NVIDIA, 2020a).

Debido a estas características, fue seleccionada la plataforma de desarrollo Jetson


Xavier. Esta plataforma cuenta con una arquitectura Volta, lo cual brinda mayor
rendimiento con un consumo energético menor.

5.3.5. Sensores a Utilizar

De acuerdo con la revisión de literatura realizada y las características de diseño del


asistente de navegación, se determinó que el dispositivo debe adquirir la información
del ambiente por medio de un sensor RGB con la capacidad de obtener un mapa de
profundidad de campo. Por consiguiente, y con el objetivo de realizar la selección del
dispositivo, se compararon dos cámaras que cuentan con la capacidad de generar este
mapa. En la Tabla 6 se muestra la comparación de estos dispositivos.

Tabla 6. Comparación de Sensores RGB y Profundidad


Dispositivo Sensores Campo de visión Flujo de datos Alimentación Interfaz de
conexión
Kinect® Color: Campo de visión 640 × 480 a 16 bits
sensor horizontal: 57 de profundidad a 30 12 voltios
CMOS grados FPS (Frames Per
Second)
Profundidad: Campo de visión 640 × 480 32-bit de 12 vatios
sensor vertical: 43 grados color a 30 FPS USB 2.0
CMOS y

38
proyector de
luz IR
Micrófono rango de inclinación
multi arreglo física: ± 27 grados
Ajuste de Rango de Audio de 16-bit a
sensor con profundidad del 16 kHz
motor de sensor: 50
inclinación centímetros – 3,5
Giroscopio metros
Color:
sensor Campo de visión 640 × 480 a 16 bits
cromático horizontal: 71.5 de profundidad a 60 5 voltios
con ISP grados FPS
discreto
Intel® Campo de visión
RealSense Profundidad:
SR300 sensor vertical: 55 grados
infrarrojo Rango de 1920 × 1080 32-bit
monocromáti 1.8 vatios USB 3.0
profundidad del de color a 30 FPS
co y sensor: 10
proyector de centímetros – 1.5
luz IR metros
Fuente: Elaborada a partir de (Guerrero & Villaluenga, 2013; Intel, 2016).

De acuerdo con las características presentadas por estas cámaras se determinó que la
cámara Intel® RealSense SR30 posee un consumo energético menor y un campo de
visión más amplio en comparación con la cámara Kinect®. Sin embargo, la cámara
Kinect® posee mejor conectividad, ya que emplea un puerto USB 2.0 para la
transmisión de datos. Además, posee un rango más amplio de medición en los datos
obtenidos en la generación del mapa de profundidad; característica que permite ampliar
el alcance del asistente de navegación. Por lo tanto, se ha seleccionado la cámara
Kinect® como sensor principal para el prototipo.

Posteriormente, se realizaron pruebas para determinar la zona del cuerpo para ubicar la
cámara. Esta zona debe ser adecuada para permitir la máxima adquisición de
información del ambiente y de esta manera, determinar los obstáculos que se presentan
en el entorno. Las pruebas realizadas consistieron en ubicar la cámara sobre diferentes
zonas del cuerpo del usuario y con base en estas, se determinó que la mejor ubicación
para la cámara se encuentra en el pecho del usuario, ya que esta zona permite cargar
un peso ligero, sin generar alguna molestia o afectación para la salud del portador,
además de dar una estabilidad a la imagen obtenida por el sensor ya que esta zona no
genera cambios demasiado bruscos con los movimientos del usuario.

Sin embargo, la cámara del Kinect® tiene un ángulo de apertura de 69° y, al estar
ubicada en esta zona del cuerpo, se genera un espacio con forma de triángulo
rectángulo que representa una zona ciega del sensor. Esta zona genera alto riesgo de
colisión para el usuario, tal como se muestra en la Figura 20. Según el estado del arte
consultado, los sensores ultrasónicos han sido ampliamente utilizados para realizar
mediciones de distancias. De esta forma se detecta la presencia de obstáculos dentro
de su rango de funcionamiento.

Tabla 7. Comparación de Sensores Ultrasónicos.


Distribuidor Serie Taza de Rango Comunicación Alimentación Autor
muestreo
ElecFreaks HC- Lectura de tiempo 5 voltios (ElecFreaks,
, SR04 52 Hz 2cm a de ancho de pulso 15 miliamperios 2013)

39
Adafruit 4007 400cm 3 – 5 voltios (Adafruit, 2022)

DFRobot MaxS 10 Hz 30cm a Salida serial 3.3 – 5.5 voltios (MaxBotix Inc.,
onar- 750cm RS232 2021b)
EZL0 Lectura de tiempo
MaxBotix MaxS 30cm a de ancho de pulso 2.7 – 5 voltios (MaxBotix Inc.,
onar- 500cm Lectura análoga 2021ª)
MB10
03
TDK EV_ 1 Hz 5cm a 1.8 voltios (TDK, 2020)
InvenSense MOD 30cm I2C
_CH2
01
DFRobot SRF0 26 Hz 40cm a 5 voltios (DFROBOT,
8 600cm 50 miliamperios 2022)

Fuente: Autores.

Consecuentemente, se decidió emplear este tipo de tecnología para disminuir los


riesgos de colisión y al realizar la comparación de algunos sensores ultrasónicos
presentes en el mercado, se determinó que el sensor MaxSonar-MB1003, posee las
características idóneas para el uso de este en el asistente de navegación, puesto que
posee bajo consumo energético, un protocolo de comunicación RS232 y una buena
tasa de muestreo (ver Tabla 7).

5.3.6. Análisis, Revisión y Selección de los Algoritmos para la Detección de Objetos.

Con el diseño de alto nivel ya planteado y los materiales elegidos, se procedió con la
búsqueda, análisis, comparación y selección de diferentes algoritmos, con un criterio de
búsqueda enfocado al reconocimiento de objetos, basados en imágenes RGB o mapa
de profundidad para la guía de personas invidentes. Teniendo en cuenta la naturaleza
del proyecto, es necesario que el algoritmo seleccionado entregue la ubicación espacial
del usuario y la distancia a la que se encuentran los posibles objetos, con el fin de crear
un mapa en dos dimensiones, para facilitar la elección de una ruta libre que garantice su
desplazamiento.

En los últimos años se han venido empleando algoritmos basados en inteligencia


artificial para la detección de objetos, que se caracterizan por requerir un elevado poder
de cómputo (De Frías et al., 2019). Como ejemplo se destaca la implementación
realizada por Jadhav et al., 2020 basada en YOLO (You Only Look Once), y Konaite et
al., 2021 basado en MobileNet, que hacen uso de una o más redes neuronales
convolucionales para detectar objetos en tiempo real en imágenes. Dichas redes están
optimizadas para ser más livianas para tener un buen equilibrio entre el volumen de
cálculo y la memoria requerida. Sin embargo, en las pruebas realizadas se evidenció
que estas presentan errores de ejecución sobre la plataforma seleccionada, además de
mantener una baja tasa de procesamiento de imágenes por segundo. Por este motivo
se descarta el uso de este tipo de algoritmos sobre la plataforma Jetson (ver Tabla 8).

Tabla 8. Analisis algoritmos inteligencia artificial


IA Versión Plataforma objetivo Cantidad variantes Cantidad máxima de
testeadas FPS registrada
Yolo v2 Cámaras de seguridad 3 6
YOLO Yolo v3 Plataformas móviles 4 6
Yolo v4 4 8

40
MobileNe TF V45 1 3
t
Fuente: Autores.

Otros tipos de algoritmos empleados en la detección de objetos son los programas


secuenciales (De Frías et al., 2019). Entre éstos se encuentra la implementación
realizada por Hakim & Fadhil, 2019, que fundamenta su sistema de detección de
objetos en la segmentación de imagen mediante el algoritmo de Otsu (Figura 22). Este,
permitiendo identificar y diferenciar el fondo de una imagen con el objeto de interés,
empleando la varianza de la dispersión de los niveles de gris encontrados en la imagen.
Este algoritmo se caracteriza por ser fácil y rápido de implementar.

Figura 22. Seccionamiento por algoritmo Otsu.

Fuente: (Chai, 2021).

Sin embargo, el algoritmo de Otsu es muy sensible a las variaciones de luminosidad, al


ruido y no distingue el valor umbral si el histograma no se encuentra bien definido (Chai,
2021). Las pruebas realizadas arrojaron que cuando en el mapa de profundidad se
presentan varios objetos en la misma zona a diferentes distancias de profundidad, el
algoritmo los detecta como un único objeto, indicando a la plataforma que se
encuentran a la misma distancia. Esta característica que limita la posibilidad de medir la
distancia a la que se encuentran los objetos y afecta el funcionamiento del algoritmo
propuesto.

Otro algoritmo de naturaleza secuencial es el Stixel World. Este algoritmo toma como
referencia la uniformidad del entorno sin presencia de objetos y lo compara con la
imagen a analizar (ver Figura 23). Si en esta comparación existen valores de píxel por
encima o por debajo del umbral determinado como referencia, se identifica un objeto
como posible causa de esta variación. La característica más importante de este
algoritmo es que permite identificar diferentes tipos de áreas como escaleras (de subida
o de bajada), huecos, objetos, entre otras (Wang et al., 2017).

Para el adecuado funcionamiento de este algoritmo se debe enfocar la cámara al suelo


con una inclinación suficiente para detectar un amplio rango de la superficie, inclinación
que la cámara Kinect® no ofrece de manera nativa. Por otro lado, debido a que el mapa
de profundidad no presenta una relación totalmente lineal (Figura 31 B), y que existe un
ángulo de inclinación con el que se captan las imágenes, es imposible determinar la
distancia a la que se encuentran los objetos detectados de manera precisa, además de
disponer de un tiempo bastante reducido para identificar, posicionar y alertar en caso de
encontrar un obstáculo, debido a que la disminución en el área de detección.

Figura 23. Funcionamiento del Algoritmo Stixel world

41
Fuente: (Wang et al., 2017).

Por último, el algoritmo implementado por Romero et al., 2018 y por Alarcon et al., 2010,
se basa en realizar un seccionamiento por intervalos de distancia del mapa de
profundidad y fragmentar cada seccionamiento en un número determinado de columnas
(Figura 24). Mediante el análisis de cada uno de los píxeles, es posible distinguir la
presencia de objetos (píxel con valor 1 es igual a objeto), la distancia a la que se
encuentran (determinado por el valor de distancia a la que se realiza el
seccionamiento), y determinar su ubicación espacial (columna en la cual fue detectado).

Figura 24. Ubicación de obstáculo A en los vectores posx y posy para las
capas

[1] [2] [3] [4] [5]


Capa C(1)
Posx 1 1 0 0 0

Muy Muy
Izq Centro Der
Izq Der
A
[1] [2] [3] [4] [5]

Posy 0 0 0 1 1

Muy Muy
Alto Medio Bajo
Alto Bajo

Fuente: (Alarcon et al., 2010).

De acuerdo con las pruebas realizadas, se pudo determinar que los algoritmos basados
en técnicas de IA presentan una baja tasa de FPS en tarjetas GPU básicas empeladas
en este proyecto. Por su parte, algunos de los algoritmos secuenciales poseen
limitaciones que afectan su funcionamiento. A pesar de esto, éstos últimos fueron
seleccionados para ser modificados con el fin mejorar sus características y poder
obtener los resultados esperados.

5.3.7. Análisis del Algoritmo Seleccionado y Detección de las Etapas que Intervienen
en su Funcionamiento

A partir de los algoritmos de detección de obstáculos utilizados por Alarcon et al., 2010
y Romero et al., 2018, y algunas características del algoritmo utilizado por Hakim &
Fadhil, 2019, se propone un algoritmo con la capacidad de identificar objetos en una
imagen en escala de grises. Sin embargo, y por facilidad en la aplicación del método
para la detección y reconocimiento de la distancia a la que se encuentra el objeto

42
identificado, se requiere primero una etapa para adecuar la imagen a la aplicación del
algoritmo planteado, para posteriormente obtener la identificación y ubicación de los
objetos dentro de la imagen. Por último, se genera una matriz cuya información plasma
el mapeo en 2 dimensiones de los objetos presentes en el ambiente, ver Figura 25.

Figura 25. Diseño de alto nivel del algoritmo seleccionado

Fuente: Autores.

5.3.8. Análisis de los Requerimientos por Etapas del Algoritmo Seleccionado para su
Implementación en CUDA.

Teniendo en cuenta que, el procesamiento de la información realizado por el device del


dispositivo será llevado a cabo en los subsistemas que presentan mayor complejidad y
que son críticos para el desempeño del sistema, es necesario establecer la secuencia
que se debe realizar entre el host y el device, según las recomendaciones del
fabricante, con el fin de identificar los requerimientos necesarios para el correcto
funcionamiento, tanto del dispositivo de procesamiento GPGPU como de los algoritmos
a ejecutar.

Considerando el contenido de la Figura 26, se definieron los pasos base para cada uno
de los procesos que son ejecutados en el device, de la siguiente manera:

 Definir arreglos matriciales con las mismas dimensiones de la imagen a analizar,


para almacenar la información en la memoria del Host y del Device.
 Realizar la descripción del kernel en el lenguaje nativo CUDA.
 Retornar a la memoria del Host los valores procesados para ser enviados a la
siguiente etapa del algoritmo.
Figura 26. Transferencia de datos entre el Host y el Device

43
Fuente: (SONZA et al., 2019).

Dependiendo de la etapa y el proceso a ser ejecutado, la función del kernel varía de


modo que: en la etapa de preprocesamiento (únicamente en el proceso 3), la
descripción del kernel se realiza para aplicar las operaciones morfológicas, y en la etapa
de detección, la descripción del kernel se orienta al fraccionamiento de la imagen y
análisis de cada uno de sus pixeles.

Para definir el arreglo matricial, fundamental para el almacenamiento y procesamiento


de los datos a trabajar, es necesario analizar el tipo y cantidad de información ingresada
al subsistema y la cantidad de hilos por bloque a ser empleados en la ejecución,
teniendo en cuenta la limitante de la plataforma que soporta un máximo de threads de
1024 y 232−1 grids. De esta manera, se obtuvo la Tabla 9, en la que se comparan los
valores esperados para la implementación del algoritmo respecto a los valores reales
empleados en su ejecución.

Tabla 9. Parámetros de entrada para la GPU.


Valor esperado Valor asignado
Tamaño de datos a ingresar 640 x 480
Tipo de datos Unsigned int 8 bits Float 32 bits
Hilos por bloque 30,72 31
Bloques de hilos 10.000
Fuente: Autores.

Para optimizar el procesamiento de las imágenes y asegurar su funcionamiento es


necesario implementar los siguientes criterios:

 Las variables de entrada deben contar con un formato flotante y resolución de 32


bits.
 Se debe seccionar la imagen en 100 bloques de alto y 100 bloques de ancho.
 En vista de que la cantidad de hilos por bloque es un número limitado, se debe
determinar este valor mediante las ecuaciones 28 a 30.
alto de laimagen
¿ hilos alto= (28)
¿ bloquesalto

44
ancho de la imagen
¿ hilos ancho= (29)
¿ bloques ancho
¿ total de hilos por bloque=EnteroPorEncima(¿ hilos alto∗¿ hilos ancho) (30)

5.3.9. Diseño de Alto Nivel de Cada una de las Etapas para Implementación en CUDA

A partir de lo establecido en la sección 5.3.7., se procedió a realizar el diseño de alto


nivel y descripción de cada una de las etapas propuestas, orientada a su
implementación en CUDA.

El preprocesamiento corresponde a los procesos 1, 2 y 3 del Algoritmo para la


Detección de Obstáculos. Esta etapa se encarga de adecuar los datos provenientes del
mapa de profundidad, ya que como se mencionó anteriormente, la imagen obtenida de
la cámara presenta un formato que no permite la precisa identificación de distancias.
Este cambio además facilita la umbralización de la imagen. Sin embargo, por factores
propios del sensor y del ambiente, la imagen resultante presenta ruido que puede
provocar falsos positivos en la detección de objetos. Para su eliminación se aplican
operaciones morfológicas mediante los requerimientos descritos anteriormente (ver
Figura 27).

Figura 27. Diseño etapa de preprocesamiento.

Fuente: Autores.

La segunda etapa es la de Detección. En esta intervienen los procesos 4 y 5 del


algoritmo, en los cuales se hace uso pleno de los núcleos y memoria del device para el
procesamiento de los datos. Sin embargo, debido a las características del sensor de
profundidad y su ubicación en el prototipo, el suelo es detectado como un objeto. Por
ello, fue necesario incluir en esta etapa la aplicación del algoritmo para la discriminación
del suelo (ver Figura 28).

Figura 28. Diseño Etapa de Detección

Fuente: Autores.

La última etapa se denomina post procesamiento, en la cual solo interviene el proceso


6. En este, se optimiza la manera en que se entregan los datos resultantes además de

45
configurar los parámetros necesarios para realizar de nuevo la ejecución del algoritmo
(ver Figura 29).

Figura 29. Diseño Etapa post Procesamiento

Fuente: Autores.

5.3.10. Implementación, Simulación y Test del Diseño Realizado para Cada Etapa.

Para la implementación y simulación de la etapa de pre procesamiento, se obtiene la


imagen proveniente del sensor de profundidad, empleando la función (Depth())
disponible en la librería freenect, obteniendo una imagen con 11 bits de resolución como
se muestra en la Figura 30B. Mientras que para obtener la imagen correspondiente al
sensor de color es necesario el uso de la función RGB() y cuya funcionalidad es la de
facilitar la comprensión de los datos resultantes, ver Figura 30 A .

Figura 30. Imagen RGB y mapa de profundidad obtenidos por el Kinect®

Fuente: Autores.

Sin embargo, al realizar la escalización del sensor de profundidad con el fin de


encontrar su ecuación característica, se observó que la cuantización correspondiente a
los niveles de gris entregados por la cámara, no estaban dispuestos de manera lineal
como se observa en la Figura 31 A. Por recomendación del autor de la librería, es
necesario realizar un reajuste de resolución a 10 bits, para luego efectuar un
desplazamiento de dos posiciones, eliminando los 2 bits de menor peso, con lo que se
obtiene una imagen con una resolución de 8 bits (Openkinect, 2011). Gracias a este
reajuste, los datos obtenidos presentaron un comportamiento exponencial creciente, ver
Figura 31 B.

Empleando los datos codificados en 8 bits y utilizando el software de código abierto


para análisis de datos LibreOffice, se realizó una regresión polinómica que permitió
encontrar la ecuación característica de estos datos con el objetivo de encontrar la
relación presente entre el valor de los píxeles y la distancia asociada. La ecuación
característica se presenta en la Ecuación 31.

46
di s tancia=( 2∗10 x ) −( 1∗10 x ) + ( 0.0026 x ) −( 0,2812 x ) +(11,861 x) (31)
−5 5 −4 4 3 2

Figura 31. Valor pixel respecto a la distancia tomados con una resolución de
10 bits y 8 bits
VALOR PIXEL RESPECTO A LA DISTANCIA TOMADOS CON UNA RESOLUCIÓN
DE 10 BITS
330

280

230

180 A
130

80
40 90 140 190 240 290 340

VALOR PIXEL RESPECTO A LA DISTANCIA TOMADOS CON UNA RESOLUCIÓN


DE 8 BITS

280

230

180
B
130

80

30
100 120 140 160 180 200 220 240

Fuente: Autores.

Empleando la ecuación característica del sensor de profundidad, se realiza una


umbralización con el objetivo de encontrar los pixeles de la imagen dispuestos entre los
intervalos de distancias predefinidos en la sección 5.2.1.. Este proceso obtiene una
variedad de imágenes que permiten al algoritmo detectar objetos en diferentes rangos
de distancias (ver Figura 32).

En la Figura 32 se observa la secuencia del barrido resultante de la umbralización por


capas, donde la sección A comprende las distancias 150 cm a 160 cm e incrementa
gradualmente hasta llegar a la sección I, que comprende las distancias 230 cm a 240
cm.

Figura 32. Barrido Umbralización por capas

47
Fuente: Autores.

Debido a factores externos al sensor, las imágenes resultantes de la umbralización por


capas, presentan ruido de tipo sal y pimienta (Figura 33 A) y debido a la naturaleza del
algoritmo seleccionado, es indispensable emplear operaciones morfológicas con el
objetivo de reducirlo. Para este proceso se ha empleado un kernel cuadrado con
dimensiones de 7x7, el cual fue seleccionado de manera experimental y disminuye la
presencia de este tipo de ruido como se muestra en la Figura 33B.

Figura 33. Detección de ruido “Sal y Pimienta” y eliminación del ruido mediante
operaciones morfológicas.

Fuente: Autores.

En la etapa de detección, se realiza el procesamiento de cada imagen por medio del


kernel correspondiente al algoritmo de detección. Como primer paso, mediante valores
predefinidos, se fraccionó la imagen en tres partes verticales y cinco horizontales
(representado por la grilla verde como se muestra en la Figura 34), los cuales permiten
encontrar la ubicación espacial en la que se encuentran los pixeles en la imagen,
considerando la distorsión de perspectiva del observador y el efecto túnel que se
genera, es necesario también que las partes fraccionadas varíen su tamaño de análisis
conforme aumenta la distancia que se analiza.

48
Figura 34. Seccionamiento y barrido espacial de la escena capturada para determinar
la ubicación de objetos.

A B C

D E F
Fuente: Autores.

Al emplear la imagen binarizada por capas y fragmentada por regiones, permite definir
la presencia de un objeto (pixel en blanco), la ubicación espacial de este en la imagen y
la región que no presenta algún obstáculo se interpreta como transitable o libre de
obstáculos; de no cumplirse esta condición, la región será identificada como riesgosa
(Figura 35). Debido a que en el mapa de profundidad el suelo también es representado
como un objeto, es necesario aplicar el algoritmo para su discriminación al realizar la
detección.

Figura 35. Discriminación del suelo

Fuente: Autores.

(En la Figura 35 se observa: A Imagen de referencia, B umbralización a 197 cm


aproximadamente, C umbralización a 223 cm aproximadamente).

Por cada capa analizada se genera un vector de 16 posiciones. Las primeras 15


posiciones representan el análisis de cada uno de los fragmentos de la imagen y
determina si esta sección se encuentra libre de objetos o no, mientras que la última
posición almacena la distancia a la que se realizó el análisis. Luego se aplica el
algoritmo Discriminante de Suelo a cada vector y su funcionamiento se observa

49
gráficamente en el valor del vector referente a 197 cm (Figura 36 A); en la Figura 35 B
se evidencia que, pese a presentar la detección del suelo como un obstáculo, ubicado
en las posiciones 10, 11 y 12, esta detección no será tomada en cuenta y se indica
como una zona sin presencia de obstáculos. Dado que se generan múltiples vectores,
es necesario anexar cada uno a una sola matriz

Figura 36. Matriz resultante de detección de objetos.

Fuente: Autores.

Debido a que se pueden detectar objetos solo en secciones intermedias o superiores de


la imagen (Figura 36 A, secciones del 0 al 9), por prevención, la columna completa
donde este caso ocurra se considera como riesgo potencial. Para tener en cuenta este
parámetro, se tabulan los resultados de los valores de las secciones que componen
cada una de las columnas para cada capa y, posteriormente, los resultados se plasman
en una matriz de 6 posiciones, (Figura 36 B). En esta nueva matriz, las 5 primeras
posiciones corresponden a los valores tabulados obtenidos y la última posición es el
valor de la distancia. Adiccionalmente, se planteó y aplicó el algoritmo de trace planning
(perteneciente al subsistema de elaboración de rutas), el cual recibe la matriz resultante
del algoritmo de detección de objetos y entrega un vector con la información necesaria
para generar las señales hápticas y audibles en el subsistema de generación de alertas
(ver Figura 37).

Figura 37. Vector de generación de alertas

Fuente: Autores.

Para el subsistema de alerta del punto ciego, se empleó el sensor de ultrasonido. Este
sensor, junto con la cámara, conforman el sistema responsable de la detección de
objetos encontrados dentro del rango definido como zona ciega del dispositivo. Si el
valor detectado por el sensor ultrasónico es menor a 80 cm, indica la presencia de un
obstáculo y se origina una alerta de riesgo de colisión para el usuario. Dada la
naturaleza del algoritmo generado para la creación de esta alerta, esta será disparada
cuando el usuario desee acercarse intencionalmente a un objeto o, que incluso se
encuentre con otra persona. Por este motivo, la alarma solo sonará tres veces seguidas
y luego se pausará, hasta que detecte un cambio de distancia por encima de los 80 cm.

Por último, la creación de las alertas audibles fue realizada mediante la librería gtts
(Google text to speach) la cual, mediante la función gTTS () configura el texto y el
lenguaje al que se desea reproducir la indicación definida en formato de audio. Puesto

50
que para su funcionamiento se necesitaba conexión a internet constante, se generaron
y almacenaron los audios con las palabras que conforman la alerta por separado.

5.3.11. Verificación y Validación del Sistema Implementado con Personas en Condición


de Discapacidad Visual.

Para realizar las pruebas se tuvo en consideración la restricción de que la cámara


Kinect® debía estar a la altura del pecho, por lo que se confeccionó un arnés para
ubicar la cámara en el lugar adecuado de manera fija. Para facilitar la portabilidad de la
plataforma Jetson Xavier NX, se adaptó una maleta que contiene los demás elementos
que conforman el prototipo (Figura 38).

Figura 38. Asistente de navegación

Fuente: Autores.

Debido a la contingencia generada por la pandemia de la COVID-19, no fue posible


realizar las pruebas de funcionamiento del asistente de navegación con personas con
discapacidad visual. Por lo anterior, las pruebas fueron realizaron con voluntarios, los
cuales fueron vendados en los ojos con el objetivo de simular la condición de limitación
visual o ceguera total.

Las pruebas se llevaron a cabo en el edificio de laboratorios de la Universidad


Pedagogica y Tecnologica de Colombia UPTC Seccional Tunja y consistieron en
transitar por una pista de obstáculos (ver Figura 39) usando los tres modos de emisión
de alertas por parte del asistente (alertas hápticas, audibles e híbridas). Para la prueba
se contó con la presencia de 6 particiapantes entre 20 a 25 años de edad, quienes
firmaron un consentimiento informado (ver Anexo M).

51
Antes de ejecutar las pruebas, las personas voluntarias recibieron una capacitación
sobre la forma de uso del dispositivo con una duración aproximada de 2 minutos. Esta
capacitación se basó en el uso del asistente, con los ojos sin vendar y reconociendo las
indicaciones de navegación, para que procedieran luego a caminar libremente. Una vez
que los colaboradores consideraban que lograban interpretar de manera correcta las
indicaciones, se les vendaban los ojos y se deba inicio a la prueba.

Las pruebas realizadas se basaron en 3 recorridos diferentes, con el fin de identificar


cuál de los modos de emisión de alertas daba mejor resultado para guiar al usuario
durante el trayecto. Para esto se pidio a los voluntarios recorrer una pista inicial con un
modo de alerta en epecífico hasta llegar al final del recorrido. Luego, se modificó de
manera aleatoria la ubicación de los obstáculos en la ruta, para volver a realizar el
tránsito buscando testear un modo diferente de alerta al empleado en el primer
recorrido. Este proceso se repitio hasta haber probado todos los modos de emisión de
alertas por parte de los voluntarios de la prueba.

Figura 39. Pista de obstaculos para las pruenas de validación

Fuente: Autores.

Al terminar la prueba se solicitó a cada participante responder una encuesta en donde


se recogió la opinión sobre el funcionamiento del asistente y otros aspectos
relacionados con el dispositivo.

Las primeras dos preguntas de la encuesta están enfocadas en determinar la


comodidad del usuario al portar el asistente, para lo cual los paticipantes daban una
puntuación en una escala de 1 a 10 (en donde 1 significa muy incomodo y 10 bastante
comodo). La segunda, corresponde a una pregunta de respuesta libre para que los
participantes dieran las recomendaciones que consideran importantes para mejorar
para la portabilidad del dispositivo según su experiencia. La tercer pregunta esta
orientada a conocer cual de los modos de emisión de alertas (audibles, hapticas o
ambas simultaneamente) resultaba mas adecuada para los usuarios. La cuarta
pregunta, busca identificar la facilidad para interpretar las instrucciones dadas por el

52
dipositivo, calificada entre 1 y 10 (donde 1 corresponde a muy dificil y 10 muy facil). La
quinta pregunta se enfoca en las recomendaciones de los participantes para mejorar las
alertas del dipositivo y que tan intuitivas les resultaban. De la sexta a la octava
preguntas se enfocan en determinar si los participantes usarian el dispositivo en
espacios cerrados, si considerarian adquirir el dipositivo y las consideraciones que
creen necesarias para mejoraar el funcionamiento del prototipo desarrollado. Esta
encuesta se puede ver con mas detalle en el Anexo N.

53
6. PRESENTACIÓN Y ANÁLISIS DE RESULTADOS

 Identificar los Algoritmos de Visión Artificial Más Empleados en la Detección de


Obstáculos.

Con base en la literatura consultada centrada en dispositivos para la guía de personas


invidentes, se identificaron diferentes algoritmos comúnmente utilizados para la
detección de objetos, como se muestra en la sección 5.3.6..

 Seleccionar y Realizar Pruebas a Nivel Software del Algoritmo de Detección de


Obstáculos Tomando Como Parámetro de Desempeño el Menor Tiempo de
Ejecución.

Partiendo de los algoritmos identificados, se realizaron pruebas a nivel de software en la


plataforma escogida en la sección 5.3.3.. Los resultados obtenidos por los algoritmos
basados en inteligencia artificial se encuentran en la Tabla 8. En relación a los
algoritmos de tipo secuencial, en la sección 5.3.6. se describen las limitaciones
detectadas para su ejecución. Por esto, se planteó un algoritmo de tipo secuencial
basado en los resultados obtenidos, ver sección 5.3.9.. Posteriormente, se realizó el test
al algoritmo elegido, obteniendo los tiempos de ejecución para cada uno de sus
procesos mostrados en la Tabla 10. Los datos presentados son el resultado del
procesamiento realizado solo para un frame.

Tabla 10. Tiempos de ejecución total y para cada etapa del algoritmo.
Proceso Tiempo de ejecución (ms)
Reajuste 0,036954
Umbralización 1,707792
Operaciones Morfológicas 59,593461
Etapa de detección 5,396697
Total 66,734904
Fuente: Autores.

Teniendo en cuenta que el algoritmo debe tomar diversas cantidades de frames, y que
su ejecución no siempre toma el mismo tiempo, se realiza una tabla comparativa con el
fin de identificar qué cantidad de frames es la ideal para un tiempo de ejecución
deseado.

Tabla 11. Tiempo de ejecución vs. Número de capas analizadas.


Numero de Tiempo promedio de ejecución (s) Frames por segundo promedio
capas
analizadas
25 1,972 13
16 1,106 15
11 0,859 13
9 0,656 14
Fuente: Autores.

54
De acuerdo con los resultados observados del funcionamiento del prototipo,
consignados en la Tabla 11, se encontró que la cantidad ideal de capas a analizar es
16, considerando su corto tiempo de ejecución (aproximadamente 1,1 s) y a la
efectividad con la que reconoce y realiza la ruta de navegación (determinada de forma
empírica).

 Sintetizar el Algoritmo de Detección de Obstáculos Sobre el Kit de Desarrollo Jetson


Nano Mediante CUDA.

Para la síntesis del algoritmo, se tuvo en cuenta la selección de la tarjeta de desarrollo


mostrada en la sección 5.3.4., el análisis por etapas presentados en la sección 5.3.7. y
los requerimientos para su implementación en CUDA, descritos en la sección 5.3.8.. La
descripción del algoritmo se presenta en la sección de anexos.

Con el fin de comprender la mejora obtenida en cuanto a tiempos de procesamiento, se


elaboró una tabla comparativa confrontando los resultados obtenidos por ARIZA et al.,
2012 (Tabla 12), con los obtenidos en el presente proyecto (Tabla 13). Se observa que
en cuanto a tiempos de ejecución por cada función principal se presentaron mejoras
notables, dadas principalmente por el proceso de obtención del mapa de profundidad.
Sin embargo, se observa que el número de llamadas a las funciones por parte del
prototipo anterior fue menor, lo que se debe a la diferencia del funcionamiento del
algoritmo, además del software utilizado para su ejecución.

Tabla 12. Tiempos prototipo anterior soportado en CPU i3 Core de segunda generación
Funciones principales Llamadas Tiempo (ms)
Guide 1 0
Preprocesamiento 1 125
Obtención disparidad 1 78
Post procesamiento 1 623
Ruta 2 235
Sonido (comando voz) 1 1440
Fuente: (Alarcon et al., 2012).

Tabla 13. Tiempos prototipo presente, soportado en CPU ARMv8.2 y GPGPU NVIDIA®
Carmel
Funciones principales Llamadas Tiempo (ms)
Sistema de adquisición 1 1,6152
Preprocesamiento 16 64,7164
Detección 16 6,4916
Post procesamiento 16 1,4233
Generación de alertas 1 3,1030
Fuente: Autores.

Por otro lado, es importante resaltar el tiempo total de ejecución, además de la tasa de
muestreo de cada prototipo (Tabla 14). Teniendo en cuenta que el método para la
detección de los objetos en ambos prototipos es similar, se observa que el presente
prototipo, pese a procesar imágenes con una mayor resolución, posee un tiempo de
ejecución significativamente menor.

55
Tabla 14. Comparación de prototipos realizados por el grupo GIRA
Prototipo anterior Prototipo presente
Numero de hilos máximo 4 393.216
Numero de hilos usados 4 310.000
Porcentaje de procesador utilizado No reporta 78,84%
para realizar el procesamiento
Resolución utilizada 320 x 240 640 x 480
Cantidad de capas procesada 4 16
Frames por segundo 1,47 13,79
Cantidad de píxeles procesados 307.200 4.915.200
Tiempo total de ejecución 2,73 segundos 1,166 segundos
Fuente: Autores.

 Verificar la Efectividad del Prototipo y Validar su Funcionamiento en Condición de


Discapacidad Visual

En cuanto a comodidad al portar el dispositivo, la encuesta del Anexo N arrojó que el


promedio de las personas encuestadas califica como “cómodo” el uso del prototipo
(Figura 40 y Tabla 15).

Figura 40. Comodidad al portar el Tabla 15. Comodidad de


prototipo portabilidad del dipositivo
Métrica Estadística Valor
Desviación estándar 0,82
Media 8,7
Puntuación mínima 8
Puntuación máxima 10

Fuente: Autores.

Se destaca que el prototipo, a pesar de estar en una maleta, es lo suficientemente


liviano como para no causar molestia en los hombros, ni cansancio en la espalda al
momento de portarlo. Además, pese a que el arnés de la cámara posee varias correas
para dar soporte y estabilidad a esta, no genera incomodidad en la zona baja del pecho,
ni causa cansancio en los hombros al momento de soportar el peso de la cámara.

También se observó que, aunque el cinturón donde se ubica el sensor ultrasónico es


rígido, no genera molestias en el área abdominal, por lo que no hubo ninguna
sugerencia por parte de los voluntarios de la prueba en cuanto a mejoras en la
comodidad y portabilidad del dispositivo.

56
Como se observa en la Tabla 16 y la Figura 41, la encuesta arrojó que el 66.7% de los
usuarios prefieren el uso de alertas hibridas, debido a que estas proveían más
información acerca del ambiente que rodeaba al sujeto de prueba, proporcionándole
más seguridad en su desplazamiento. En cuanto a las alertas hápticas, el 33.3% de los
usuarios prefieren emplearla como método de emisión de información, debido a que
estas resultan ser intuitivas y no saturan de información al usuario. Por otro lado, la
emisión de alertas audibles resulto ser poco eficaz para dar guía a los participantes,
debido a que no ofrecía suficiente información del entorno, dificultando la movilidad del
portador del asistente.

En cuanto a la facilidad con la que las participantes interpretaban las alertas emitidas
por el dispositivo, se observó que las personas dieron una calificación promedio de 8
puntos sobre 10, (ver Tabla 17), demostrando que lograron interpretar las alertas de
manera fácil. Sin embargo, a un 16,7% de la población le resultó moderadamente difícil
interpretar las alertas, y a un 16,7% les resultó muy fácil o bastante fácil seguir las
indicaciones emitidas por el prototipo, lo que se muestra con mejor detalle en la Figura
42.

Figura 41. Preferencia de emisión de alertas Tabla 16. Preferencia de


emisión de alertas
Métrica Media
estadística
Desviación 0,4472135955
estándar
Moda Alertas hibridas

Fuente: Autores.

Lo anterior refleja que, en general, las alertas producidas por el asistente de navegación
son fáciles de interpretar. Sin embargo, la desviación estándar obtenida y los rangos de
puntuación de los usuarios (ver Tabla 17) muestran que el entendimiento de las alertas
está sujeto a los reflejos de cada persona y la retroalimentación obtenida en el tiempo
de entrenamiento. Como es natural, cada individuo necesita más o menos tiempo de
capacitación para interpretar de mejor manera las alertas generadas por el dispositivo.
Por esta razón los voluntarios de la prueba recomendaron que al menos las alertas
audibles fueran más descriptivas y dar más información acerca de la ruta a transitar.

57
Figura 42. Facilidad de interpretación de alertas Tabla 17. Dificultad de
por parte de los usuarios interpretación de alertas
Métrica Estadística Valor
Desviación Estándar 1,41
Media 8
Puntuación mínima 6
Puntuación máxima 10

Fuente: Autores.

Además de los parámetros expuestos anteriormente, los voluntarios encontraron en el


prototipo una herramienta útil, que proporcionaba una buena información de los
obstáculos cercanos. Sin embargo, manifestaron que el prototipo tendría algunas
limitaciones, ya que algunos de ellos, no pudieron evitar colisionar, aunque levemente,
con algunos obstáculos.

También comentaron que si tuvieran la posibilidad de adquirir este tipo de dispositivos lo


harían, puesto que, a pesar de ser un prototipo sujeto a mejoras, consideran que es una
herramienta de fácil manejo que brinda una mayor independencia al momento de
movilizarse.

58
7. CONCLUSIONES

En primer lugar, respecto a la cámara Kinect®, se observó que esta es una buena
alternativa para la adquisición de imágenes para plataformas móviles. Sin embargo, la
versatilidad del dispositivo se ve limitada por a su tamaño, ya que originalmente fue
diseñado para ser utilizado en consolas de videojuegos, por lo que no cumple con el
perfil de ser parte de un equipo portátil.

El prototipo no pudo contar con una fuente de energía portable, debido a la naturaleza
de la cámara se tuvo que sacrificar la portabilidad para que esta funcionara bien, a
pesar de que se intentó energizar mediante una power bank el mapa que provenía de la
cámara no brindaba la información suficiente para la detección de objetos.

En cuanto al funcionamiento del prototipo, se evidenció una mayor sensibilidad de


detección de objetos hacia el lado derecho del usuario, debido a que, por la
construcción del Kinect los lentes de la cámara estaban ubicados en ese lado; no
obstante, este factor no tuvo grandes repercusiones en la operatividad del asistente,
debido a que la diferencia de alineación con el punto central no fue significativa.

Por otro lado, el dispositivo no detecta el techo como obstáculo debido a la ubicación de
la cámara y tampoco detecta objetos que estén paralelos al lente a causa del
funcionamiento del proyector de patrones infrarrojo. Además, se encontró que para
usuarios con estatura promedio de 1.70 cm, el dispositivo no detectaba objetos con
alturas inferiores a 87 cm, ubicados a una distancia entre los 10 y 80 cm del usuario,
puesto que el ángulo de visión de la cámara no es lo suficientemente amplio (estas
medidas pueden variar en función de la altura de la persona que porte el asistente). En
cuanto al sensor de profundidad, fue posible constatar que en ambientes oscuros tiene
un buen comportamiento, pero se ve afectado por la incidencia directa de la luz del día,
debido a que comparte características con el sensor de proyección de luz infrarroja.

También se observó que no se registraron tiempos muertos en la emisión de alertas,


brindando información constante al usuario, Sin embargo, las emisiones constantes
pueden saturar de información a los usuarios ocasionando confusión al momento de
interpretar las instrucciones emitidas por el asistente.

Dado que las plataformas empleadas para la implementación del presente prototipo se
basan en kits de desarrollo, se presentaron dificultades importantes a la hora de
ejecutar los algoritmos de IA de manera correcta. Por lo anterior fue necesario el
planteamiento de un algoritmo para la detección de obstáculos, que fuese más sencillo
y que al mismo tiempo aprovechara las cualidades de la plataforma. Dicho algoritmo,
ofreció el resultado esperado permitiendo la navegación del usuario a través de
ambientes desconocidos.

Al comparar el presente prototipo con el desarrollado por Alarcon et al., 2012, se


evidenció una notoria mejoría en la cantidad de información capturada y los tiempos de
procesamiento requeridos. Sin embargo, a pesar de estas mejoras, es evidente que se
pueden realizar optimizaciones para reducir aún más los tiempos de procesamiento, con
el objetivo de dar mayor fluidez al usuario al momento de realizar la navegación.

59
60
8. RECOMENDACIONES.

Se recomienda complementar el prototipo haciendo uso de diferentes tecnologías como


GPS y aplicaciones compatibles con este (como GoogleMaps), para obtener un mejor
trazado de rutas y de esta manera dar una guía más amplia y exacta al usuario.
Además, se propone usar plataformas con mayor capacidad de cómputo, con el fin de
mejorar el tiempo de procesamiento de datos y ofrecer a los usuarios una respuesta en
tiempo real, mejorando así su movilidad.

Con respecto al algoritmo para la detección de objetos, se sugiere implementar un


algoritmo basado en análisis de nube de puntos ya que estos ofrecen buenos resultados
en este aspecto y presentan versatilidad frente a otras aplicaciones. Además, se sugiere
realizar la descripción del programa principal, con métodos que aseguren que su
ejecución sea realizada por los hilos sobre el procesador.

Para trabajos futuros se sugiere tener en cuenta la ubicación de los lentes del Kinect®
para el mejoramiento del dispositivo, o hacer uso de una cámara de menor tamaño para
mejorar la portabilidad del dispositivo.

Finalmente, se recomienda investigar nuevamente la posibilidad de emplear técnicas de


IA sobre este tipo de plataformas, explorando otras alternativas de implementación y
plataformas más potentes, que permitan evaluar sus posibilidades de aplicación en este
tipo de aplicaciones.

61
9. BIBLIOGRAFÍA

Adafruit. (2022). 4007 Adafruit Mouser Colombia.


https://co.mouser.com/ProductDetail/Adafruit/4007?qs=vLWxofP3U2yKY9HAgEKcTg%3D
%3D
Alarcon, J., Pérez, W., & Talero, G. (2010). ELECTRONIC GUIDE SYSTEM FOR BLIND
PEOPLE IN CONTROLLED INDOOR ENVIRONMENTS. 9.
Alarcon, J., TALERO, G., & PEREZ, W. (2012). DISEÑO E IMPLEMENTACIÓN DE UN
SISTEMA ELECTRÓNICO DE GUÍA PARA PERSONAS INVIDENTES EN ESPACIOS
CERRADOS CONTROLADOS (BLIND GUIDANCE SYSTEM). Unioversidad Pedagógica y
Tecnológica De Colombia.
Baron, D., Lino, M., Memoria, S., & Sanchez, F. (2002). Fundamentos de Procesamiento de
Imágenes Evento: CONATEC 2002. In Conatec 2002. universidad Áutonoma De Baja
California.
Bourne, R. R. A., Steinmetz, J. D., Flaxman, S., Briant, P. S., Taylor, H. R., Resnikoff, S.,
Casson, R. J., Abdoli, A., Abu-Gharbieh, E., Afshin, A., Ahmadieh, H., Akalu, Y., Alamneh,
A. A., Alemayehu, W., Alfaar, A. S., Alipour, V., Anbesu, E. W., Androudi, S., Arabloo, J.,
… Vos, T. (2021). Trends in prevalence of blindness and distance and near vision
impairment over 30 years: An analysis for the Global Burden of Disease Study. The Lancet
Global Health; Elsevier Ltd. https://doi.org/10.1016/S2214-109X(20)30425-3
Chai, R. (2021). Otsu ’ s Image Segmentation Algorithm with Memory-Based Fruit. 2021.
Chang, Q., & Maruyama, T. (2018). Real-Time Stereo Vision System: A Multi-Block Matching on
GPU. IEEE Access, 6, 42030–42046. https://doi.org/10.1109/ACCESS.2018.2859445
Cortes Osorio, J., Urueña, W., & Mendoza Vargas, J. (2011). Técnicas alternativas para la
conversión de imágenes a color a escala de grises en el tratamiento digital de imágenes.
Scientia Et Technica, XVII(47), 207–212. https://doi.org/10.22517/23447214.533
De Frías, C., HERNÁNDEZ, J., & MARTINEZ, S. (2019). Visión artificial aplicada en la
identificación de objetos y su parametrización geométrica [Universidad Carlos III DE
Madrid]. https://e-archivo.uc3m.es/handle/10016/29643
DFROBOT. (2022). SRF08 Ultrasonic Sensor - DFRobot.
https://www.digikey.com/catalog/es/partgroup/srf08-ultrasonic-sensor/75887
Dobernak, N. A. (2015). procesamiento de imágenes. 42–72.
ElecFreaks. (2013). Ultrasonic Ranging Module HC - SR04. In Datasheet.
http://www.micropik.com/PDF/HCSR04.pdf
Fernández, L. (2020). Aplicación de filtros morfológicos en imágenes.
https://riunet.upv.es/bitstream/handle/10251/145903/Ruiz - Aplicación de filtros
morfológicos en imágenes.pdf?sequence=1
Franco, J., & Rodríguez, O. (2018). DISEÑO DE UN SISTEMA DE DETECCIÓN DE
OBSTACULOS EN AMBIENTES CERRADOS PRA PERSONAS CON CEGUERA TOTAL
EN SAN JUAN DE PASTO (Vol. 2, Issue 1) [Universidad Autónoma De Nariño].
http://link.springer.com/10.1007/978-3-319-76887-8%0Ahttp://link.springer.com/
10.1007/978-3-319-93594-2%0Ahttp://dx.doi.org/10.1016/B978-0-12-409517-5.00007-
3%0Ahttp://dx.doi.org/10.1016/j.jff.2015.06.018%0Ahttp://dx.doi.org/10.1038/s41559-019-
0877-3%0Aht
Giesteira, C., Zattera, A., & V. Godall, P. (2013). La Enseñanza de la música para personas con
discapacidad visual. In CienciaUAT (Vol. 2, Issue 2). http://www.once.es/new/servicios-
especializados-en-discapacidad-visual/publicaciones-sobre-discapacidad-visual/nueva-
estructura-revista-integracion/copy_of_numeros-publicados/numero-64/la-ensenianza-de-
la-musica-para-personas-con-discapacidad-visual-elabo
Gimp org. (2021). 8.2. Matriz de convolución. https://docs.gimp.org/2.6/es/plug-in-

62
convmatrix.html
Gonzalez, R. C., Woods, R. E., & Masters, B. R. (2009). Digital Image Processing, Third
Edition. In PEARSON (Ed.), Journal of Biomedical Optics (THIRD EDIT, Vol. 14, Issue 2).
https://doi.org/10.1117/1.3115362
Guerrero, D., & Villaluenga, L. (2013). Microsoft Kinect. In Universidad Politécnica de
Catalunya. Universidad Politécnica de Catalunya.
Hakim, H., & Fadhil, A. (2019). Navigation system for visually impaired people based on RGB-D
camera and ultrasonic sensor. ACM International Conference Proceeding Series, 172–177.
https://doi.org/10.1145/3321289.3321303
Hameed, A., & Ahmed, H. A. (2019). Survey on indoor positioning applications based on
different technologies. 12th International Conference on Mathematics, Actuarial Science,
Computer Science and Statistics, MACS 2018 - Proceedings, 1–5.
https://doi.org/10.1109/MACS.2018.8628462
Hernández, M., Guerrero, G. D., Cecilia, J. M., García, J. M., Inuggi, A., Jbabdi, S., Behrens, T.
E. J., & Sotiropoulos, S. N. (2013). Accelerating Fibre Orientation Estimation from Diffusion
Weighted Magnetic Resonance Imaging Using GPUs. PLoS ONE, 8(4).
https://doi.org/10.1371/journal.pone.0061892
Idrees, A., Iqbal, Z., & Ishfaq, M. (2015). An efficient indoor navigation technique to find optimal
route for blinds using QR codes. Proceedings of the 2015 10th IEEE Conference on
Industrial Electronics and Applications, ICIEA 2015, 690–695.
https://doi.org/10.1109/ICIEA.2015.7334197
Intel. (2016). Intel ® RealSense TM Camera SR300 Embedded Coded Light 3D Imaging System
with Full High Definition Color Camera. Product Datasheet, June, 1–54.
Jadhav, R., Anand, D. S., Gupta, A. K., Khare, S., Sharma, D., & Tapadiya, P. (2020). Real-
Time Object Detection for Visually Challenged. Advances in Intelligent Systems and
Computing, 1311 AISC(Iciccs), 281–296. https://doi.org/10.1007/978-981-33-4859-2_28
Klöckner, A. (2021). Home - pycuda 2021.1 documentation. https://documen.tician.de/pycuda/
Konaite, M., Owolawi, P. A., Mapayi, T., Malele, V., Odeyemi, K., Aiyetoro, G., & Ojo, J. S.
(2021). Smart Hat for the blind with Real-Time Object Detection using Raspberry Pi and
TensorFlow Lite. 1–6. https://doi.org/10.1145/3487923.3487929
Latouche, H., Solarte, K., Ordoñez, J., & Sánchez, L. (2017). Filtros no lineales para reducir
ruido en imágenes a color. Revista INGENIERÍA UC, 24(2), 185–195.
Li, B., Munoz, J. P., Rong, X., Chen, Q., Xiao, J., Tian, Y., Arditi, A., & Yousuf, M. (2019).
Vision-Based Mobile Indoor Assistive Navigation Aid for Blind People. IEEE Transactions
on Mobile Computing, 18(3), 702–714. https://doi.org/10.1109/TMC.2018.2842751
Mainzer, D., & Zachmann, G. (2015). GPU Computing and Applications. In Springer (Ed.), GPU
Computing and Applications. https://doi.org/10.1007/978-981-287-134-3_9
MatLab. (2022). Tipos de imagen - MATLAB & Simulink - MathWorks América Latina.
https://la.mathworks.com/help/matlab/creating_plots/image-types.html
MaxBotix Inc. (2021a). HRLV - MaxSonar ® - EZ TM Series. 1–17. https://www.maxbotix.com/
MaxBotix Inc. (2021b). XL - MaxSonar ® - EZ TM Series.
Microchip. (2010). Datasheet - PIC12F629 PIC12F675.
Miño, J., & Gámez, B. (2020). Diseño De Un Dispositivo De Apoyo Para La Movilidad De
Personas Con Discapacidad Visual. Universidad Técnica Del Norte.
Murata, M., Ahmetovic, D., Sato, D., Takagi, H., Kitani, K. M., & Asakawa, C. (2018).
Smartphone-based Indoor Localization for Blind Navigation across Building Complexes.
2018 IEEE International Conference on Pervasive Computing and Communications,
PerCom 2018, 1–10. https://doi.org/10.1109/PERCOM.2018.8444593
Nair, V., Tsangouri, C., Xiao, B., Olmschenk, G., Zhu, Z., & Seiple, W. (2018). A Hybrid Indoor
Positioning System for the Blind and Visually Impaired Using Bluetooth and Google Tango.
Journal on Technology and Persons with Disabilities, 6, 62–82.

63
Novoa, K., & Rojas, L. (2019). La importancia de la comunicación no verbal en el desarrollo de
la comunicación efectiva del relacionador público en la organización. Universidad Viña Del
Mar, 53(9), 1689–1699.
Nvidia. (n.d.). CUDA Overview. Retrieved August 14, 2021, from
http://cuda.ce.rit.edu/cuda_overview/cuda_overview.htm
Nvidia. (2020a). Jetson Xavier Nx.
Nvidia. (2020b). XAVIER NX The World ’ s Smallest AI Supercomputer for Embedded and Edge
Systems.
NVIDIA. (2019). Jetson-gpio: una biblioteca de Python que permite el uso de GPIO de Jetson.
https://github.com/NVIDIA/jetson-gpio
NVIDIA. (2020a). DATA SHEET NVIDIA Jetson Nano System.
https://developer.nvidia.com/embedded/jetson-nano-developer-kit
NVIDIA. (2020b). NVIDIA Jetson Xavier NX System-on-Module. 1–40.
NVIDIA. (2021). Cuda C Programming Guide. Programming Guides, September, 1–261.
Obando, V., & Sotomayor, N. (2015). DISEÑO Y CONTRUCCIÓN DE UN SISTEMA DE
ORIENTACIÓN PARA AYUDA EN LA MOVILIDAD DE PERSONAS INVIDENTES.
Escuela Politecnica Nacional.
Openkinect, O. (2011). OpenKinect. https://openkinect.org/wiki/Main_Page
Owens, J. D., Houston, M., Luebke, D., Green, S., Stone, J. E., & Phillips, J. C. (2008). GPU
Computing. GPGPU Programming for Games and Science, 33–120.
https://doi.org/10.1201/b17296-8
Parissaki, B., & Otero, J. (2019). Desarrollo E implementación De Una Arquitectura Hardware
Para El Calculo De Mapas De Profundidad Para Visión Estereoscipica. Universidad
Politecnica De Madrid.
Patel, C. T., Mistry, V. J., Desai, L. S., & Meghrajani, Y. K. (2018). Environment for Visually
Impaired People. 2018 Second International Conference on Intelligent Computing and
Control Systems (ICICCS), Iciccs, 1–4.
Plikynas, D., Žvironas, A., Budrionis, A., & Gudauskis, M. (2020). Indoor navigation systems for
visually impaired persons: Mapping the features of existing technologies to user needs.
Sensors (Switzerland), 20(3), 18. https://doi.org/10.3390/s20030636
Pulido, G. (2020). Las estadísticas, un insumo necesario. | Instituto Nacional para Ciegos.
https://www.inci.gov.co/blog/las-estadisticas-un-insumo-necesario
Romero, D., Rodríguez, F., & Pérez, M. (2018). Diseño de un Sistema Portátil para la
Detección de Obstáculos por medio de Kinect, como Apoyo a Personas con Limitaciones
Visuales [Universidad Distrital Francisco José De Caldas].
http://repository.udistrital.edu.co/bitstream/11349/14039/3/RodriguezFernandezWilmarFeli
pe2018.pdf
Sabrent. (2021). Sabrent USB Aluminum External Stereo Sound Adapter | Black (AU-EMCB) |
AU-EMCB. https://www.sabrent.com/product/AU-EMCB/usb-aluminum-external-stereo-
sound-adapter-black/
Sadi, M. S., Mahmud, S., Kamal, M. M., & Bayazid, A. I. (2014). Automated walk-in assistant for
the blinds. 1st International Conference on Electrical Engineering and Information and
Communication Technology, ICEEICT 2014.
https://doi.org/10.1109/ICEEICT.2014.6919037
Segura, O., & Lozada, P. (2019). DISEÑO Y CONSTRUCCIÓN DE UN SISTEMA
ELECTRÓNICO PARA PERSONAS NO VIDENTES COMO AYUDA PARA EL CRUCE DE
LAS CALLES URBANAS BASADO EN EL PROCESAMIENTO DE IMÁGENES. Escuela
Superior Pilitecnica De Chimborazo.
Sekhar, V. C., Bora, S., Das, M., Manchi, P. K., Josephine, S., & Paily, R. (2016). Design and
Implementation of Blind Assistance System Using Real Time Stereo Vision Algorithms.
Proceedings of the IEEE International Conference on VLSI Design, 2016-March, 421–426.

64
https://doi.org/10.1109/VLSID.2016.11
Simoes, W. C. S. S., Da Silva, L. M., Da Silva, V. J., & De Lucena, V. F. (2018). A Guidance
System for Blind and Visually Impaired People via Hybrid Data Fusion. Proceedings - IEEE
Symposium on Computers and Communications, 2018-June, 1261–1266.
https://doi.org/10.1109/ISCC.2018.8538480
SONZA, M., STERPONE, L., RODRIGUEZ, J., DU, B., & PENAGLIA, C. (2019). Master ’ s
Degree in Embedded Systems Master ’ s Thesis Reliability issues in GPGPUs (Issue
December). Politecnico Di Torino.
Takizawa, H., Yamaguchi, S., Aoyagi, M., Ezaki, N., & Mizuno, S. (2015). Kinect cane: an
assistive system for the visually impaired based on the concept of object recognition aid.
Personal and Ubiquitous Computing, 19(5–6), 955–965. https://doi.org/10.1007/s00779-
015-0841-4
Tapu, R., Mocanu, B., Bursuc, A., & Zaharia, T. (2013). A smartphone-based obstacle detection
and classification system for assisting visually impaired people. Proceedings of the IEEE
International Conference on Computer Vision, 444–451.
https://doi.org/10.1109/ICCVW.2013.65
TDK. (2020). EV _ MOD _ CH201 Evaluation Module User Guide (Vol. 1, Issue 510).
Texas, I. (2015). DUAL H-BRIDGE MOTOR DRIVER. August.
Vanegas, E., & Marulanda, J. (2017). Consideraciones de diseño para un circuito de disparo de
tiristores en un rectificador trifásico totalmente controlado. Universidad Tecnológica De
Pereira.
Vasquez, R., & Cardona, A. (2019, April). Dispositivos de asistencia para la movilidad en
personas con discapacidad visual: una revisión bibliográfica. Revista Politécnica, 15(28),
107–116. https://doi.org/10.33571/rpolitec.v15n28a10
Villa, O., Stephenson, M., Nellans, D., & Keckler, S. W. (2019). NVBit: A dynamic binary
instrumentation framework for NVIDIA GPUs. Proceedings of the Annual International
Symposium on Microarchitecture, MICRO, 372–383.
https://doi.org/10.1145/3352460.3358307
Villegas, A., Asenjo, R., & Plata, O. (2015). Memoria Transaccional Hardware en Memoria
Local de GPU.
Wang, H. C., Katzschmann, R. K., Teng, S., Araki, B., Giarre, L., & Rus, D. (2017). Enabling
independent navigation for visually impaired people through a wearable vision-based
feedback system. Proceedings - IEEE International Conference on Robotics and
Automation, 6533–6540. https://doi.org/10.1109/ICRA.2017.7989772
World Health organization. (2010). Global data on visual impairments 2010.
https://www.who.int/emergencies/diseases/novel-coronavirus-2019?
gclid=CjwKCAjw092IBhAwEiwAxR1lRkDG_cAxXX61_wj1cEluDWtKYOrbEsyxU3nF9UpkL
XhpMSIR8A780RoC540QAvD_BwE
Xu, F., & Fujimura, K. (2003). Human detection using depth and gray images. Proceedings -
IEEE Conference on Advanced Video and Signal Based Surveillance, AVSS 2003, 115–
121. https://doi.org/10.1109/AVSS.2003.1217910
Zhang, H., & Ye, C. (2016). An indoor navigation aid for the visually impaired. 2016 IEEE
International Conference on Robotics and Biomimetics, ROBIO 2016, 467–472.
https://doi.org/10.1109/ROBIO.2016.7866366
Zhang, Z. (2012). Microsoft kinect sensor and its effect. IEEE Multimedia, 19(2), 4–10.
https://doi.org/10.1109/MMUL.2012.24

65
10. ANEXOS

Los códigos presentados están disponibles en los siguientes links.


https://github.com/GABFESE/GPU_assistant
https://github.com/GrupoGIRA

Anexo A Codigo “GPU Assitant”


Figura 43 Código main.

66
67
Anexo B Código de detección de objetos.

68
Figura 44 Codigo Prossesing

69
70
71
Figura 45 Código tamplates

72
73
Anexo C Codigo de Morfologia
Figura 46 Código Operaciones morfológicas.

74
75
Figura 47 Código templates

76
Anexo D Codigo de utilidades.

77
78
Anexo E Código para el uso de la camara Kinect

79
Anexo F Codigo de Comunicación por UART

80
81
Anexo G Archivos de audio generados
Figura 48 Archivos de audio generados mediante el código de Emisión de Alertas

Anexo H Audios de estado del sistema

Figura 49 Archivos de estado de ejecución del Código del Asistente.

82
Anexo I Codigo implementado para el sensor Ultrasonico

83
Anexo J Prototipo Implmentado

Figura 50 Implementación del prototipo

84
Figura 51 Prototipo vista lateral derecha

85
Figura 52 Caja de conexiones del prototipo

86
Anexo K Diagrama esquematico Módulo de detección

Figura 53 Diagrama de conexión PIC 12F675 y la Jetson Xavier de NVIDIA

Anexo L Placa PCB

Figura 54 Tarjeta principal PCB (Circuito impreso)

87
Figura 55 Vista superior (top side) Figura 56 vista inferior (bottom side)

Anexo M Consentimiento informado para las pruebas de validación.

Consentimiento Informado
Yo
_ declaro que he sido informado e invitado
a participar en una investigación denominada “ASISTENTE DE NAVEGACIÓN PARA
PERSONAS CON LIMITACIONES VISUALES SOBRE PLATAFORMAS GPU EN
ESPACIOS CERRADOS CONTROLADOS”, éste es un proyecto de investigación
científica desarrollado por el grupo de investigación GIRA de la Universidad. Pedagógica
y Tecnológica de Colombia, Entiendo que este estudio busca conocer Verificar la
efectividad del prototipo diseñado y validar su funcionamiento con personas en condición
de discapacidad visual. Y sé que mi participación se llevará a cabo en ________________,
en el horario _______________ y consistirá en recorrer una pista de obstáculos cuyo
recorrido durará ________ minutos. Me han explicado de los posibles riesgos que hay en
el momento de recorrer la pista de obstáculos, además de realizar una encuesta la
información registrada será usada solo para fines académicos, y que los nombres de los
participantes se mantendrán en el anonimato, esto significa que las respuestas no

88
podrán ser conocidas por otras personas ni tampoco ser identificadas en la fase de
publicación de resultados.

Estoy en conocimiento que los datos no me serán entregados y cumpliendo con los
protocolos de bioseguridad presentes en el plan de gestión de COVID debido a la
contingencia generada por el virus sars-coV-2 o COVID19 y que no habrá retribución por
la participación en este estudio, sí que esta información podrá beneficiar de manera
indirecta y por lo tanto tiene un beneficio para la sociedad dada la investigación que se
está llevando a cabo.
Asimismo, sé que puedo negar la participación o retirarme en cualquier etapa de la
investigación, sin expresión de causa ni consecuencias negativas para mí.

Sí. Acepto voluntariamente participar en este estudio y he recibido una copia del
presente documento.

Firma participante:

Fecha:

Si tiene alguna pregunta durante cualquier etapa del estudio puede comunicarse con,
Mario Alejandro Reyes Medina ESTUDIANTE DE LA UNIVERSIDAD PEDAGÓGICA Y
TECNOLÓGICA DE COLOMBIA mario.reyes01@uptc.edu.co, teléfono 3112080972.

Anexo N Encuesta realizada los voluntarios de la prueba de valicadión

Encuesta De Validación De Asistente De Navegación


Esta encuesta tiene como objetivo realizar la validación de funcionalidad del
Asistente de navegación para personas con limitaciones visuales en espacios
cerrados controlados, desarrollado por parte de Mario Alejandro Reyes y Gabriel
Felipe Silva Espejo estudiantes de la UPTC e integrantes del grupo de
investigación GIRA de la misma. Para lo cual se presentan las siguientes
preguntas.

Si tiene alguna pregunta durante cualquier etapa del estudio puede comunicarse
con, MARIO ALEJANDRO REYES MEDINA estudiante de Ingeniería Electrónica
email mario.reyes01@uptc.edu.co, o con WILSON JAVIER PEREZ HOLGUN
profesor de la UNIVERSIDAD PEDAGÓGICA Y TECNOLÓGICA DE COLOMBIA, email
wilson.perez@uptc.edu.co.

1. ¿Qué tan cómodo o cómoda se sintió usted usando el dispositivo? *

89
(1 muy incómodo, 10 bastante cómodo)

Marca solo un óvalo.

1 2 3 4 5 6 7 8 9 10

2. En caso de que la respuesta a la pregunta anterior haya sido que se sentía


incómodo o incomoda (de 1 a 6) usando el asistente, ¿Qué sugerencias tendría usted para
mejorar el dispositivo en este aspecto?

3. ¿Cuál de los modos de emisión de alertas por parte del asistente fue de su preferencia? *

Marca solo un óvalo.

Emplear únicamente alertas audibles

Emplear alertas hápticas y audibles

simultáneamente Emplear alertas hápticas

únicamente

4. ¿Qué tan fácil o difícil le resultó a usted interpretar las alertas emitidas por el dispositivo? *

Marca solo un óvalo.

1 2 3 4 5 6 7 8 9 10

Muy difícil Muy fácil

90
5. Si a usted le resulto difícil la interpretación las alertas emitidas por el asistente (audibles
únicamente o hápticas y audibles simultáneamente), ¿Qué sugerencias cree usted
pertinentes para mejorar el asistente en este aspecto?

6. Si pudiera usar el asistente de navegación en los ambientes cerrados que usted frecuenta en su *

vida diaria ¿lo usaría?, sí o no y ¿Por qué?

7. Si usted contara con los fondos y pudiera comprar el asistente de navegación ¿lo compraría?, sí *

o no y ¿Por qué?

8. Según la prueba realizada, ¿Qué recomendaciones daría usted para mejorar el funcionamiento *

del asistente?

91
Este contenido no ha sido creado ni aprobado por Google. Link de la encuesta https://forms.gle/TDVU8wvR65H3jjnq5

92

También podría gustarte