Spaces:
Sleeping
Sleeping
Milo Sobral
commited on
Commit
·
95e2338
1
Parent(s):
86081f4
Added a table tyo summarize output
Browse files- portiloop/src/demo/demo.py +4 -2
- portiloop/src/demo/offline.py +8 -2
- portiloop/src/demo/utils.py +19 -0
portiloop/src/demo/demo.py
CHANGED
@@ -33,7 +33,9 @@ def main():
|
|
33 |
# Frequency
|
34 |
freq = gr.Dropdown(choices=["100", "200", "250", "256", "500", "512", "1000", "1024"], value="250", label="Sampling Frequency (Hz)", interactive=True)
|
35 |
|
36 |
-
|
|
|
|
|
37 |
|
38 |
run_inference = gr.Button(value="Run Inference")
|
39 |
run_inference.click(
|
@@ -44,7 +46,7 @@ def main():
|
|
44 |
threshold,
|
45 |
detect_channel,
|
46 |
freq],
|
47 |
-
outputs=[output_array])
|
48 |
|
49 |
demo.queue()
|
50 |
demo.launch(share=False)
|
|
|
33 |
# Frequency
|
34 |
freq = gr.Dropdown(choices=["100", "200", "250", "256", "500", "512", "1000", "1024"], value="250", label="Sampling Frequency (Hz)", interactive=True)
|
35 |
|
36 |
+
with gr.Row():
|
37 |
+
output_array = gr.File(label="Output CSV File")
|
38 |
+
output_table = gr.Markdown(label="Output Table")
|
39 |
|
40 |
run_inference = gr.Button(value="Run Inference")
|
41 |
run_inference.click(
|
|
|
46 |
threshold,
|
47 |
detect_channel,
|
48 |
freq],
|
49 |
+
outputs=[output_array, output_table])
|
50 |
|
51 |
demo.queue()
|
52 |
demo.launch(share=False)
|
portiloop/src/demo/offline.py
CHANGED
@@ -3,7 +3,7 @@ import numpy as np
|
|
3 |
from portiloop.src.detection import SleepSpindleRealTimeDetector
|
4 |
plt.switch_backend('agg')
|
5 |
from portiloop.src.processing import FilterPipeline
|
6 |
-
from portiloop.src.demo.utils import xdf2array, offline_detect, offline_filter, OfflineSleepSpindleRealTimeStimulator
|
7 |
import gradio as gr
|
8 |
|
9 |
|
@@ -115,6 +115,12 @@ def run_offline(xdf_file, detect_filter_opts, threshold, channel_num, freq):
|
|
115 |
print("Saving output...")
|
116 |
# Output the data to a csv file
|
117 |
np.savetxt("output.csv", data_whole, delimiter=",", header=",".join(columns), comments="")
|
|
|
|
|
|
|
|
|
|
|
|
|
118 |
|
119 |
print("Done!")
|
120 |
-
return "output.csv"
|
|
|
3 |
from portiloop.src.detection import SleepSpindleRealTimeDetector
|
4 |
plt.switch_backend('agg')
|
5 |
from portiloop.src.processing import FilterPipeline
|
6 |
+
from portiloop.src.demo.utils import compute_output_table, xdf2array, offline_detect, offline_filter, OfflineSleepSpindleRealTimeStimulator
|
7 |
import gradio as gr
|
8 |
|
9 |
|
|
|
115 |
print("Saving output...")
|
116 |
# Output the data to a csv file
|
117 |
np.savetxt("output.csv", data_whole, delimiter=",", header=",".join(columns), comments="")
|
118 |
+
|
119 |
+
|
120 |
+
output_table = compute_output_table(
|
121 |
+
data_whole[:, columns.index("online_stimulations")] if online_detection else data_whole[:, columns.index("online_stimulations_portiloop")],
|
122 |
+
data_whole[:, columns.index("lacourse_spindles")] if lacourse else None,
|
123 |
+
data_whole[:, columns.index("wamsley_spindles")] if wamsley else None,)
|
124 |
|
125 |
print("Done!")
|
126 |
+
return "output.csv", output_table
|
portiloop/src/demo/utils.py
CHANGED
@@ -130,3 +130,22 @@ def offline_filter(signal, freq):
|
|
130 |
signal = detrend(signal)
|
131 |
|
132 |
return signal
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
130 |
signal = detrend(signal)
|
131 |
|
132 |
return signal
|
133 |
+
|
134 |
+
def compute_output_table(online_stimulation, lacourse_spindles, wamsley_spindles):
|
135 |
+
# Count the number of spindles detected by each method
|
136 |
+
online_stimulation_count = np.sum(online_stimulation)
|
137 |
+
lacourse_spindles_count = sum([1 for index, spindle in enumerate(lacourse_spindles) if spindle == 1 and lacourse_spindles[index - 1] == 0])
|
138 |
+
wamsley_spindles_count = sum([1 for index, spindle in enumerate(wamsley_spindles) if spindle == 1 and wamsley_spindles[index - 1] == 0])
|
139 |
+
|
140 |
+
# Count how many spindles were detected by both online and lacourse
|
141 |
+
both_online_lacourse = sum([1 for index, spindle in enumerate(online_stimulation) if spindle == 1 and lacourse_spindles[index] == 1])
|
142 |
+
# Count how many spindles were detected by both online and wamsley
|
143 |
+
both_online_wamsley = sum([1 for index, spindle in enumerate(online_stimulation) if spindle == 1 and wamsley_spindles[index] == 1])
|
144 |
+
|
145 |
+
# Create markdown table with the results
|
146 |
+
table = "| Method | Detected spindles | Overlap with Portiloop |\n"
|
147 |
+
table += "| --- | --- | --- |\n"
|
148 |
+
table += f"| Online | {online_stimulation_count} | {online_stimulation_count} |\n"
|
149 |
+
table += f"| Lacourse | {lacourse_spindles_count} | {both_online_lacourse} |\n"
|
150 |
+
table += f"| Wamsley | {wamsley_spindles_count} | {both_online_wamsley} |\n"
|
151 |
+
return table
|