import streamlit as st import sys import os import matplotlib.pyplot as plt import matplotlib.patches as patches import torch import numpy as np import threading import hmac from processing.surface_plots import surface_plot from processing.preprocessing import plot_timeseries from processing.prediction import NN_prediction from processing.classification_model import classify from processing.barsplots_rootcauses import check_classification from processing.cloud_access import auto_download sprint_data_folder = "Messungen" def get_csv_files(data_folder): csv_files = [] for file in os.listdir(data_folder): if file.endswith(".csv"): csv_file = os.path.join(data_folder, file) csv_files.append(csv_file) return csv_files def check_password(): """Returns `True` if the user had the correct password.""" def password_entered(): """Checks whether a password entered by the user is correct.""" if hmac.compare_digest(st.session_state["password"], st.secrets["password"]): st.session_state["password_correct"] = True del st.session_state["password"] # Don't store the password. else: st.session_state["password_correct"] = False # Return True if the password is validated. if st.session_state.get("password_correct", False): return True # Show input for password. st.text_input( "Password", type="password", on_change=password_entered, key="password" ) if "password_correct" in st.session_state: st.error("😕 Password incorrect") return False if not check_password(): st.stop() # Do not continue if check_password is not True. def main(): sprint_csv_files = get_csv_files(sprint_data_folder) st.set_page_config(page_title="Assistenzsystem", page_icon=":eyeglasses:", layout="wide") with open("assets/style.css") as f: st.markdown(f"", unsafe_allow_html=True) st.write("") col1, col2 = st.columns([0.5, 1]) with col1: st.image("assets/ProKI_Logo.png", width=200) with col2: st.markdown("

Assistenzsystem

", unsafe_allow_html=True) tab1, tab2 = st.tabs(["Modellierung der Bauteilqualität", "Klassifizierungsergebnisse"]) with tab1: st.markdown("#") col1, col2, col3 = st.columns([0.5, 0.1, 0.4], gap="large") with col1: feed = st.slider("Vorschub [mm/min]", 400, 1300, 850) plaindepth = st.slider("Schnitttiefe [mm]", 0.1, 0.5, 0.3) wear = st.slider("Werkzeugverschleiß %", 0, 100, 50) try: fig = NN_prediction((feed-400)/900, (plaindepth-0.1)/0.4, wear/100) st.pyplot(fig) except: st.write("Models not loaded yet") with col2: st.write("") with col3: st.write("") st.image("assets/slice.png", width=400) auswahl = st.radio("Merkmal", ["Vorschub", "Schnitttiefe", "Werkzeugverschleiß"], horizontal=True, index=0) width = 500 if auswahl == "Vorschub": st.image("assets/max_Vorschub.PNG", width=width) elif auswahl == "Schnitttiefe": st.image("assets/max_Schnitttiefe.PNG", width=width) else: st.image("assets/max_Verschleiß.PNG", width=width) with tab2: selected_file = st.selectbox("Oberflächenscan auswählen", sprint_csv_files, 0) col1, col_blanc, col2= st.columns([0.45, 0.1, 0.45], gap="large") with col1: try: fig = surface_plot(selected_file) fig.update_layout(height=800, width=1200) st.plotly_chart(fig, theme="streamlit", use_container_width=False) except: pass with col_blanc: st.write("") with col2: st.markdown("

Klassifizierung

", unsafe_allow_html=True) st.markdown("#") dummy, tolerance, z_data, fivetothirty = plot_timeseries(selected_file, 9) data = fivetothirty["z"].values mean = np.mean(data) data = data - mean try: data = torch.tensor(data, dtype=torch.float).to("cpu") data = data.view(1,1,500) prediction = classify(data) fig_feed, fig_depth, fig_condition = check_classification(prediction[0]) st.pyplot(fig_feed) st.pyplot(fig_depth) st.pyplot(fig_condition) except: st.write("Models not loaded yet") if __name__ == "__main__": main() t1 = threading.Thread(target=auto_download(st.secrets("seafile_token"))) t1.start()