RadiXGPT_ / app.py
Singularity666's picture
Update app.py
83eab98
raw
history blame
3.37 kB
import streamlit as st
from PIL import Image
import numpy as np
import main
import pandas as pd
import cv2
def get_image_np(uploaded_file):
image = Image.open(uploaded_file)
return np.array(image)
def show_predicted_caption(image_np, top_k=1):
image = cv2.cvtColor(image_np, cv2.COLOR_RGB2BGR)
captions = predict_caption(image, model, text_embeddings, valid_df['caption'].values, n=top_k)
return captions
# Load the model and text embeddings
valid_df = pd.read_csv('testing_df.csv')
model, text_embeddings = main.get_text_embeddings(valid_df)
# App code
st.title("Medical Radiology Report Generator")
st.header("Personal Information")
first_name = st.text_input("First Name", "John")
last_name = st.text_input("Last Name", "Doe")
age = st.number_input("Age", min_value=0, max_value=120, value=25, step=1)
gender = st.selectbox("Gender", ["Male", "Female", "Other"])
st.write("Upload Scan to get Radiological Report:")
uploaded_file = st.file_uploader("Choose an image...", type=["jpg", "png", "jpeg"])
if uploaded_file is not None:
image = Image.open(uploaded_file)
st.image(image, caption="Uploaded Image", use_column_width=True)
st.write("")
if st.button("Generate Caption"):
with st.spinner("Generating caption..."):
image_np = np.array(image)
caption = show_predicted_caption(image_np)[0]
st.success(f"Caption: {caption}")
# Generate the radiology report
radiology_report = generate_radiology_report(f"Write Complete Radiology Report for this: {caption}")
# Add personal information to the radiology report
radiology_report_with_personal_info = f"Patient Name: {first_name} {last_name}\nAge: {age}\nGender: {gender}\n\n{radiology_report}"
container = st.container()
with container:
st.header("Radiology Report")
st.write(radiology_report_with_personal_info)
st.markdown(download_link(save_as_docx(radiology_report_with_personal_info, "radiology_report.docx"), "radiology_report.docx", "Download Report as DOCX"), unsafe_allow_html=True)
# Advanced Feedback System
st.header("Advanced Feedback System")
feedback_options = ["Better", "Satisfied", "Worse"]
feedback = st.radio("Rate the generated report:", feedback_options)
top_k = 1
while feedback == "Worse":
top_k += 1
with st.spinner("Regenerating report..."):
new_caption = show_predicted_caption(image_np, top_k=top_k)[-1]
radiology_report = generate_radiology_report(f"Write Complete Radiology Report for this: {new_caption}")
radiology_report_with_personal_info = f"Patient Name: {first_name} {last_name}\nAge: {age}\nGender: {gender}\n\n{radiology_report}"
with container:
container.empty()
st.header("Radiology Report")
st.write(radiology_report_with_personal_info)
st.markdown(download_link(save_as_docx(radiology_report_with_personal_info, "radiology_report.docx"), "radiology_report.docx", "Download Report as DOCX"), unsafe_allow_html=True)
feedback = st.radio("Rate the generated report:", feedback_options)