mobility_condition / src /streamlit_app.py
randmimc's picture
Update src/streamlit_app.py
05efc0a verified
Raw
History Blame Contribute Delete
4.33 kB
# νŒ¨ν‚€μ§€ 뢈러였기
import re
import base64
from io import BytesIO
import streamlit as st
import numpy as np
import pandas as pd
from gtts import gTTS
# μ˜ˆμ‹œ 데이터
options = ["", "2024-08-24", "2024-09-26"]
@st.cache_data
def load_data():
return pd.read_csv("https://huggingface.co/spaces/randmimc/mobility_condition/raw/main/chat_icon/text.csv", on_bad_lines='skip')
df = load_data()
text_input = "μœ„μ˜ 증상듀이 보일 경우, λ‹€μŒκ³Ό 같은 쑰치λ₯Ό μ·¨ν•˜λŠ” 것이 ν•„μš”ν•©λ‹ˆλ‹€:\n\n1. **μžλ™μž¬μƒ μ‹œλ„**: μš°μ„ μ μœΌλ‘œ 일반적인 μžλ™ μž¬μƒμ„ μ§„ν–‰ν•˜μ—¬ DPF μ‹œμŠ€ν…œμ΄ μ •μƒμ μœΌλ‘œ μž‘λ™ν•˜λŠ”μ§€ ν™•μΈν•©λ‹ˆλ‹€. μ°¨λŸ‰ μ†λ„λŠ” μ•½ 60km/h둜 μœ μ§€ν•˜κ³ , 20λΆ„ 이상 μ£Όν–‰ν•˜μ—¬ DPF μ‹œμŠ€ν…œμ΄ 슀슀둜 sootλ₯Ό μ œκ±°ν•˜λ„λ‘ ν•©λ‹ˆλ‹€.\n\n2. **DPF μˆ˜λ™ 제거 λ²„νŠΌ ν™œμš©**: λ§Œμ•½ μžλ™μž¬μƒμ΄ μ–΄λ €μš΄ μƒνƒœλΌλ©΄, DPF μˆ˜λ™ 제거 λ²„νŠΌμ„ 톡해 μš΄μ „μžκ°€ κ°•μ œλ‘œ sootλ₯Ό μ œκ±°ν•˜λŠ” 방법을 μ‹œλ„ν•΄ λ΄…λ‹ˆλ‹€.\n\n3. **μ •λΉ„μ†Œ λ°©λ¬Έ**: μžλ™ μž¬μƒμ΄λ‚˜ μˆ˜λ™ 제거 λ²„νŠΌμ„ ν†΅ν•΄μ„œλ„ λ¬Έμ œκ°€ ν•΄κ²°λ˜μ§€ μ•Šμ„ 경우, κ°€κΉŒμš΄ μ •λΉ„μ†Œλ₯Ό λ°©λ¬Έν•˜μ—¬ DPF μ‹œμŠ€ν…œμ„ 점검 λ°›λŠ” 것이 μ€‘μš”ν•©λ‹ˆλ‹€. μ΄λŠ” μ„Όμ„œ λΆˆλŸ‰μ΄λ‚˜ DPF ν•„ν„° 문제 λ“± λ‹€λ₯Έ 원인을 νŒŒμ•…ν•˜λŠ” 데 도움이 λ©λ‹ˆλ‹€.\n\n4. **배기계톡 점검**: ν•΄λ‹Ή ν˜„μƒμ΄ 지속 발견될 경우 λ§Œμ•½μ„ λŒ€λΉ„ν•˜μ—¬ μ°¨λŸ‰ 자체의 배기계톡 점검을 ν•˜λŠ” 것이 μΆ”μ²œλ©λ‹ˆλ‹€.\n\n**정상적인 경우**: λ§Œμ•½ soot μˆ˜μΉ˜κ°€ μ μ ˆν•œ 타이밍에 μ—°μ†Œλ˜μ–΄ μ—†μ–΄μ§€κ³  μ „μ²΄μ μœΌλ‘œ 봀을 λ•Œ μΆ•μ λŸ‰μ΄ 40을 μ΄ˆκ³Όν•˜λŠ” ꡬ간이 μ‘΄μž¬ν•˜μ§€ μ•ŠλŠ”λ‹€λ©΄, μ΄λŠ” 정상적이며 문제 μ—†μŠ΅λ‹ˆλ‹€"
warning = "⚠️ 일정 수치 μ΄μƒμ˜ Soot μΆ•μ λŸ‰μ΄ 2μ‹œκ°„ 이상 μ§€μ†λ˜λŠ” ν˜„μƒμ„ λ³΄μž„. \nSoot κ°€ μΌμ •μˆ˜μΉ˜μ— λ„λ‹¬ν–ˆμ„λ•Œ μ •μƒμ μœΌλ‘œ μ—°μ†Œλ˜μ§€ μ•Šκ±°λ‚˜, μ„Όμ„œ λΆˆλŸ‰μœΌλ‘œ 인해 Dosing 이 κ³Όν•˜κ²Œ ν™œμ„±ν™”λ¨. \nsoot κ°€ μ¦κ°€ν•˜λŠ” κ³Όμ •μ—μ„œ λΆˆκ·œμΉ™μ μΈ 증감 ν˜„μƒμ΄ λ°œμƒν•¨. \n튐 λ˜λŠ” λΉ„μ„ ν˜• ν˜•νƒœκ°€ 크게 λ‚˜νƒ€λ‚¨. \nSoot 의 μΆ•μ λŸ‰μ΄ 40을 μ΄ˆκ³Όν•˜λŠ” ꡬ간이 μ‘΄μž¬ν•¨."
def chart_generate(df, col_name):
return st.line_chart(df, y=[col_name])
@st.cache_data
def tts_engine(text):
cleaned_text = re.sub(r'[\x00-\x1F]+', '', text).replace("*", "")
tts = gTTS(text=cleaned_text, lang='ko')
mp3_fp = BytesIO()
tts.write_to_fp(mp3_fp)
# μ˜€λ””μ˜€ 슀트림 μž¬μ„€μ • ν›„ μž¬μƒ
mp3_fp.seek(0)
# Base64 인코딩
audio_bytes = mp3_fp.read()
audio_base64 = base64.b64encode(audio_bytes).decode()
return mp3_fp, audio_base64
def none_temp():
st.info("λ¨Όμ € 데이터λ₯Ό 선택해 μ£Όμ„Έμš”")
def normal(df, col_name):
chart_generate(df, col_name)
st.success("βœ… μ°¨λŸ‰ μƒνƒœ: 정상")
st.markdown("**쑰치 사항:** μΆ”κ°€ μ‘°μΉ˜λŠ” ν•„μš”ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.")
def anormal(df, col_name, warning, text_input):
# custom style
chart_generate(df, col_name)
st.warning(warning)
st.markdown(text_input)
mp3_fp, audio_base64 = tts_engine(warning+" "+text_input)
st.audio(mp3_fp, format="audio/mp3")
# μ„œλΉ„μŠ€ μ‹€ν–‰
# 1. session_state μ΄ˆκΈ°ν™” (앱이 처음 싀행될 λ•Œλ§Œ μž‘λ™)
if 'selection' not in st.session_state:
st.session_state.selection = ""
if 'warning' not in st.session_state:
st.session_state.warning = ""
if 'success' not in st.session_state:
st.session_state.success = ""
if 'audio' not in st.session_state:
st.session_state.audio = ""
if 'markdown' not in st.session_state:
st.session_state.markdown = ""
slected = st.selectbox(
"진단할 데이터λ₯Ό μ„ νƒν•˜μ„Έμš”:",
options
)
st.session_state["warning"] = ""
st.session_state["success"] = ""
st.session_state["audio"] = ""
st.session_state["markdown"] = ""
st.session_state.selection = slected
if st.session_state.selection == "":
st.write(st.session_state.selection)
st.write(st.session_state.audio)
none_temp()
elif st.session_state.selection == "2024-09-26":
st.write(st.session_state.selection)
st.write(st.session_state.audio)
normal(df, "ECU_DPFSoot")
else:
st.write(st.session_state.selection)
st.write(st.session_state.audio)
anormal(df, "ECU_DPFSoot", warning, text_input)