Spaces:
Sleeping
Sleeping
devjas1
commited on
Commit
·
82ba161
1
Parent(s):
6598986
(DEPLOY): unignore outputs/*.pth on space-deploy; continue ignoring output/logs
Browse files- .gitignore +3 -33
- dashboard/app.py +0 -171
.gitignore
CHANGED
@@ -1,8 +1,6 @@
|
|
1 |
# Ignore raw data and system clutter
|
2 |
|
3 |
-
data
|
4 |
datasets/
|
5 |
-
depracated_scripts/
|
6 |
__pycache__/
|
7 |
*.pyc
|
8 |
.DS_store
|
@@ -12,43 +10,15 @@ __pycache__/
|
|
12 |
*.env
|
13 |
*.yml
|
14 |
*.json
|
15 |
-
environment.yml
|
16 |
-
test_env/
|
17 |
-
_frozen_reference.txt
|
18 |
-
|
19 |
-
_venv_docker_test/
|
20 |
-
|
21 |
.streamlit
|
22 |
-
logs/
|
23 |
-
docs/scope_maintenance_log.yaml
|
24 |
-
depracated_script/ftir_cv_diagnostics_run1.json
|
25 |
-
depracated_script/ftir_cv_diagnostics.json
|
26 |
-
depracated_script/ftir_model.pth
|
27 |
-
depracated_script/plot_ftir_sample.py
|
28 |
-
depracated_script/preprocess_ftir_legacy.py
|
29 |
-
depracated_script/preprocess_ftir.py
|
30 |
-
depracated_script/train_ftir_model_cv.py
|
31 |
-
depracated_script/train_ftir_model.py
|
32 |
-
depracated_script/train_model.py
|
33 |
-
depracated_script/cnn_model.py
|
34 |
-
models/cnn_model.py
|
35 |
-
outputs\inference\test_prediction.json
|
36 |
-
outputs\figure2_model.pth
|
37 |
-
outputs\resnet_model.pth
|
38 |
-
outputs\saliency
|
39 |
-
outputs/plots/04_raman_diagnostics.ipynb
|
40 |
-
outputs/figure2_model.pth
|
41 |
-
outputs/inference/test_prediction.json
|
42 |
docs/PROJECT_REPORT.md
|
43 |
wea-*.txt
|
44 |
sta-*.txt
|
45 |
-
|
46 |
-
scripts/compare_samples.py
|
47 |
# --- Data (keep folder, ignore files) ---
|
48 |
datasets/**
|
49 |
!datasets/.gitkeep
|
50 |
!datasets/.README.md
|
51 |
# ---------------------------------------
|
52 |
-
|
53 |
-
requirements_0.txt
|
54 |
-
requirements.txt
|
|
|
1 |
# Ignore raw data and system clutter
|
2 |
|
|
|
3 |
datasets/
|
|
|
4 |
__pycache__/
|
5 |
*.pyc
|
6 |
.DS_store
|
|
|
10 |
*.env
|
11 |
*.yml
|
12 |
*.json
|
|
|
|
|
|
|
|
|
|
|
|
|
13 |
.streamlit
|
14 |
+
outputs/logs/
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
15 |
docs/PROJECT_REPORT.md
|
16 |
wea-*.txt
|
17 |
sta-*.txt
|
18 |
+
|
|
|
19 |
# --- Data (keep folder, ignore files) ---
|
20 |
datasets/**
|
21 |
!datasets/.gitkeep
|
22 |
!datasets/.README.md
|
23 |
# ---------------------------------------
|
24 |
+
|
|
|
|
dashboard/app.py
DELETED
@@ -1,171 +0,0 @@
|
|
1 |
-
"""
|
2 |
-
Streamlit UI for ml-polymer-recycling — Step 3b: Raman Upload → Parse → Preview
|
3 |
-
- Adds real file uploader to Raman Inference page
|
4 |
-
- Accepts .txt Raman spectra (single or batch)
|
5 |
-
- Parses one- or two-column format
|
6 |
-
- Displays file name and data table preview per upload
|
7 |
-
- No inference or resampling yet
|
8 |
-
"""
|
9 |
-
|
10 |
-
import streamlit as st
|
11 |
-
from pathlib import Path
|
12 |
-
import pandas as pd
|
13 |
-
import io
|
14 |
-
|
15 |
-
# --- PAGE CONFIGURATION ---
|
16 |
-
st.set_page_config(
|
17 |
-
page_title="ML Polymer Recycling",
|
18 |
-
page_icon="🧪",
|
19 |
-
layout="wide"
|
20 |
-
)
|
21 |
-
|
22 |
-
# --- SESSION STATE INITIALIZATION ---
|
23 |
-
def init_session_state():
|
24 |
-
if "status_message" not in st.session_state:
|
25 |
-
st.session_state.status_message = "Ready."
|
26 |
-
if "status_type" not in st.session_state:
|
27 |
-
st.session_state.status_type = "ok"
|
28 |
-
if "modality" not in st.session_state:
|
29 |
-
st.session_state.modality = "Raman"
|
30 |
-
|
31 |
-
# --- STATUS BANNER ---
|
32 |
-
def display_status():
|
33 |
-
style_map = {
|
34 |
-
"ok": ("#e8f5e9", "#2e7d32"),
|
35 |
-
"warn": ("#fff8e1", "#f9a825"),
|
36 |
-
"err": ("#ffebee", "#c62828")
|
37 |
-
}
|
38 |
-
bg_color, text_color = style_map.get(st.session_state.status_type, ("#f0f0f0", "#333"))
|
39 |
-
st.markdown(f"""
|
40 |
-
<div style='background-color:{bg_color}; padding:0.75em 1em; border-radius:8px; color:{text_color};'>
|
41 |
-
<b>Status:</b> {st.session_state.status_message}
|
42 |
-
</div>
|
43 |
-
""", unsafe_allow_html=True)
|
44 |
-
|
45 |
-
# --- SIDEBAR NAVIGATION ---
|
46 |
-
def display_sidebar():
|
47 |
-
with st.sidebar:
|
48 |
-
st.header("🧪 ML Polymer Dashboard")
|
49 |
-
|
50 |
-
modality = st.radio("Modality", ["Raman", "Image", "FTIR"])
|
51 |
-
st.session_state.modality = modality
|
52 |
-
|
53 |
-
if modality == "Raman":
|
54 |
-
page = st.radio("Raman Pages", ["Dashboard", "Model Management", "Inference"])
|
55 |
-
elif modality == "Image":
|
56 |
-
page = st.radio("Image Pages", ["Model Management", "Inference"])
|
57 |
-
elif modality == "FTIR":
|
58 |
-
page = st.radio("FTIR Pages", ["Model Management", "Inference"])
|
59 |
-
|
60 |
-
return modality, page
|
61 |
-
|
62 |
-
# --- HEADER BAR ---
|
63 |
-
def display_header(title: str):
|
64 |
-
st.title(title)
|
65 |
-
display_status()
|
66 |
-
st.markdown("---")
|
67 |
-
|
68 |
-
# --- MODEL DISCOVERY (Raman only for now) ---
|
69 |
-
def discover_models(outputs_dir="outputs"):
|
70 |
-
out = []
|
71 |
-
root = Path(outputs_dir)
|
72 |
-
if not root.exists():
|
73 |
-
return []
|
74 |
-
for p in sorted(root.rglob("*.pth")):
|
75 |
-
out.append(p)
|
76 |
-
return out
|
77 |
-
|
78 |
-
# --- RAMAN HELPERS ---
|
79 |
-
def parse_txt_file(upload) -> pd.DataFrame:
|
80 |
-
try:
|
81 |
-
content = upload.read()
|
82 |
-
upload.seek(0)
|
83 |
-
buf = io.BytesIO(content)
|
84 |
-
try:
|
85 |
-
df = pd.read_csv(buf, sep=None, engine="python", header=None, comment="#")
|
86 |
-
except Exception:
|
87 |
-
buf.seek(0)
|
88 |
-
df = pd.read_csv(buf, delim_whitespace=True, header=None, comment="#")
|
89 |
-
return df
|
90 |
-
except Exception as e:
|
91 |
-
st.error(f"Failed to parse file: {upload.name}. Error: {e}")
|
92 |
-
return pd.DataFrame()
|
93 |
-
|
94 |
-
# --- RAMAN PAGES ---
|
95 |
-
def raman_dashboard():
|
96 |
-
display_header("Raman Dashboard")
|
97 |
-
st.write("This will house future metrics, model count, and version history.")
|
98 |
-
|
99 |
-
def raman_model_management():
|
100 |
-
display_header("Raman Model Management")
|
101 |
-
models = discover_models()
|
102 |
-
if not models:
|
103 |
-
st.info("No model weights found in outputs/. Place .pth files there to make them discoverable.")
|
104 |
-
else:
|
105 |
-
st.markdown(f"**Discovered {len(models)} model weight file(s):**")
|
106 |
-
for m in models:
|
107 |
-
st.code(str(m), language="text")
|
108 |
-
|
109 |
-
def raman_inference():
|
110 |
-
display_header("Raman Inference")
|
111 |
-
|
112 |
-
uploads = st.file_uploader(
|
113 |
-
"Upload one or more Raman .txt spectra (single- or two-column)",
|
114 |
-
type="txt",
|
115 |
-
accept_multiple_files=True
|
116 |
-
)
|
117 |
-
|
118 |
-
if uploads:
|
119 |
-
for file in uploads:
|
120 |
-
st.markdown(f"**Preview: {file.name}**")
|
121 |
-
df = parse_txt_file(file)
|
122 |
-
if not df.empty:
|
123 |
-
st.dataframe(df.head(10), use_container_width=True)
|
124 |
-
else:
|
125 |
-
st.warning("No data parsed or file unreadable.")
|
126 |
-
st.markdown("---")
|
127 |
-
|
128 |
-
# --- IMAGE + FTIR PLACEHOLDERS ---
|
129 |
-
def image_model_management():
|
130 |
-
display_header("Image Model Management")
|
131 |
-
st.info("Image-based model integration is coming soon.")
|
132 |
-
|
133 |
-
def image_inference():
|
134 |
-
display_header("Image Inference")
|
135 |
-
st.info("This page will allow batch image upload and multi-model prediction.")
|
136 |
-
|
137 |
-
def ftir_model_management():
|
138 |
-
display_header("FTIR Model Management")
|
139 |
-
st.info("FTIR model support is planned and will be developed after clarification with Dr. K.")
|
140 |
-
|
141 |
-
def ftir_inference():
|
142 |
-
display_header("FTIR Inference")
|
143 |
-
st.info("FTIR input and prediction support will be added in a future phase.")
|
144 |
-
|
145 |
-
# --- MAIN ENTRY POINT ---
|
146 |
-
def main():
|
147 |
-
init_session_state()
|
148 |
-
modality, page = display_sidebar()
|
149 |
-
|
150 |
-
if modality == "Raman":
|
151 |
-
if page == "Dashboard":
|
152 |
-
raman_dashboard()
|
153 |
-
elif page == "Model Management":
|
154 |
-
raman_model_management()
|
155 |
-
elif page == "Inference":
|
156 |
-
raman_inference()
|
157 |
-
|
158 |
-
elif modality == "Image":
|
159 |
-
if page == "Model Management":
|
160 |
-
image_model_management()
|
161 |
-
elif page == "Inference":
|
162 |
-
image_inference()
|
163 |
-
|
164 |
-
elif modality == "FTIR":
|
165 |
-
if page == "Model Management":
|
166 |
-
ftir_model_management()
|
167 |
-
elif page == "Inference":
|
168 |
-
ftir_inference()
|
169 |
-
|
170 |
-
if __name__ == "__main__":
|
171 |
-
main()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|