ENSAYO COMPUTACIONAL​
​Introducción
El cáncer de mama es una de las principales causas de mortalidad en mujeres a nivel mundial, y Costa Rica no es excepción. Según lo estudiado, la tasa de supervivencia a 5 años es alentadora, pero eso no determina lo crucial que es mejorar el diagnóstico temprano, especialmente para las mujeres en etapas avanzadas de la enfermedad. Inspiradas por esta realidad y por historias cercanas, el equipo Querubium, compuesto por Sulam Fernández, Ariana Montoya y Jimena Rodríguez, decidió asumir el reto de utilizar la tecnología para generar un impacto social positivo. Una de las mayores motivaciones es doña Yanina Barrantes, madre de Ariana, quien venció al cáncer de mama pero debe realizarse mamografías constantes cada seis meses, un recordatorio permanente de la importancia de la vigilancia continua. Además, contaron con la inspiración de Naggay Fernández, hermana de Sulam y radióloga especializada en mama, cuyo trabajo mostró de primera mano la necesidad de herramientas que ayuden a agilizar y reducir errores en las revisiones tempranas, facilitando el invaluable trabajo de los profesionales de la salud. Con el apoyo fundamental del Colegio Científico Norte Norte, y gracias a la mentoría del equipo de Wolfram que guió al equipo desde cero en el aprendizaje de un lenguaje de programación completamente nuevo, se embarcaron en esta misión. El objetivo en este hackathon fue desarrollar un prototipo educativo funcional de un sistema de Detección y Diagnóstico Asistido por Computadora (CADe/x) para el cáncer de mama. Utilizando exclusivamente el Lenguaje Wolfram, Querubium creó un clasificador de inteligencia artificial capaz de analizar imágenes de mamografías para distinguir entre tejido sano y tejido con presencia de cáncer.​
Impacto en el Mundo Real: ¿Cómo podría esta herramienta ayudar a una clínica en el interior de Costa Rica?
Esta herramienta, desplegada en la nube y de acceso público, podría ser de gran ayuda para las clínicas en el interior de Costa Rica de varias maneras concretas:• Serviría como segunda opinión automatizada y accesible, un sistema de apoyo para los profesionales de la salud, permitiéndoles contar con un análisis inicial automatizado que ayude a priorizar casos sospechosos que requieran revisión urgente.• Al automatizar la clasificación inicial de las mamografías, los radiólogos podrían optimizar y reducir los tiempos de revisión, enfocándose en el análisis detallado de los casos más complejos y agilizando el flujo de trabajo diagnóstico.• Muchas clínicas en zonas periféricas carecen de software médico avanzado. Al estar alojada en la nube, esta herramienta ofrece un acceso democratizado a la tecnología pues solo requiere una conexión a Internet, llevando capacidades de inteligencia artificial a lugares con recursos limitados.• El prototipo en sí mismo es una herramienta educativa valiosa, útil para capacitar a técnicos radiólogos y para concientizar a la comunidad sobre la crítica importancia de la detección temprana Este proyecto representa para Querubium la convergencia entre el aprendizaje técnico, la innovación y el profundo deseo de contribuir al bienestar de la sociedad, con el potencial tangible de convertirse en un aliado para salvar vidas mediante un diagnóstico más rápido y accesible en todas las regiones del país.​
Como primer paso, se utiliza SetDirectory para establecer el archivo .nb files donde se encuentran tanto el Notebook como la base de datos de las mamografías.
In[]:=
SetDirectory[NotebookDirectory[]]
Out[]=
C:\Users\gmeyv\Desktop\DECIMO\.nb folder
In[]:=
Directory[]
Out[]=
C:\Users\gmeyv\Desktop\DECIMO\.nb folder
Construye la ruta completa a la carpeta “BCID” que contiene las imágenes y devuelve la ruta completa a la carpeta de imágenes
In[]:=
bcidImagesFolder=Directory[]<>"\BCID"
Out[]=
C:\Users\gmeyv\Desktop\DECIMO\.nb folder\BCID
Busca todos los archivos JPG en la carpeta BCID y sus subcarpetas.
In[]:=
bcidImages=FileNames["*jpg",bcidImagesFolder,Infinity]
Out[]=
{C:\Users\gmeyv\Desktop\DECIMO\.nb folder\BCID\jpeg\1.3.6.1.4.1.9590.100.1.2.100018879311824535125115145152454291132\1-263.jpg,C:\Users\gmeyv\Desktop\DECIMO\.nb folder\BCID\jpeg\1.3.6.1.4.1.9590.100.1.2.100018879311824535125115145152454291132\2-241.jpg,C:\Users\gmeyv\Desktop\DECIMO\.nb folder\BCID\jpeg\1.3.6.1.4.1.9590.100.1.2.100131208110604806117271735422083351547\1-126.jpg,C:\Users\gmeyv\Desktop\DECIMO\.nb folder\BCID\jpeg\1.3.6.1.4.1.9590.100.1.2.100522099512256189513864912954167862869\1-231.jpg,C:\Users\gmeyv\Desktop\DECIMO\.nb folder\BCID\jpeg\1.3.6.1.4.1.9590.100.1.2.100522676511025180541602449080267145647\1-111.jpg,C:\Users\gmeyv\Desktop\DECIMO\.nb folder\BCID\jpeg\1.3.6.1.4.1.9590.100.1.2.10055294210766234140934516480682841962\1-031.jpg,
⋯10225⋯
,C:\Users\gmeyv\Desktop\DECIMO\.nb folder\BCID\jpeg\1.3.6.1.4.1.9590.100.1.2.99617316010522989842538197780963621601\2-268.jpg,C:\Users\gmeyv\Desktop\DECIMO\.nb folder\BCID\jpeg\1.3.6.1.4.1.9590.100.1.2.99652509111900105331025325421855924911\1-156.jpg,C:\Users\gmeyv\Desktop\DECIMO\.nb folder\BCID\jpeg\1.3.6.1.4.1.9590.100.1.2.99750660712463840925228822324256611547\1-113.jpg,C:\Users\gmeyv\Desktop\DECIMO\.nb folder\BCID\jpeg\1.3.6.1.4.1.9590.100.1.2.99849561512168290821756942242329439660\1-251.jpg,C:\Users\gmeyv\Desktop\DECIMO\.nb folder\BCID\jpeg\1.3.6.1.4.1.9590.100.1.2.99933945612504876136587449881888946699\1-207.jpg,C:\Users\gmeyv\Desktop\DECIMO\.nb folder\BCID\jpeg\1.3.6.1.4.1.9590.100.1.2.99933945612504876136587449881888946699\2-208.jpg}
Full expression not available
(
original memory size:
1.6 MB)
Divide entre las carpetas de no cáncer y con cáncer
In[]:=
examNoCancer="Mammogram Mastery A Robust Dataset for Breast Cancer Detection and Medical Education\Breast Cancer Dataset\Original Dataset\Non-Cancer";​​examCancer="Mammogram Mastery A Robust Dataset for Breast Cancer Detection and Medical Education\Breast Cancer Dataset\Original Dataset\Cancer";
In[]:=
examImagesNoCancer=FileNames["*jpg",examNoCancer,Infinity];​​examImagesCancer=FileNames["*jpg",examCancer,Infinity];
In[]:=
Length[examImagesNoCancer]​​Length[examImagesCancer]
Out[]=
620
Out[]=
125
Aquí se utiliza la función Manipulate para crear una lista que recorra cadenas con rutas de las imágenes presentes en el folder bcid
In[]:=
Manipulate[​​Column[{n,​​bcidImages[[n]],​​Image[Import[bcidImages[[n]]],ImageSize->Small]}],​​{n,1,Length[bcidImages],1},​​SaveDefinitions->True]
Out[]=
​
n
1
C:\Users\gmeyv\Desktop\DECIMO\.nb folder\BCID\jpeg\1.3.6.1.4.1.9590.100.1.2.100018879311824535125115145152454291132\1-263.jpg
Image[$Failed,ImageSizeSmall]
In[]:=
Manipulate[​​Column[{n,​​examImagesNoCancer[[n]],​​Image[Import[examImagesNoCancer[[n]]],ImageSize->Small]}],​​{n,1,Length[examImagesNoCancer],1},​​SaveDefinitions->True]
Out[]=
​
n
1
Mammogram Mastery A Robust Dataset for Breast Cancer Detection and Medical Education\Breast Cancer Dataset\Original Dataset\Non-Cancer\IMG (100).jpg
Image[$Failed,ImageSizeSmall]
In[]:=
Manipulate[​​Column[{n,​​examImagesCancer[[n]],​​Image[Import[examImagesCancer[[n]]],ImageSize->Small]}],​​{n,1,Length[examImagesCancer],1},​​SaveDefinitions->True]
Out[]=
​
n
1
Mammogram Mastery A Robust Dataset for Breast Cancer Detection and Medical Education\Breast Cancer Dataset\Original Dataset\Cancer\IMG (100).jpg
Image[$Failed,ImageSizeSmall]
Se importa una cantidad específicas (120) de imágenes pertenecientes al folder de cáncer de manera aleatoria con ayuda de RandomSampler , además se utiliza Short para comprimir el output
In[]:=
nn=Short[RandomSample[examImagesCancer,100]]​​Information[Import[First[%]]]
Out[]//Short=
{Mammogram Mastery A Robust Dataset for Breast Cancer Detection and Medical Education\Breast Cancer Dataset\Original Dataset\Cancer\IMG (6).jpg,98,Mammogram Mastery A Robust Dataset for Breast Cancer Detection and M…Education\Breast Cancer Dataset\Original Dataset\Cancer\IMG (22).jpg}
Out[]=
Image
Color Space
RGB
Image Dimensions
{1920,1080}
Image Resolution
Automatic
Channels
3
Interleaving
True
Transparency
False
Data Type
Byte
Se importa una cantidad específicas (620) de imágenes pertenecientes al folder de no cáncer de manera aleatoria con ayuda de RandomSampler , igualmente se utiliza Short para comprimir el output.
Carga y pre-procesa imágenes médicas para entrenar un clasificador que convierte imágenes a 600px y escala de grises y entrena un modelo de clasificación para que el programa pueda diferenciar entre las imágenes con cáncer y sin cáncer
Esta parte es de verificación, con medir la longitud de cada uno se confirma que está bien establecido y que sí lee todos los archivos de cada carpeta, por lo que devuelve el número de imágenes que se importaron.
Aquí se define un método que entrena un clasificador de imágenes médicas
Con el Information se pueden apreciar los datos de dicho método y a su vez verificar el nivel de certeza del mismo.
Se exporta a la nube el método de clasificación
Ahora se importa una imagen para su posterior análisis con ayuda de los métodos que anteriormente entrenaron al programa en clasificación de cáncer.
Se define un conjunto de imágenes
Crea la opción de detectar puntos blancos en las imágenes, así se facilita el identificar la presencia de cáncer
En este sector se evalúa dicha función con las imágenes importadas
Se puede evaluar también con cualquier otra imagen de la interfaz
A continuación se definen las funciones para que el programa resalte los puntos blancos en las imágenes de mamografías.
En esta sección un formulario web en la nube para diagnóstico de cáncer de mama que recibe imágenes de mamografías como entrada, usa el clasificador pre-entrenado “cancerClassifier y devuelve diagnóstico automático (Cancer/NoCancer)
Define una función para diagnóstico de mamografías con IA y crea un formulario web, esta carga el modelo “cancerClassifier” desde la nube, también pre procesa la imagen (redimensiona a 600px, escala de grises), obtiene probabilidades de diagnóstico (Cancer/NoCancer)
y genera reporte visual con imagen, gráfico circular y detalles del modelo.
Conclusión