Spaces:
Sleeping
Sleeping
refactor: polish
Browse files- README.md +14 -3
- app.py +73 -3
- requirements.txt +3 -3
README.md
CHANGED
@@ -1,3 +1,14 @@
|
|
1 |
-
|
2 |
-
|
3 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
---
|
2 |
+
title: Alfred
|
3 |
+
emoji: 💬
|
4 |
+
colorFrom: yellow
|
5 |
+
colorTo: purple
|
6 |
+
sdk: gradio
|
7 |
+
sdk_version: 5.0.1
|
8 |
+
app_file: app.py
|
9 |
+
pinned: false
|
10 |
+
license: apache-2.0
|
11 |
+
short_description: Alfred Demo
|
12 |
+
---
|
13 |
+
|
14 |
+
An example chatbot using [Gradio](https://gradio.app), [`huggingface_hub`](https://huggingface.co/docs/huggingface_hub/v0.22.2/en/index), and the [Hugging Face Inference API](https://huggingface.co/docs/api-inference/index).
|
app.py
CHANGED
@@ -1,3 +1,73 @@
|
|
1 |
-
|
2 |
-
|
3 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
from io import BytesIO
|
2 |
+
import gradio as gr
|
3 |
+
import pandas as pd
|
4 |
+
import requests
|
5 |
+
from matplotlib.image import imread
|
6 |
+
|
7 |
+
|
8 |
+
ALFRED_URL = "http://192.168.1.202:8090"
|
9 |
+
|
10 |
+
selected_columns = ["ecg_id", "patient_id", "age", "sex", "scp_codes", "report"]
|
11 |
+
ptbxl_df = pd.read_csv("./res/ptbxl_database.csv")
|
12 |
+
ptbxl_df = ptbxl_df[selected_columns]
|
13 |
+
|
14 |
+
|
15 |
+
def get_ecg_id_from_dataframe(df: pd.DataFrame, evt: gr.SelectData):
|
16 |
+
return evt.row_value[0]
|
17 |
+
|
18 |
+
|
19 |
+
def get_ecg_image_from_dataframe(ecg_id):
|
20 |
+
response = requests.post(
|
21 |
+
f"{ALFRED_URL}/hf_demo/ptbxl_to_image",
|
22 |
+
params={"ecg_id": ecg_id},
|
23 |
+
)
|
24 |
+
response.raise_for_status()
|
25 |
+
return imread(BytesIO(response.content))
|
26 |
+
|
27 |
+
|
28 |
+
def get_alfred_from_dataframe(ecg_id):
|
29 |
+
response = requests.post(
|
30 |
+
f"{ALFRED_URL}/hf_demo/alfred",
|
31 |
+
params={"ecg_id": ecg_id},
|
32 |
+
)
|
33 |
+
response.raise_for_status()
|
34 |
+
return response.json()
|
35 |
+
|
36 |
+
|
37 |
+
with gr.Blocks() as demo:
|
38 |
+
with gr.Tab("Example"):
|
39 |
+
with gr.Row():
|
40 |
+
gr_df = gr.Image(
|
41 |
+
value="./res/example.png",
|
42 |
+
interactive=False,
|
43 |
+
type="filepath",
|
44 |
+
label="This is an example screen. The service is not fully operational yet due to DNS issues. Please wait a moment.",
|
45 |
+
)
|
46 |
+
|
47 |
+
with gr.Tab("Coming Soon"):
|
48 |
+
with gr.Row():
|
49 |
+
gr_df = gr.Dataframe(
|
50 |
+
value=ptbxl_df,
|
51 |
+
interactive=False,
|
52 |
+
max_height=200,
|
53 |
+
label="All PTB-XL v1.3.0 data (https://physionet.org/content/ptb-xl/1.0.3/ptbxl_database.csv). You can refer to the following URL(https://physionet.org/content/ptb-xl/1.0.3/scp_statements.csv) to understand what 'scp_codes' represent.",
|
54 |
+
)
|
55 |
+
|
56 |
+
with gr.Row():
|
57 |
+
ecg_id_output = gr.Textbox(label="The selected ecg_id is")
|
58 |
+
|
59 |
+
with gr.Row():
|
60 |
+
ecg_viewer = gr.Image(interactive=False, label="The selected ecg is")
|
61 |
+
|
62 |
+
with gr.Row():
|
63 |
+
alfred_result = gr.JSON(value={}, label="Alfred said that")
|
64 |
+
|
65 |
+
gr_df.select(fn=get_ecg_id_from_dataframe, inputs=gr_df, outputs=ecg_id_output)
|
66 |
+
ecg_id_output.change(
|
67 |
+
fn=get_ecg_image_from_dataframe, inputs=ecg_id_output, outputs=ecg_viewer
|
68 |
+
)
|
69 |
+
ecg_id_output.change(
|
70 |
+
fn=get_alfred_from_dataframe, inputs=ecg_id_output, outputs=alfred_result
|
71 |
+
)
|
72 |
+
|
73 |
+
demo.launch()
|
requirements.txt
CHANGED
@@ -1,3 +1,3 @@
|
|
1 |
-
|
2 |
-
|
3 |
-
|
|
|
1 |
+
huggingface_hub==0.25.2
|
2 |
+
gradio==5.8.0
|
3 |
+
matplotlib==3.9.3
|