Spaces:
Paused
Paused
| import streamlit as st | |
| import time | |
| from diffusers import DiffusionPipeline | |
| import matplotlib.pyplot as plt | |
| import torch | |
| if 'button_clicked' not in st.session_state: | |
| st.session_state.button_clicked = False | |
| # Define a function to handle the button click | |
| def on_button_click(): | |
| st.session_state.button_clicked = True | |
| modalities = [ | |
| "COMPUTED TOMOGRAPHY (CT)", "DIGITAL BREAST TOMOSYNTHESIS", "DIGITAL MAMMOGRAPHY", | |
| "MAGNETIC RESONANCE IMAGING (MRI)", "MICRO-CT", "PET-CT", | |
| "POSITRON EMISSION TOMOGRAPHY (PET)", "RADIOGRAPHY", "ULTRASONOGRAPHY" | |
| ] | |
| modalities = [i.lower() for i in modalities] | |
| organs = [ | |
| "ANUS", "AORTA", "BLADDER", "BONE", "BRAIN", "BREAST", "CERVIX", "CHEST", "COLON", | |
| "CORONARY HEART", "EAR", "ENDOMETRIUM", "ESOPHAGUS", "HEAD AND NECK", "KIDNEY", "LIVER", | |
| "LUNG", "LYMPH NODE", "OVARY", "PANCREAS", "PELVIS", "PERIPHERAL ARTERIAL", "PHANTOM", | |
| "PROSTATE", "RECTUM", "SOFT TISSUES", "UTERUS" | |
| ] | |
| organs = [i.lower() for i in organs] | |
| artists = [ | |
| "Leonardo da Vinci", "Vincent van Gogh", "Pablo Picasso", "Claude Monet", "Rembrandt", | |
| "Michelangelo", "Raphael", "Henri Matisse", "Paul Cezanne", "Gustav Klimt", | |
| "Jackson Pollock", "Edgar Degas", "Francisco Goya", "Edouard Manet", "Andy Warhol", | |
| "Salvador Dal铆", "Wassily Kandinsky", "Paul Gauguin", "Joan Mir贸", "Georges Seurat", | |
| "脡douard Vuillard", "Marc Chagall", "Kazimir Malevich", "Piet Mondrian", "Jean-Michel Basquiat", | |
| "Frida Kahlo", "Artemisia Gentileschi", "Caravaggio", "El Greco", "Eug猫ne Delacroix", | |
| "J.M.W. Turner" | |
| ] | |
| st.markdown("<div style=\"text-align: center;\"> <img src=\"https://www.deeptracetech.com/images/graphical-verbose-logo-inline.png\" alt=\"DeepTrace Technologies logo\" width=\"208\" height=\"100\"></div>", | |
| unsafe_allow_html=True) | |
| st.markdown("<h1 style='text-align: center;'>Paint your medical image as a great master would!</h1>", unsafe_allow_html=True) | |
| #st.title("Paint your medical image as a great master would!") | |
| organ = st.selectbox('Organ', organs, index=None) | |
| modality = st.selectbox('Modality', modalities, index=None) | |
| style = st.selectbox('Style', artists, index=None) | |
| image_descriptions = { | |
| "COMPUTED TOMOGRAPHY (CT)": "CT scan", | |
| "DIGITAL BREAST TOMOSYNTHESIS": "3D breast tomosynthesis image", | |
| "DIGITAL MAMMOGRAPHY": "digital mammography image", | |
| "MAGNETIC RESONANCE IMAGING (MRI)": "MRI scan", | |
| "MICRO-CT": "micro-CT scan", | |
| "PET-CT": "PET-CT scan", | |
| "POSITRON EMISSION TOMOGRAPHY (PET)": "PET scan", | |
| "RADIOGRAPHY": "radiography image", | |
| "ULTRASONOGRAPHY": "ultrasonography image" | |
| } | |
| organ_descriptions = { | |
| "ANUS": "of the anus, focusing on musculature and surrounding tissues", | |
| "AORTA": "of the aorta, capturing the main artery and branches", | |
| "BLADDER": "of the bladder, emphasizing its structure", | |
| "BONE": "of the bone, showcasing its structure", | |
| "BRAIN": "of the brain, highlighting its structures", | |
| "BREAST": "of the breast, focusing on its anatomy", | |
| "CERVIX": "of the cervix, capturing its features", | |
| "CHEST": "of the chest, showcasing thoracic cavity", | |
| "COLON": "of the colon, emphasizing its structure", | |
| "CORONARY HEART": "of the coronary heart, highlighting coronary arteries", | |
| "EAR": "of the ear, focusing on outer, middle, and inner ear", | |
| "ENDOMETRIUM": "of the endometrium, highlighting uterine lining", | |
| "ESOPHAGUS": "of the esophagus, emphasizing its structure", | |
| "HEAD AND NECK": "of the head and neck, showcasing anatomical structures", | |
| "KIDNEY": "of the kidney, focusing on internal structure", | |
| "LIVER": "of the liver, highlighting its lobes", | |
| "LUNG": "of the lung, showcasing respiratory anatomy", | |
| "LYMPH NODE": "of the lymph node, emphasizing anatomical features", | |
| "OVARY": "of the ovary, highlighting internal structures", | |
| "PANCREAS": "of the pancreas, showcasing its structure", | |
| "PELVIS": "of the pelvis, focusing on bone structure", | |
| "PERIPHERAL ARTERIAL": "of the peripheral arterial system, highlighting vascular structures", | |
| "PHANTOM": "of a phantom, focusing on simulated features", | |
| "PROSTATE": "of the prostate, emphasizing its structure", | |
| "RECTUM": "of the rectum, highlighting its anatomy", | |
| "SOFT TISSUES": "of the soft tissues, showcasing detailed anatomy", | |
| "UTERUS": "of the uterus, emphasizing its structure" | |
| } | |
| if organ != None: | |
| organ_description = organ_descriptions[organ.upper()] | |
| if modality != None: | |
| image_description = image_descriptions[modality.upper()] | |
| artist_prompts = { | |
| "Leonardo da Vinci": "Generate a detailed {image_description} {organ_description} in the style of Leonardo da Vinci. Emphasize anatomical precision with Renaissance aesthetics.", | |
| "Vincent van Gogh": "Create a {image_description} {organ_description} in the style of Vincent van Gogh. Use bold brushstrokes and vibrant colors.", | |
| "Pablo Picasso": "Produce a {image_description} {organ_description} in the style of Pablo Picasso. Use cubist elements and abstract shapes.", | |
| "Claude Monet": "Generate a {image_description} {organ_description} in the style of Claude Monet. Use soft colors and diffused light.", | |
| "Rembrandt": "Create a {image_description} {organ_description} in the style of Rembrandt. Emphasize dramatic lighting and contrasts.", | |
| "Michelangelo": "Produce a {image_description} {organ_description} in the style of Michelangelo. Emphasize anatomical detail and sculptural quality.", | |
| "Raphael": "Generate an accurate {image_description} {organ_description} in the style of Raphael. Use harmonious compositions and delicate lines.", | |
| "Henri Matisse": "Create a {image_description} {organ_description} in the style of Henri Matisse. Use bold colors and simplified forms.", | |
| "Paul Cezanne": "Produce a {image_description} {organ_description} in the style of Paul Cezanne. Use geometric simplification and structured forms.", | |
| "Gustav Klimt": "Generate a {image_description} {organ_description} in the style of Gustav Klimt. Incorporate intricate patterns and a decorative quality.", | |
| "Jackson Pollock": "Create a {image_description} {organ_description} in the style of Jackson Pollock. Use energetic splatters and abstract layers.", | |
| "Edgar Degas": "Produce a {image_description} {organ_description} in the style of Edgar Degas. Use soft pastels and delicate lines.", | |
| "Francisco Goya": "Generate a {image_description} {organ_description} in the style of Francisco Goya. Emphasize strong contrasts and a somber tone.", | |
| "Edouard Manet": "Create a {image_description} {organ_description} in the style of Edouard Manet. Use loose brushstrokes and focus on light and shadow.", | |
| "Andy Warhol": "Produce a {image_description} {organ_description} in the style of Andy Warhol. Use bright colors and a graphic aesthetic.", | |
| "Salvador Dal铆": "Generate a {image_description} {organ_description} in the style of Salvador Dal铆. Incorporate surreal elements and distorted forms.", | |
| "Wassily Kandinsky": "Create a {image_description} {organ_description} in the style of Wassily Kandinsky. Use vibrant colors and geometric shapes.", | |
| "Paul Gauguin": "Produce a {image_description} {organ_description} in the style of Paul Gauguin. Use bold colors and strong outlines.", | |
| "Joan Mir贸": "Generate a {image_description} {organ_description} in the style of Joan Mir贸. Use playful shapes and bright colors.", | |
| "Georges Seurat": "Create an accurate {image_description} {organ_description} in the style of Georges Seurat. Use pointillism with tiny dots of color.", | |
| "脡douard Vuillard": "Produce a {image_description} {organ_description} in the style of 脡douard Vuillard. Use soft colors and intricate patterns.", | |
| "Marc Chagall": "Generate a {image_description} {organ_description} in the style of Marc Chagall. Use rich colors and fantastical elements.", | |
| "Kazimir Malevich": "Create an accurate {image_description} {organ_description} in the style of Kazimir Malevich. Use geometric shapes and minimalism.", | |
| "Piet Mondrian": "Produce a {image_description} {organ_description} in the style of Piet Mondrian. Use clean lines and primary colors.", | |
| "Jean-Michel Basquiat": "Generate a {image_description} {organ_description} in the style of Jean-Michel Basquiat. Use bold lines and graffiti elements.", | |
| "Frida Kahlo": "Create an accurate {image_description} {organ_description} in the style of Frida Kahlo. Use rich colors and symbolic elements.", | |
| "Artemisia Gentileschi": "Produce a {image_description} {organ_description} in the style of Artemisia Gentileschi. Use strong contrasts and rich colors.", | |
| "Caravaggio": "Generate a {image_description} {organ_description} in the style of Caravaggio. Use dramatic lighting and meticulous detail.", | |
| "El Greco": "Create a {image_description} {organ_description} in the style of El Greco. Use elongated forms and dramatic color.", | |
| "Eug猫ne Delacroix": "Produce a {image_description} {organ_description} in the style of Eug猫ne Delacroix. Use vivid colors and energetic brushstrokes.", | |
| "J.M.W. Turner": "Generate a {image_description} {organ_description} in the style of J.M.W. Turner. Use soft light and swirling colors." | |
| } | |
| combined_prompts = {artist: prompt.replace("{image_description}", "{image_description}").replace("{organ_description}", "{organ_description}") | |
| for artist, prompt in artist_prompts.items()} | |
| prompt_lst = [organ, modality, style] | |
| if None not in prompt_lst: | |
| st.session_state.button_disabled = False | |
| else: | |
| st.session_state.button_disabled = True | |
| if st.session_state.button_clicked: | |
| st.session_state.button_disabled = True | |
| st.session_state.button_clicked = False | |
| st.button('Submit', disabled=st.session_state.button_disabled) | |
| with st.spinner('Processing...'): | |
| print(prompt_lst) | |
| prompt = combined_prompts[style].format(image_description=image_description, organ_description=organ_description) | |
| print(prompt) | |
| pipe = DiffusionPipeline.from_pretrained("stabilityai/stable-diffusion-xl-base-1.0", torch_dtype=torch.float16, variant="fp16") | |
| pipe.to("cuda") | |
| image = pipe(prompt=prompt).images[0] | |
| st.image(image) | |
| st.session_state.button_disabled = False | |
| else: | |
| st.button('Submit', on_click=on_button_click, disabled=st.session_state.button_disabled) |