Documentos de Académico
Documentos de Profesional
Documentos de Cultura
AI Cancer Reporte-Técnico
AI Cancer Reporte-Técnico
Entregable 4.1
Proyecto 41756
Responsable técnico:
Dr. José Luis González Compeán
Profesor-Investigador, Cinvestav Tamaulipas
Muyal-Ilal:
Plataforma tecnológica para la gestión, aseguramiento,
intercambio y preservación de grandes volúmenes de
datos en salud y construcción de un repositorio nacional
de servicios de análisis de datos de salud.
Autorizaciones
Control de cambios
2. Introducción ............................................................................................................................................ 5
3. Antecedentes .......................................................................................................................................... 6
4. Entregables ............................................................................................................................................ 10
5. Detección de nódulos en pulmón y flujo para la detección asistida para cáncer de huesos largo
10
5.26. Salidas........................................................................................................................................... 34
8. Conclusiones. ......................................................................................................................................... 95
9. Anexos .................................................................................................................................................... 96
2. Introducción
Contar con servicios como tele espirometría remota asistida y tele auscultación
con un estetoscopio digital, permitiría a los servicios de salud extender su cobertura y a
los pacientes en comunidades rurales y urbanas marginales evitar traslados costosos y
perder días laborales. Sin embargo, se tiene el problema de que normalmente en esas
regiones las opciones de conectividad de datos son limitadas. Esto podría hacer
inviable u oneroso el despliegue de un sistema de telemedicina tradicional, debido a
que dichos sistemas incluso pueden llegar a requerir anchos de banda dedicados
superiores a 1 Mbps. En lugares donde por cuestiones orográficas no se pueda
establecer un enlace inalámbrico dedicado o no se pueda tender una fibra óptica,
una opción sería contratar enlaces satelitales, sin embargo, el costo de la renta
mensual de los enlaces podría hacer inviable el despliegue de servicios de e-Salud. Por
estas razones es necesario desarrollar sistemas de e-Salud para la detección y
seguimiento de ECDs que se adapten a las opciones de conectividad de datos
disponibles en zonas rurales y urbanas marginales en México, esto con el fin de
proporcionar servicios de salud básicos a sectores de población vulnerables sin realizar
3. Antecedentes
Los sistemas de expediente clínico electrónico (SECE), dispositivos médicos y
plataformas para el manejo de datos de salud mejoran los tiempos de respuesta de la
atención a los pacientes del sector salud de México. Además, estos componentes
posibilitan el fortalecimiento de mecanismos de control de los sistemas de salud y
permiten a las instituciones mantenerse en línea con las diversas políticas, normas
(ejemplos: NOM-024-SSA3-2010 y NOM-004-SSA3-2012) y estándares (ejemplos: DICOM
y HL7). En este contexto, los sistemas de e-Salud se refiere al uso de las diversas
En este sentido, el manejo de datos sensibles (como lo son las imágenes médicas)
implica la utilización de estructuras de datos que permitan acceder tanto a los datos
Aunque las soluciones extremo a extremo son factibles para asegurar los datos a
la hora de almacenarlos en la nube, es necesario contar con sistemas que apoyen la
gestión de la información durante el ciclo de vida de los datos clínicos. Para apoyar
dicha gestión, en nuestro grupo de trabajo se desarrolló un modelo de distribución de
productos digitales inspirado en los principios de la cadena de suministros (Vázquez et.
al, 2018). Dicho modelo, permite la gestión de los ciclos de vida de los productos
digitales como cadenas de valor. Así mismo, garantiza la confidencialidad en la
entrega de los datos, evitando no repudio así garantizando la privacidad mediante el
uso de técnicas de cifrado por atributos.
Las imágenes médicas suelen estar en el formato DICOM (Digital Imaging and
Communications in Medicine). Este formato se compone de dos partes principales:
metadatos y una matriz numérica. Los metadatos contienen información sobre el
paciente y algunos atributos de la imagen, como su tamaño (i.e., número de filas y
columnas). Por otro lado, la matriz representa la imagen medica como tal.
Las imágenes están en el formato DICOM y son en su mayoría tomografías. Una
tomografía se compone de una secuencia de D imágenes. Cada imagen en esta
secuencia se le suele Hamar corte. Para leer una tomografía en una computadora, es
necesario leer las D imágenes de la secuencia en el orden correcto.
volumetric-dicom/
000000.dcm
000001.dcm
…
000098.dcm
Para leer un solo archivo DICOM con Python, podemos utilizar las siguientes librerías:
• imageio
• pydicom
En este caso, se trata de un tensor de tipo int16. Es decir, cada elemento del tensor es
un entero. Por otro lado, las dimensiones del tensor son (99, 512, 512), es decir, se trata
de una secuencia de 99 cortes de 512x512.Otro de los atributos importantes de una
imagen es el Número de canales. Cuando se genera un volumen con archivos DICOM,
se recomienda incluir el número de canales en el tamaño del volumen. Como
resultado, las dimensiones de un volumen siguen el formato (C, D, H, W) o (Channels,
Depth, Height, Width). En el ejemplo anterior, cada corte es una matriz de 512x512 de
un solo canal (i.e., está en escala de grises). Por lo tanto, las dimensiones del volumen
son (1, 99, 512, 512).
Figura. 5.1: Cortes de una tomografía. Cada imagen representa un corte de la tomografía. Cada
corte es una imagen en escala de grises de 512x512. Cuando se combinan los 99 cortes, se
obtiene un volumen o tensor con las siguientes dimensiones, (1, 99, 512, 512), es decir, una
secuencia de 99 imágenes de 512x512 de un solo canal (escala de grises).
La Figura. 5.1 muestra cinco de los cortes de la tomografía generados a partir del
ejemplo anterior, es decir, con imageio.volread (dir_path, "DICOM"). Cada corte es una
imagen en escala de grises (un solo canal) de 512x512. Cuando se combinan todos los
cortes, se obtiene un volumen o tensor con estas dimensiones, (1, 99, 512, 512).
La librería pydicom es más flexible que imageio, ya que nos brinda mayor control para
leer los cortes y generar el volumen. Por esta razón, emplearemos esta librería de aquí
en adelante. El Código 1 muestra cómo leer un archivo DICOM con pydicom. La
función apply_modality_lut() permite convertir los valores de intensidad a unidades de
Hounsfie ld (HU, Hounsfield Units). De este modo, el rango de valores cambia de [O,
4095] a [-1024, 3071]. La escala de Hounsfield nos permite identificar tejidos y materiales
en una imagen médica. Por ejemplo, el aire se encuentra cerca de -1,000 HU y el agua
cerca de O HU [1]. Como parte del preprocesamiento de las imágenes, algunos
autores (Estevens et. al, 2020), recomiendan limitar el rango a [-1000, 1000]
dicom/
p2/
20190228/
CT2/
anonima
2anonima
137anonima
138anonima
en donde dicom, p2, 20190228 y CT2 son directorios, mientras que anónima.
138anonima son 138 archivos en formato DICOM. Los archivos no tienen extensión.
El modelo de clasificación que se pretende usar está basado en Faster_rcnn_resnet50,
un modelo del estado de arte para la localización de objetos en imágenes. Este
modelo considera imágenes con las siguientes dimensiones (3, 512, 512), esto es, una
Además, se suele reducir este rango para resaltar elementos de la imagen. Por
ejemplo, se recomienda usar sólo el rango [0, 3000] para resaltar las masas en
tomografías de los huesos.
Cuando las muestras son muy pocas, generalmente los resultados del entrenamiento
son pobres, ya sea porque no es capaz de identificar los objetos correctamente, o
porque se genera un sobreajuste y el modelo memoriza las imágenes en lugar de
llegar a un aprendizaje real.
Para minimizar este efecto, es posible generar nuevas imágenes a partir de las
existentes. Debido a que la disponibilidad pública de estudios de este tipo es limitada,
fue necesario aplicar técnicas de aumento de datos, esto es generar imágenes a
partir de las muestras existentes por medio de transformaciones geométricas, y
cambios sutiles en las intensidades de las imágenes. Aunque es posible aplicar otros
cambios como agregar obstrucciones, ruido, y aplicar filtros a las imágenes, se
decidió no aplicarlos para evitar que el modelo memorice estos patrones nuevos que
no estarán presentes en otras imágenes.
En este paso es necesario definir las regiones de interés en cada imagen. Este paso es
realizado por el médico especialista. Las etiquetas definen las regiones de la imagen
con anomalías y son necesarias para entrenar el modelo y que pueda identificar
dichas regiones.
Las anotaciones de dichas imágenes con Labellmg Este programa genera un archivo
XML por cada imagen JPG. El archivo XML contiene los metadatos (anotaciones) de la
imagen, es decir, la clase y la ubicación de cada región de interés. La Figura 6.10
muestra una captura de pantalla del programa Labellmg con las anotaciones de la
imagen .png. El archivo generado .xml, contiene la clase y ubicación de la región de
interés en la imagen. En este ejemplo, el nombre de la clase es masa. El contenido de
.xml se muestra en el Código 5.
<annotation>
<folder>validation</folder>
<filename>26197503341-122.png</filename>
<path>E:\lungriderData\validation\26197503341-122.png</path>
<source>
<database>Unknown</database>
</source>
<size>
<width>512</width>
<height>512</height>
<depth>1</depth>
</size>
<segmented>0</segmented>
<object>
<name>tumor</name>
<pose>Unspecified</pose>
<truncated>0</truncated>
<difficult>0</difficult>
<bndbox>
<xmin>151</xmin>
<ymin>307</ymin>
<xmax>239</xmax>
<ymax>380</ymax>
</bndbox>
</object>
</annotation>
Figura. 5.3 Programa Labellmg. La región de interés de la imagen se encuentra delimitada por un
rectángulo.
En general, los pasos a seguir para desarrollar un modelo de detecci6n de objetos son
los siguientes:
Figura. 5.4: TensorBoard. Esta aplicación permite revisar el progreso del entrenamiento del modelo.
Figura. 5.5 : Estado del servidor stout durante el entrenamiento del modelo.
• EfficientDet DO 512x512
• EfficientDet D4 512x512
• CenterNet HourGlass 104 512x512
El primer modelo no se pudo entrenar debido a un error: luego de las primeras 500
iteraciones, el valor de la función de costo (loss) es NaN. Como resultado, no es posible
entrenar el modelo ya que no se puede medir el error de predicción. El segundo
modelo tampoco se pudo entrenar debido a que es computacionalmente muy
costoso. El servidor stout cuenta con 40 cores y 32 GB de RAM. Aun así, no fue posible
entrenar el segundo modelo. El último modelo se pudo entrenar. Para entrenar el
modelo de detecci6n de objetos, se realizaron los siguientes pasos, como se describe
en la documentación:
Para la detección asistida para el cáncer de huesos largos y pulmones existe, un flujo
formal de se lleva a cabo en el presente proyecto, desde la obtención de las imágenes
DICOM, en donde el proceso de extracción de las mismas contiene un formato
adecuado para llevarlo a un sistema en donde se realiza una partición de las mismas
de manera aleatoria y formar un conjunto de entrenamiento y prueba que
regularmente se toman el 80% y 20% de la cantidad total de imágenes. Mismas que se
genera un TF Records a partir de imágenes y XML´s. Continuando con el flujo, se realiza
un pipeline de entrenamiento extrayendo las imágenes y entrenando el modelo,
seguido de la exportación del modelo y prueba del del mismo para obtener el conjunto
de pruebas para la detección asistida para cáncer de huesos largos y pulmones. con
base en marcos de referencia de normas internacionales (NIST, ISO 27001:2013 y COBIT
5) y nacionales (NOM-024-SSA3-2010). El programa, además, descubre el flujo de
trabajo asociado a los archivos de configuración.
• Una vez creado el usuario se debe notificar al administrador del servidor para
que otorgue los permisos correspondientes.
• El administrador notificara al usuario que tiene permiso para descargar los
archivos.
• Conectarse mediante VPN para descargar el cliente, el cual realizara la
descarga de los archivos DICOM de manera automática.
Para este proyecto se utilizó Anaconda Individual Edition con Python 3.7.6 (default,
Jan 8 2020, 20:23:39) para el desarrollo de los algoritmos. Adicionalmente, se utilizó
LabelImg para realizar el etiquetado correspondiente para las imágenes, el cual
genera un documento XML con la localización del objeto y la clase a la que pertenece.
LabelImg se puede descargar del siguiente enlace: http://tzutalin.github.io/labelimg/.
Una vez que se han descargado los archivos DICOM en nuestro equipo, se extrae la
información correspondiente a la imagen. Para esto, utilizaremos el código
dicom2rgb.py, el cual revisa todos los archivos que contenga la ruta de la carpeta y
las convierte en imágenes con formato PNG. Sin embargo, estas imágenes PNG se
guardan con una capa adicional, esto es el canal de transparencia, por lo que es una
imagen de 4 canales. El código dicom2rgb.py permitirá además hacer la conversión
de RGBA a RGB internamente, dejando las imágenes de 3 canales. En la Figura. 5. 1 se
Carpeta/Archivo Descripción
La Figura 5.8 muestra cómo se organizarán los documentos, tanto carpetas como
archivos de python, involucrados en el proyecto, Una vez que se tienen las imágenes
médicas en formato PNG, se realiza la partici6n de las imágenes de manera aleatoria
para generar los conjuntos en train, test y prueba, generalmente es el 70 %, 20 % y 10
%, respectivamente. Al terminar la partici6n de las imágenes, cada partici6n debe
colocar se en su carpeta correspondientes.
Los modelos pre entrenados utilizan archivos record para entrenar en lugar de utilizar
las imágenes en formato PNG, JPG, BMP, etc. Para generar estos archivos, se requiere
de las imágenes y los archivos XML's creados anteriormente como resultado del
etiquetado manual por un especialista de la salud.
https://github.com/tensorflow/models/blob/master/research/object_detection/g3
doc/tf2_detection_zoo.md
Una vez entrenado el modelo es necesario exportarlo para poder utilizarlo para la
detección de anormalidades en imágenes médicas. Para eso, pegamos el siguiente
código en la terminal:
5.21. Detección.
5.23. Requerimientos
Funcionales
No funcionales
5.24. Alcances
Los archivos de configuración .cfg, .json y .yml representan un servicio que será
desplegado. El programa desarrollado recibe de entrada los archivos de
configuración y determina que normas nacionales e internacionales cumple el
servicio. El cumplimiento es mostrado en forma de reporte en donde se observa el
5.25. Entradas
5.26. Salidas
Las salidas del programa son un reporte para cada norma en donde se visualiza el
porcentaje de cumplimiento de la norma y la representación gráfica del flujo de
trabajo en un grafo acíclico dirigido.
5.28. Preprocesamiento
Este módulo, realiza la lectura de los archivos de configuración .cfg, .json y .yml.
Para identificar los flujos de trabajo, se implementó un módulo que reconoce los
bloques de construcción,
pyyaml. pyyaml permite decodificar el contenido del archivo.yml.
{
"name": nombre de la norma,
"requirements": [
{
"category": "categor´ıa", "description":
"descripci´on", "keywords": [ "" , "" , ... ],
"assisted": boolean, "compliance": boolean
}
...
]
}
Para determinar el cumplimiento de las normas internacionales y nacionales, se
utilizan algunas APIs para consultar información contextual de los contenedores que
despliegan el servicio. Estas APIs representan fuentes de información en las cuales se
basará el programa para determinar o no el cumplimiento de las normas. Entre las
fuentes de datos están: API de contenedores, API pub/sub, API Blockchain.
Require: cfg, checklist, ids containers, SOURCES: APIs endpoints or local file resources.
Ensure: checklist, checks, compliancePercentage, num assisted requirements checks ← 0
num requirements ← 0
num assisted requirements ← 0
context ← new String
for source in SOURCES do
if source is external then
context.append(external.api call resolver(source, ids containers))
else t> source is localfile (cfg, yml or json)
context.append(cfg.find(source))
end if
end for
for requirement in checklist[“requirements”] do
num requirements ← num requirements + 1
if requirement[“assisted”] then
num assisted requirements ← num assisted requirements + 1
continue
end if
if any of requirement[“keywords”] is in context then
requirement[“compliance”] ← true
checks ← checks + 1
end if
end for
return checklist, checks, checks/num requirements, num assisted requirements
Las tecnologías de la información como el internet de las cosas (IoT, por sus siglas en
inglés) (Nauman et. al, 2020) (Singh et. al, 2020) así como los algoritmos de análisis de
datos y aprendizaje máquina (Kushwaha et. al, 2020), son consideradas por las
organizaciones y la comunidad científica como un pilar en la construcción de sistemas
de e-salud, los cuales mejoran radicalmente el acceso y eficiencia de los servicios de
salud tradicionales. En este sentido, dichos sistemas son utilizados para adquirir datos
de los pacientes (por ejemplo, signos vitales o actividad) y ayudar a profesionales de
la salud en la toma de decisiones. Además, profesionales de la salud y organizaciones
médicas pueden obtener hallazgos importantes al procesar los datos adquiridos desde
dispositivos IoT, además del procesamiento de imágenes médicas, estudios,
expedientes clínicos y registros históricos de datos (Stanfill et. al, 2020).
Para encontrar estos hallazgos en los datos, las organizaciones deben de procesarlos a
través de un conjunto de tareas a través del ciclo de vida de los datos (Berchick et. al,
2021). En un escenario típico de procesamiento y manejo de datos médicos, estos son
adquiridos de una o distintas fuentes (por ejemplo, de tomógrafos o
electrocardiogramas), posteriormente procesados con algoritmos y aplicaciones (por
ejemplo, para anonimizar imágenes médicas, o procesar los datos utilizando algoritmos
de aprendizaje automático), y finalmente los resultados son visualizados utilizando
herramientas de visualización de datos. En el flujo descrito anteriormente, son utilizadas
un conjunto heterogéneo de aplicaciones, las cuales se encuentran desarrolladas en
Estructuras de control
Dependencias (librerías,
frameworks, etc.)
Sistema operativo
1Un flujo de trabajo es la formalización de un proceso científico o de ingeniería, que permite el despliegue automático de
tareas y aplicaciones en una infraestructura de hardware, por ejemplo, en un clúster privado o en la nube Invalid source
specified..
Figura 6.3. Patrones básicos utilizados en un flujo de trabajo. a) Secuencial. b) Paralelo. c) Sincronización. d)
Elección exclusiva. e) Mezcla simple.
2 https://www.docker.com/
3Se dice que son agnósticos dado que se encuentran desacoplados de la infraestructura, por lo tanto, es posible migrar los
servicios a otra infraestructura sin hacer cambios en las aplicaciones y sin modificar el comportamiento del sistema de e-
salud.
Figura 6.6. Representación conceptual de la construcción de una malla de servicios basada en la metáfora de
rompecabezas.
Figura 6.8. Representación conceptual de esquemas para le preparación y entrega de datos en la nube
utilizando cripto-contenedores de datos y aplicaciones.
Una vez que se han construido los bloques de construcción y diseñado el sistema de e-
salud, lo siguiente es desplegarlos en la infraestructura en donde será ejecutado el
sistema. En este sentido, el sistema y sus bloques pueden ser desplegados tanto en un
solo equipo, ya sea en la nube o en una computadora personal, o de forma distribuida
en un clúster de cómputo de alto desempeño dentro de una organización o
desplegando los bloques en infraestructuras de diferentes organizaciones y/o la nube.
En este sentido, dos tipos de sistemas de e-salud pueden ser desplegados: intra
institucionales e inter institucionales.
Los sistemas de e-salud intra institucionales son aquellos permiten a las instituciones y
organizaciones de salud procesar e intercambiar datos entre profesionales de la salud
y departamentos dentro la organización u hospital. Por ejemplo, en la Figura 6.9 se
muestra un ejemplo de un sistema de e-salud intra institucional. En este ejemplo, un
técnico radiólogo realiza la captura de tomografías del paciente en el Instituto
Nacional de Rehabilitación. Las imágenes son almacenadas, y el radiólogo las
comparte con oncólogo del instituto para que las valore y de su diagnóstico. En este
sentido, las imágenes antes de ser compartidas con el oncólogo son procesadas
mediante un servicio de e-salud automático construido para anonimizar las imágenes
y etiquetarlas utilizando un modelo de detección de tumores. Los resultados son
entregados al oncólogo de forma automática en su computadora.
Los sistemas de e-salud inter institucional son creados para compartir datos entre
diferentes instituciones, organizaciones u hospitales. En este tipo de sistemas, los datos
son distribuidos utilizando una red segura de distribución de contenidos, la cual
automáticamente distribuye los datos a los participantes de las organizaciones que
tenga autorización para acceder a los datos. Por ejemplo, en la Figura 6.10 se muestra
un sistema de e-salud inter institucional. Posteriormente, los datos son inyectados
automáticamente en un sistema de procesamiento de e-salud el cual anonimiza los
datos y realiza la generación de una malla 3D de las imágenes DICOM. Los resultados,
son entregados a la red segura de distribución de contenidos, y posteriormente son
automáticamente colocados en las computadoras de los profesionales de salud con
acceso a los datos.
Figura 6. 11. Arquitectura para el manejo de servicios de e-salud y sus componentes (piezas y rompecabezas).
6.9. Preliminares
docker-compose up -d
4 https://docs.docker.com/get-docker/
5 https://docs.docker.com/compose/
6 https://docs.docker.com/engine/swarm/
La plataforma web tiene una interfaz gráfica en el puerto 221017. Una vez que se
ingresa a la plataforma, se debe de iniciar sesión o en caso de no tener una cuenta,
se debe de registrar una nueva. Para registrar la cuenta, se debe de llenar un formulario
con un nombre de usuario, correo electrónico, contraseña y organización a la que
pertenece el usuario. El usuario debe de validar su dirección de correo electrónico. Una
vez realizado lo anterior, el usuario podrá ingresar a la plataforma.
7 Este es el puerto declarado por defecto en el archivo YML. Usted puede cambiar el puerto si lo desea.
1. Elige tus piezas: en este paso el diseñador elige las piezas que formarán parte del
rompecabezas que será desplegado como un servicio de e-salud. En esta
pantalla, también es posible crear una pieza si esta no existe en el repositorio de
piezas.
Figura 6.14 se muestra el formulario para crear una nueva pieza de rompecabezas, la
cual es una aplicación encapsulada en un contenedor virtual y que se utiliza para crear
un rompecabezas que al desplegarlo se materializa en un servicio de e-salud. En el
formulario se debe de indicar el nombre de la pieza, el comando que ejecutará la
pieza durante tiempo de ejecución (por ejemplo, python3 app.py), una breve
descripción de la pieza, y finalmente la imagen de contenedor que se usará para crear
el contenedor de la pieza de rompecabezas.
3. Elige tus datos: en este paso el diseñador elige el catálogo de datos que será la
fuente de datos del servicio de e-salud.
4. Une tus aplicaciones: en este paso el diseñador ordena y une sus aplicaciones
para definir su orden de ejecución. Los diseñadores pueden crear diferentes
patrones de procesamiento. Al guardar el servicio de e-salud, este puede ser
desplegado ya sea en una computadora personal, en la nube o en un clúster de
computadoras con Docker Swarm.
En la
Tanto los sistemas de e-Salud como los catálogos de datos y resultados pueden ser
compartidos con otros usuarios mediante un sistema de publicación/suscripción.
Para publicar un catálogo de datos/resultados, se debe de navegar a
Storage>Catalogs. Posteriormente, se debe de hacer clic en el catálogo que se desea
compartir y dar clic en el botón Publish.
Mientras, que para publicar un sistema de e-Salud, se debe de navegar a Puzzles>List,
y posteriormente dar clic en el botón desplegable de cada rompecabezas, y
seleccionar Publish (ver 6.28).
Un VCS (Virtual Container System -VCS-) representa un conjunto de vci construido como
una única solución (servicio) para realizar una tarea en un flujo de datos. Un VD (Virtual
Device -VD-) representa aquellos dispositivos virtuales que forman parte una CApp. Esto
significa que un V D comprende componentes como V C o V CS.
Por lo tanto, un DST es un objeto de software para interactuar de manera sencilla con
la estructura compleja y detallada de los V D y su CApp. Esto se debe a la flexibilidad
de la WoT card que las representa, la cual cumple con las recomendaciones de W3C
Esta información proviene de una DfE (Dataflow Entity -DfE-), la cual captura
información de cada componente interno (cualquier CApp ∈ vc o vci ∈ V CS). DfE es
básicamente una estructura de datos que incluye información sobre la estructura, el
comportamiento y la función de un V D. La estructura, el comportamiento y la función
se utilizan para modelar el flujo de datos desde el V D hasta los procesos de toma de
decisiones. Se consideró una capa adicional para hacer más accesible la
representación de una DfE utilizando las pautas de WoT; esto produce lo que se
denomina WoT card. Esto significa que una WoT card representa la información de DfE
a través de conceptos utilizados en el dominio de contenedores virtuales. Estos
8 Es importante remarcar que en el resto del documento se emplean acrónimos que se derivan de conceptos en inglés. Se ha
decidido emplear estos acrónimos en inglés para mantener el vínculo con los conceptos empleados en la publicación de este
trabajo en una revista.
9
Una ontología es una definición formal de tipos, propiedades, y relaciones entre entidades que fundamentalmente existen para
un dominio de discurso en particular.
10
www.iso.org/committee/601355.html
En el método propuesto todos los participantes del flujo de datos se modelan como
objetos compuestos de partes de bajo nivel; el objeto tiene un objetivo y sus
componentes contribuyen a lograr juntos ese objetivo al realizar sus tareas. El modelado
funcional permite modelar a todos los participantes en la producción de estos flujos de
datos (como vci, VCS o CApps), que, de hecho, tienen un comportamiento de
procesos encadenados. Este modelo se captura en una DfE, que describe el
comportamiento (propiedades y eventos), la función (tareas) y la estructura
(interconexiones) de todos los participantes en el flujo de datos.
En este punto, una DfE proporciona una representación de los datos necesarios del vc.
Sin embargo, necesitamos una representación útil para interactuar con un vc; dicha
interacción puede ser de computadora a computadora o de humano a
computadora. Para lograr esta flexibilidad, esta representación se basa en los
principios de Web of Things (WoT)(Guinard, 2016). Esta representación de un vc se
denomina WoT card. Además de la información capturada por una DfE, también se
agregan metadatos del vc a la WoT card. Estos son metadatos que corresponden a la
descripción técnica del vc: direcciones IP, volúmenes, puertos, espacios de nombres,
entre otros.
En el caso de un V CS, dichos elementos se definen de forma recursiva para capturar
datos sobre estructuras y transformaciones utilizadas y realizadas por todo el V CS y sus
componentes (vci), respectivamente. Según las recomendaciones de WoT, la
generación de las WoT cards debe basarse en ontologías.
En este sentido, se definió y creó una ontología (llamada VC Docker FU Ontology12),
que se puede adaptar al contexto de cualquier WoT card en varios escenarios. La VC
Docker FU Ontology se utiliza como referencia en toda la generación de WoT cards
durante la representación de un vc. Esta ontología extiende de dos ontologías, primero
extiende de la VC Docker Ontology13, la cual a su vez extiende de VC ISO Ontology.
VC ISO Ontology fue formalizada por nosotros de acuerdo con la norma ISO/IEC JTC
1/SC 3814, que define todos los conceptos y restricciones de la norma de una manera
abstracta. La VC Docker Ontology, en su versión original, ya define conceptos y
restricciones de contenedores virtuales en el entorno Docker, fue adaptada siguiendo
la VC ISO Ontology; se incluyeron algunos conceptos y restricciones adicionales para
cumplir con la norma ISO. VC Docker FU Ontology agrega conceptos sobre el
comportamiento relacionado con los recursos de infraestructura -CPU, MEM, FS y NET-
11
YAML (Ain’t Markup Language) es un formato de serialización de datos legible por humanos, usado por Docker para configurar
los servicios de su aplicación (mediante docker-compose)
12
Disponible en github.com/adaptivez/VirtualContainerOntology
13
github.com/langens-jonathan/docker-vocab/blob/master/docker.md#config
14
www.iso.org/committee/601355.html
Una vez generada y almacenada la WoT card, está lista para el consumo mediante un
DST. Para que el DST sea accesible y consumido, debe convertirse en un intermediario
entre el objeto modelado (vc) y el consumidor. Esto es posible mediante el uso de un
sistema RESTful, que puede procesar solicitudes mediante las acciones HTTP más
comunes: GET, POST, PUT, DELETE. De esta manera, cualquier consumidor que realice
solicitudes de tipo REST puede consumir el DST. El consumo puede ser sobre
propiedades, acciones o eventos.
Cada elemento de la WoT card es universalmente identificado y aceptado por otras
entidades físicas y/o abstractas (p. ej., otros vc, V CS, aplicaciones, dispositivos,
peticiones de humanos, etc.) mediante un URI16.
15
Es el modelo base para describir cualquier cosa de IoT en el enfoque de Web of Things del W3C. Thing Description describe los
metadatos y las interfaces de Things. www.w3.org/TR/wot-thing-description
16
URI (Identificador de recurso universal) identifica en Internet un recurso (página web, imagen, audio, video, archivo, dispositivo
IoT, etc.) de una manera única y universal.
17
https://linuxcontainers.org/lxc
18
https://docs.freebsd.org/en/books/handbook/jails/
19
https://docs.oracle.com/cd/E37929_01/html/E36580/zonesoverview.html
Este proceso cumple una parte fundamental dentro del presente proyecto debido a
que permitirá a cualquiera de las entidades involucradas (personal médico y usuarios
finales) acceder a la información de cada una de las etapas por las cuales ha pasado
el contenido digital, verificando si este cumple con las acciones pactadas y que ha
sido procesado por las entidades correctas. Lo anterior posibilita aceptar o rechazar el
expediente digital basado en la información del flujo del producto (traza) apoyando
de esta manera a la toma de decisiones, mejorando la confianza en el resultado
obtenido.
7.1. Antecendentes.
Al final del proceso se generan demonios clientes en cada una de las fases del flujo,
tanto en la extracción como en la carga de información, pudiendo de esta manera
realizar una traza de cada uno de los puntos por los cuales ha pasado cada uno de los
activos procesados. Cabe destacar que se cuenta con una opción de visualización
de las transacciones realizadas a través de una página desplegada junto con la red
de bloques encadenados.
En la Figura 7.3 se observa un diagrama conceptual de alto nivel que muestra el flujo
de la información entre los diferentes componentes de la plataforma. Se puede notar
que a partir del sistema de construcción de servicios se genera un archivo de
configuración mediante el cual se construye el flujo de procesamiento o cadena de
valor, utilizando un enfoque ETL (Por sus siglas en inglés, Extract, Transform, Load) el cual
recibe un activo, lo procesa y lo carga a un espacio definido. Es importante resaltar
que la solución de trazabilidad estará inmerso dentro de cada etapa utilizando tanto
la fuente o extracción de datos así como la carga o sink de estos.
Es importante mencionar que la solución presenta una interfaz web mediante la cual
el paciente o cualquier otro elemento dentro del proceso puede observar la traza de
cada activo y verificar si este ha sido procesado de forma correcta.
Por lo tanto, el servicio queda compuesto de los siguientes elementos: red de bloques
encadenados (contiene los servicios necesarios para el registro de transacciones),
generador automático de clientes (construye y despliegue clientes de la red para el
sensado continuo y el registro automático de transacciones) y los clientes.
La red de bloques encadenados es una tecnología que provee una base de datos
distribuida entre nodos participantes, esta base distribuida contiene transacciones
firmadas con criptografía de clave pública lo cual permite identificar el acceso a la
información. Para el registro de transacciones a través de estas tecnologías se utilizan
mecanisos de consenso, el cual una vez realizado se inserta la transacción a la red.
Por otro lado, se utilizó compose como herramienta para definir y ejecutar aplicaciones
Docker de varios contenedores, creando una red virtual que permite la comunicación
entre ellos de forma eficiente y simple. Además, a través de un solo archivo yaml nos
permite configurar todos los servicios de la aplicación e iniciar a través de un solo
comando.
7.7. Arquitectura.
• REST API: Sawtooth nos provee de una API para realizar las consultas y registros a
la Blockchain de forma simple. Permite a los clientes interactuar con un validador
utilizando peticiones HTTP / JSON comunes. La API REST de Sawtooth está
diseñada solo como una interfaz simple para el uso del cliente. El validador y los
procesadores de transacciones utilizan una interfaz ZMQ / Protobuf que es más
7.8. Cliente.
En la Figura 7.5 se observa un ejemplo de una cadena de valor de tres etapas, en cada
una de ellas se ejemplifican las entradas y salidas a través del sistema de ficheros. Por
otro lado en la Figura 7.6 se muestra la ubicación de los elementos clientes dentro de
este flujo, se observa que en cada punto de interacción (entrada o salida) se permite
el registro del movimiento a la red de bloques encadenados, por lo que se tiene una
granularidad alta.
En la Figura 7.7 se observa el diagrama de flujo del demonio cliente el cual al ser
iniciado lee las credenciales provistas por el generador automático de clientes, y
comienza el sensado, cada que el intervalo de tiempo se satisface, el cron realiza:
En la Figura 7.8 se muestra el flujo de información para realizar una transacción a la red
de bloques encadenados, está comienza desde el cliente quien, al recibir un nuevo
archivo, obtiene sus metadatos y realiza una petición (autenticándose con sus
credenciales) al API. Posteriormente el API envía dicha petición al server de la
Blockchain el cual envía esta instrucción al validador, si la petición de registro es
aceptada, esta se guarda en el estado global del libro.
Cada cliente contiene un servicio de base de datos MySQL para el registro interno de
los elementos que ya han sido procesados, este microservicio es puesto como un
sidecar al servicio principal cliente. Además es importante mencionar que el registro
de los activos se basa principalmente en sus metadatos, por lo que es obligadamente
necesario el conservar el nombre del archivo igual en cada una de las etapas. Los
campos que se registran en la cadena de bloques en cada uno de los procesos son:
En la Figura 7.10 se observa el diagrama de flujo del proceso que realiza el generador
automático de elementos clientes, el cual recibe como entrada el archivo de
configuración e itera por cada una de las etapas que tiene descritas, por cada una
de ellas crea las carpetas que contienen los archivos de despliegue de los clientes,
además crea el material criptográfico necesario para cada una de estas entidades. Es
en este componente en el cual se realizan los acuerdos necesarios entre etapas para
permitir el registro de las transacciones pactadas, se define un owner de producto, así
como n reporters para el registro de las transformaciones realizadas al activo digital.
Por otro lado, en la Figura 8.11 se muestra el proceso para la gestión de material
criptográfico para cada una de las entidades en el flujo, tal como se observa en la
imagen existen tres unidades involucradas, el generados, el API y la red de cadenas de
bloques.
Es importante mencionar que Sawtooth utiliza secp256k1 como tipo de curva elíptica
ECDSA en el modelo criptográfico y viene definida en el documento normativo
Standards for Efficient Cryptography (SEC). Lo anterior para obtener llaves públicas y
privadas de las entidades.
{
"username": "myExample",
"password": "ljksdjfio8293889lkjsf", "publicKey":
"02cd3181dbd7d1539f470436ce222c53ab5e514f67809dc0095895e6cdfba97612",
"name": "An entity name",
"email": "myStage@noemail.com", "privateKey":
"2f4175fa39e7d2a89884b492d741a494c2b4f1021d3b3deb7c93ab72cc84935c",
"encryptedKey":
"{
\"iv\":\"h7h0uW9NqLB+VaKM7C8gSA==\",\"v\":1,\"iter\":10000,\"ks\":128,
\"ts\":
64,\"mode\":\"ccm\",\"adata\":\"\",\"cipher\":\"aes\",\"salt\":\"Kn8J+U0
Ko98=\"
,\"ct\":\"w5bGmngbGIt8QIIi/42gVDujsJNUkGsLwmeminMSYIdQq0i+qWZBz
1ZYalxitEsSte7NY
/L/UrDcYE6drcAmSOvQNQdIkwFz\"
}",
"hashedPassword": "slf3UiKJzmcE03wvYFqcHselnMQlDOhhriovzXmGeyk="
};
• El número de batch puede ser mayor si las características del equipo lo permiten.
• Aumentando el número de imágenes puede ofrecer mejores resultados.
• Se puede utilizar otro modelo pre entrenado, s6lo basta con descargarlo y
configurar el pipe-line.con.fig.
Definir las dimensiones de las imágenes. En este documento, mostramos algunas de las
imágenes para ilustrar la variedad de las mismas: algunas son a color, otras en escala
de grises; otras son secuencias de pocas imágenes (i.e., tres) y otras son secuencias de
más de cien imágenes. Es necesario que las dimensiones de las imágenes sean las
mismas para facilitar el desarrollo del modelo de predicci6n de anomalías. El modelo
que se usara para el proyecto está basado en U-Net Para poder usar este modelo, es
necesario que las imágenes de entrada sigan el formato (C, D, H, W) o (Channels,
Depth, Height, Width). Las dimensiones esperadas son (1, D, 512, 512), es decir, una
secuencia de D imágenes de 512x512 de un solo canal (escala de grises). El valor de D
es variable y suele ser cercano a 100.
9. Anexos
9.1. Manual de Usuario
Manual de Usuario
Autorizaciones
Revisó:
Autorizó:
Control de cambios
Introducción
Objetivo y Alcances
Guía de uso
Autenticación
La Figura 11.1.3 es la ventana principal del sistema una vez que se ha iniciado sesión.
En ella se muestran las opciones disponibles de interacción, estas son (la barra superior):
contenedores, imágenes y servicios. También se muestra unas tarjetas con accesos
directos a las listas de contenedores, imágenes o servicios según sea el caso. Los
botones de la parte superior des- pliegan opciones en todos los casos, principalmente
se muestran tres opciones: un listado de elementos (por ejemplo, contenedores),
información de tallada del mismo y una herramienta de creación. Finalmente, a la
izquierda de la barra superior, se muestra el botón de cerrar sesión.
Contenedores Docker
La Figura 11.1.6 muestra un modal con la información más importante del contenedor
en cuestión. Tiene campos como: el id, nombre, puertos desglosados, estado
desglosado, imagen, fecha de creación, liga para la información detallada y botones
con más opciones para controlar al contenedor. Entre las opciones se encuentran:
detener, pausar y reiniciar.
La Figura 11.1.8 muestra opciones de configuración con las que se puede crear un
contenedor. Esto incluye: imagen base, básicas (nombre, comando, puertos), recursos
(como la cantidad y
Imágenes Docker
La Figura 11.1.12 muestra el formulario para la creación de una imagen docker. Permite
importar
todos los archivos de contexto desde una carpeta (botón browse). Incluye los campos
de: nombre o etiqueta (tag), codificación (para el formato de envió), tiempo (timeout
), además de otros campos opcionales (botones tipo check ).
La Figura 11.1.13 muestra una tabla de los servicios contenerizados. Esta tiene las
columnas: número (#), nombre, etapas (nombre de las etapas en el servicio), compartir
(botón para publicar el servicio) y acciones (botones). Con los botones de acción se
puede: ejecutar, leer los logs, ir al sistema de supervisión, editar y eliminar. En la parte
superior derecha se encuentra el botón para crear un nuevo servicio.
La Figura 11.1.15 se encuentra como segundo paso para la creación de un servicio (una
vez agre- gado el nombre del mismo). A la derecha esta´ el panel de edición con los
botones principales de Cancelar y confirmar (Submit), otros botones para las etapas:
crear, habilitar opciones de etapas y limpiar o reiniciar el panel. La parte inferior
izquierda contienen un listado de las etapas disponibles, estas se pueden configurar
(agregarles aplicaciones) y posteriormente arrastrarlas al panel de la derecha para
ligarlas unas con otras (crear una secuencia).
La Figura 11.1.18 contiene el formulario para crear una nueva aplicación. Basta con
llenar los campos de nombre, imagen (seleccionar), comando, puerto y dar clic en el
botón Submit para confirmar.
Nota: Si no aparecen imágenes disponibles puede existir un fallo en el servicio de
Container Manager.
La Figura 11.1.19 muestra como quedaría un servicio compuesto con tres etapas
vinculadas una después de otra en orden consecutivo. Las etapas pueden arrastrarse
del panel izquierdo hacia el derecho cuando se suelta cerca de una tarjeta. Se pueden
retirar las tarjetas al arrastrarlas lejos de la tarjeta vinculada más cercana, así mismo se
pueden retirar varias tarjetas al mismo tiempo. La primera tarjeta corresponde al nombre
del servicio por lo que no se puede retirar, es posible modificar el nombre del servicio al
limpiar el panel. Para finalizar la creación se da clic en el botón Submit.
La Figura 11.1.20 contiene un ejemplo de los logs que se generan al ejecutar un servicio.
Estos logs se muestran al dar clic en el botón Logs ubicado en la columna Actions de la
tabla de servicios.
La Figura 11.1.21 muestra como compartir un servicio. Se obtiene al dar clic en el botón
de la columna Share. Esto despliega un modal para seleccionar un usuario con el cual
compartir el servicio. Posteriormente el usuario receptor podrá visualizar que se le
Autorizaciones
Autorizó:
Control de cambios
Introducción
Objetivo y Alcances
Diagrama de Implementación
• Auth: API encargada de la creación de los usuarios, así como del control de
acceso de estos a los demás componentes.
Tecnologías: PHP, Curl
• Auth DB: Base de datos la guarda la información del API de Auth, la descripción
de sus tablas se muestra en
Tecnologías: PostgreSQL
• Container Manager: API a cargo de las interacciones del SGS con docker, esto
es la creación y obtención tanto de imágenes como de contenedores.
Tecnologías: Python, Docker SDK, SQLAlchemy
• Container Manager DB: Base de datos del API de Container Manager, guarda la
información correspondiente al dicho servicio. Sus tablas se encuentran descritas
en
Tecnologías: SQLite
• Service Manager: API para el manejo de los servicios contenerizados, esto incluye
sus etapas y bloques de construcción.
Tecnologías: PHP, Curl
• Service Manager DB: Base de datos para almacenar la información del API de
Service Manager, sus tablas se encuentran en 5.3.
Tecnologías: PostgreSQL
• Web App: Aplicación Web con interfaces gráficas que mediante interacción con
el resto de APIs permiten al usuario final hacer uso del SGS.
Tecnologías: HTML, CSS, JavaScript, JQuery, AJAX, Bootstrap, Flow
• Monitoring: Obtiene y preprocesa las métricas que obtiene del agente cAdvisor,
posteriormente envía las métricas al Indexado.
• Web App: Aplicación Web que permite el uso del sistema, así como la
visualización de resultados mediante grafos del estado de los contenedores.
• Tecnologías: HTML, CSS, JavaScript, JQuery, D3.js
Endpoints
Esta sección corresponde a los enpoints disponibles en las APIs del SGS, siendo estas:
Container Manager (a), Services Manager (b) y Deployer (c). La Tabla 1 muestra la
relacio´n que existe entre los componentes, su nombre y puerto mediante los cuales se
puede acceder a ellos en peticiones REST.
Es importante mencionar que tanto las peticiones como las respuestas de las APIs son
en formato JSON. Cada endpoint tiene un recuadro con el método HTTP, la ruta y un
par de estados de respuesta (correcto — incorrecto).
Tabla 11.2.1 Contenedores del SGS y su relación con los nombres de contenedor en Docker
Container Manager
b) Crear usuario
d) Crear contenedor
f) Inspeccionar contenedor
g) Ejecutar contenedor
h) Detener contendor
j) Pausar contenedor
k) Iniciar contenedor
n) Inspeccionar Imagen
o) Cargar Contexto
p) Construir imagen
Service Manager
e) Crear Etapa
f) Modificar etapa
g) Obtener etapas
h) Eliminar etapa
j) Crear servicio
k) Modificar servicio
l) Obtener servicios
m) Eliminar servicio
n) Obtener un servicio
o) Ejecutar servicio
Deployer
a) Desplegar servicio
Esta sección muestra las bases de datos utilizadas en el SGS, siendo estas las
correspondientes a los siguientes componentes: Auth (a), Container Manager (b) y
Service Manager(c).
a) Auth DB
La Figura 12.2 3 muestra las tablas y las relaciones de la base de datos de Auth.
b) Container Manager DB
c) Services Manager DB
La Figura 12.2.5 muestra las tablas y las relaciones de la base de datos de Services
Manager.
d) Instalación
Esta sección describe el proceso de instalación que sirve como guía para desplegar
el sistema, así mismo se mencionan algunos requerimientos con los cuales fue
probado el sistema.
Nota: La instalación de los requerimientos no se cubre en este documento. Para la
instalación
de los mismos favores de referirse a los manuales correspondientes.
e) Requerimientos
o Gutiérrez et. al. Software and hardware architecture for a high-availability PACS. JDI, 2012.
o Quezada et. al n, Babel: The Construction of a Massive Storage System, IJWSR,2016 (JCR) IF .6.
o Khan et. al. (2014). Big data: survey, technologies, opportunities, and challenges. Sci. World J.,
2014.
o 4Alva Espinosa et. al. (2014). El expediente electrónico: resultados de la capacitación para su uso
en un hospital de alta especialidad. GMM, 150(s3), 338-346.
o Morales et. al (2018). A pairing-based cryptographic approach for data security in the cloud. Int.
J. Inf. Secur, 17(4), 441-461.
o Sosa et. al (2020). Improving Performance and Capacity Utilization in Cloud Storage for Content
Delivery and Sharing Services. IEEE T CLOUD COMPUT.
o Sosa et. al, Protecting Data in the Cloud: An Assessment of Practical Digital Envelopes from
Attribute based Encryption, Conference: Special Session on Knowledge Discovery and Cloud
Computing Applications. January 2017.
o Sosa et. al, Protecting Data in the Cloud: An Assessment of Practical Digital Envelopes from
Attribute based Encryption, Conference: Special Session on Knowledge Discovery and Cloud
Computing Applications. January 2017.
o Gonzalez et. al. (2018). Sacbe: A building block approach for constructing efficient and flexible
end-to-end cloud storage. J. Syst. Softw, 135, 143-156.
o Vazquez et. al (2018). CloudChain: A novel distribution model for digital products based on supply
chain principles. IJIM, 39, 90-103.
o Magana et. al, “An Adaptive Cross-Layer Admission Control Mechanism for Telemedicine Services
over the IEEE 802.22/WRAN Standard,” IEICE Trans. Commun., vol. E101.B, no. 4, pp. 1029–1044,
2018, doi: 10.1587/transcom.2017EBP3157
o E. Stevens, L. Antiga, and T. Viehmann, Deep Learning with PyTorch. Manning , 2020.
o O. Ronneberger, P. Fischer, and T. Brox, "U-Net: Convolutional Networks for Biomedical Image
Segmentation," 2015.
o J. Huang, V. Rathod, C. Sun, M. Zhu, A. Korattikara, A. Fathi, I. Fisc her, Z. Wojna, Y. Son g, S.
Guadarrama, and K. Murphy, "Sp eed/accuracy trade-offs for modem convolutional object
detectors," 2017.
o T.-Y. Lin, M. Maire, S. Belongie, L. Bourdev, R. Girshick, J. Hays, P. Perona, D. Ramanan, C. L. Zitnick,
and P. Dollar, "Microsoft COCO: Common Objects in Context," 2015.
o M. G. K. &. F. S. Stanfill, "Health information management best practices for quality health data
during the COVID-19 global pandemic.," Perspectives in health information management, 2020.
o E. R. &. J. H. Berchick, "Data Processing Improvements for Estimates of Health Insurance Coverage
in the Current Population Survey Annual Social and Economic Supplement.," Medical Care
Research and Review, 2021.
o D. D. G.-M. A. G.-C. J. L. V.-R. S. P.-R. A. E. C.-E. D. &. C. J. Sánchez-Gallegos, "On the continuous
processing of health data in edge-fog-cloud computing by using micro/nanoservice
composition," IEEE Access, vol. 8, pp. 120255-120281, 2020.
o M. &. Z. X. Lind, « Functional modelling for fault diagnosis and its application for NPP,» Nuclear
Engineering and Technology,, vol. 46, nº 6, pp. 753-772, 2014.
o B. &. J. J. R. Chandrasekaran, «Function in device representation.,» vol. 16, nº 3-4, pp. 162-177,
2000.
o U. C. F. &. W. H. Yildirim, «Function modeling using the system state,» AI EDAM, vol. 31, nº 4, pp. 413-
435, 2017.
o D. D. &. T. V. M. Guinard, «Building the web of things: with examples in node. js and raspberry pi,»
Simon and Schuster., 2016.