demo_app / app.py
aaditya's picture
Update app.py
b819505 verified
import gradio as gr
import json
from pathlib import Path
def load_json(file_path):
with open(file_path, 'r') as file:
return json.load(file)
def display_data(index, data):
item = data[index]
note = item.get('Note', 'No note available')
summary = item.get('Summary', {})
mcqs = item.get('MCQS', {})
image_path = item.get('image', '')
summary_html = "<h3>Summary</h3>"
if 'chest_xray_summary' in summary:
for topic in summary['chest_xray_summary']:
summary_html += f"<p><strong>{topic['topic']}:</strong> {topic['description']}</p>"
else:
summary_html += "<p>No summary available</p>"
mcqs_html = "<h3>MCQs</h3>"
if isinstance(mcqs, dict) and 'questions' in mcqs:
for i, q in enumerate(mcqs['questions'], 1):
mcqs_html += f"<p><strong>Q{i}: {q['question']}</strong></p>"
mcqs_html += "<ul>"
for option in q['options']:
mcqs_html += f"<li>{option}</li>"
mcqs_html += "</ul>"
mcqs_html += f"<p>Correct Answer: {q['correct_answer']}</p>"
if 'location_in_text' in q:
mcqs_html += f"<p><em>Location in text: {q['location_in_text']}</em></p>"
mcqs_html += "<hr>"
elif isinstance(mcqs, list):
for i, q in enumerate(mcqs, 1):
mcqs_html += f"<p><strong>Q{i}: {q['question']}</strong></p>"
mcqs_html += "<ul>"
for option in q['options']:
mcqs_html += f"<li>{option}</li>"
mcqs_html += "</ul>"
mcqs_html += f"<p>Correct Answer: {q['correct_answer']}</p>"
if 'location_in_text' in q:
mcqs_html += f"<p><em>Location in text: {q['location_in_text']}</em></p>"
mcqs_html += "<hr>"
else:
mcqs_html += "<p>No MCQs available for this item.</p>"
return note, summary_html, mcqs_html, image_path, f"Item {index + 1} of {len(data)}"
def next_item(index, data):
return min(index + 1, len(data) - 1)
def prev_item(index, data):
return max(index - 1, 0)
def create_app(json_path):
data = load_json(json_path)
with gr.Blocks() as app:
gr.Markdown("# Chest X-Ray Analysis Viewer")
with gr.Row():
with gr.Column(scale=1):
image = gr.Image(label="X-Ray Image")
with gr.Column(scale=2):
note = gr.Textbox(label="Note", lines=4)
summary = gr.HTML(label="Summary")
mcqs = gr.HTML(label="MCQs")
index = gr.State(0)
item_count = gr.Textbox(label="Item Count")
with gr.Row():
prev_btn = gr.Button("Previous")
next_btn = gr.Button("Next")
def update_display(index):
return display_data(index, data)
next_btn.click(
next_item,
inputs=[index, gr.State(data)],
outputs=[index]
).then(
update_display,
inputs=[index],
outputs=[note, summary, mcqs, image, item_count]
)
prev_btn.click(
prev_item,
inputs=[index, gr.State(data)],
outputs=[index]
).then(
update_display,
inputs=[index],
outputs=[note, summary, mcqs, image, item_count]
)
app.load(
update_display,
inputs=[index],
outputs=[note, summary, mcqs, image, item_count]
)
return app
json_path = Path("mimic_data.json")
app = create_app(json_path)
app.launch()