Spaces:
Sleeping
Sleeping
Update src/streamlit_app.py
Browse files- src/streamlit_app.py +93 -105
src/streamlit_app.py
CHANGED
|
@@ -7,118 +7,106 @@ import streamlit as st
|
|
| 7 |
import numpy as np
|
| 8 |
import pandas as pd
|
| 9 |
from gtts import gTTS
|
| 10 |
-
# assitant μλ°ν μ΄λ―Έμ§ κ²½λ‘
|
| 11 |
-
assistant_icon_path = "https://huggingface.co/spaces/randmimc/aitom/resolve/main/chat_icon/assistant.ico"
|
| 12 |
|
| 13 |
-
#
|
| 14 |
-
|
| 15 |
-
|
| 16 |
-
|
| 17 |
-
|
| 18 |
|
| 19 |
-
|
| 20 |
-
st.
|
| 21 |
|
| 22 |
-
|
| 23 |
-
"",
|
| 24 |
-
|
| 25 |
-
|
| 26 |
-
|
| 27 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 28 |
|
| 29 |
-
|
| 30 |
-
st.
|
| 31 |
-
<style>
|
| 32 |
-
div.stButton > button {
|
| 33 |
-
background-color: transparent;
|
| 34 |
-
border: none;
|
| 35 |
-
color: black;
|
| 36 |
-
font-size: 30px;
|
| 37 |
-
padding: 0;
|
| 38 |
-
}
|
| 39 |
-
div.stButton > button:hover {
|
| 40 |
-
color: red;
|
| 41 |
-
cursor: pointer;
|
| 42 |
-
}
|
| 43 |
-
</style>
|
| 44 |
-
""", unsafe_allow_html=True)
|
| 45 |
-
df = pd.read_csv("https://huggingface.co/spaces/randmimc/mobility_condition/raw/main/chat_icon/text.csv", on_bad_lines='skip')
|
| 46 |
|
| 47 |
-
|
| 48 |
-
|
|
|
|
|
|
|
| 49 |
|
| 50 |
-
|
| 51 |
-
|
| 52 |
-
|
| 53 |
-
|
| 54 |
-
|
| 55 |
-
|
| 56 |
-
|
| 57 |
-
|
| 58 |
-
|
| 59 |
-
|
| 60 |
-
|
| 61 |
-
|
| 62 |
-
|
| 63 |
-
|
| 64 |
-
|
| 65 |
-
|
| 66 |
-
|
| 67 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 68 |
|
| 69 |
-
|
| 70 |
-
|
| 71 |
-
|
| 72 |
-
|
| 73 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 74 |
|
| 75 |
-
# μ€λμ€ μ€νΈλ¦Ό μ¬μ€μ ν μ¬μ
|
| 76 |
-
mp3_fp.seek(0)
|
| 77 |
-
|
| 78 |
-
# Base64 μΈμ½λ©
|
| 79 |
-
audio_bytes = mp3_fp.read()
|
| 80 |
-
audio_base64 = base64.b64encode(audio_bytes).decode()
|
| 81 |
-
|
| 82 |
-
# HTML μ€νμΌ λ° μ€λμ€ μΆλ ₯
|
| 83 |
-
audio_html = f"""
|
| 84 |
-
<style>
|
| 85 |
-
.audio-container {{
|
| 86 |
-
display: flex;
|
| 87 |
-
align-items: center;
|
| 88 |
-
gap: 10px;
|
| 89 |
-
justify-content: flex-end; /* μ€λ₯Έμͺ½ μ λ ¬ */
|
| 90 |
-
margin-top: 10px;
|
| 91 |
-
}}
|
| 92 |
-
.audio-icon {{
|
| 93 |
-
font-size: 30px;
|
| 94 |
-
cursor: pointer;
|
| 95 |
-
}}
|
| 96 |
-
.audio-icon[title]:hover::after {{
|
| 97 |
-
content: attr(title);
|
| 98 |
-
position: absolute;
|
| 99 |
-
background: #333;
|
| 100 |
-
color: #fff;
|
| 101 |
-
padding: 5px 8px;
|
| 102 |
-
border-radius: 5px;
|
| 103 |
-
white-space: nowrap;
|
| 104 |
-
font-size: 12px;
|
| 105 |
-
top: -35px;
|
| 106 |
-
right: 0;
|
| 107 |
-
z-index: 999;
|
| 108 |
-
}}
|
| 109 |
-
</style>
|
| 110 |
-
|
| 111 |
-
<div class="audio-container">
|
| 112 |
-
<div class="audio-icon" title="μ λ΄μ©μ μμ±μΌλ‘ λ£κΈ°">π</div>
|
| 113 |
-
<audio controls>
|
| 114 |
-
<source src="data:audio/mp3;base64,{audio_base64}" type="audio/mp3">
|
| 115 |
-
λΈλΌμ°μ κ° μ€λμ€ νκ·Έλ₯Ό μ§μνμ§ μμ΅λλ€.
|
| 116 |
-
</audio>
|
| 117 |
-
</div>
|
| 118 |
-
"""
|
| 119 |
-
|
| 120 |
-
# HTML λ λλ§
|
| 121 |
-
st.markdown(audio_html, unsafe_allow_html=True)
|
| 122 |
|
| 123 |
if selected_text:
|
| 124 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 7 |
import numpy as np
|
| 8 |
import pandas as pd
|
| 9 |
from gtts import gTTS
|
|
|
|
|
|
|
| 10 |
|
| 11 |
+
# μμ λ°μ΄ν°
|
| 12 |
+
options = ["", "2024-08-24", "2024-09-26"]
|
| 13 |
+
df = pd.read_csv("https://huggingface.co/spaces/randmimc/mobility_condition/raw/main/chat_icon/text.csv", on_bad_lines='skip')
|
| 14 |
+
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μ μ΄κ³Όνλ ꡬκ°μ΄ μ‘΄μ¬νμ§ μλλ€λ©΄, μ΄λ μ μμ μ΄λ©° λ¬Έμ μμ΅λλ€"
|
| 15 |
+
warning = "β οΈ μΌμ μμΉ μ΄μμ Soot μΆμ λμ΄ 2μκ° μ΄μ μ§μλλ νμμ 보μ. \nSoot κ° μΌμ μμΉμ λλ¬νμλ μ μμ μΌλ‘ μ°μλμ§ μκ±°λ, μΌμ λΆλμΌλ‘ μΈν΄ Dosing μ΄ κ³Όνκ² νμ±νλ¨. \nsoot κ° μ¦κ°νλ κ³Όμ μμ λΆκ·μΉμ μΈ μ¦κ° νμμ΄ λ°μν¨. \nν λλ λΉμ ν ννκ° ν¬κ² λνλ¨. \nSoot μ μΆμ λμ΄ 40μ μ΄κ³Όνλ ꡬκ°μ΄ μ‘΄μ¬ν¨."
|
| 16 |
|
| 17 |
+
def chart_generate(df, col_name):
|
| 18 |
+
return st.line_chart(df, y=[col_name])
|
| 19 |
|
| 20 |
+
def tts_engine(text):
|
| 21 |
+
cleaned_text = re.sub(r'[\x00-\x1F]+', '', text).replace("*", "")
|
| 22 |
+
tts = gTTS(text=cleaned_text, lang='ko')
|
| 23 |
+
mp3_fp = BytesIO()
|
| 24 |
+
tts.write_to_fp(mp3_fp)
|
| 25 |
+
# μ€λμ€ μ€νΈλ¦Ό μ¬μ€μ ν μ¬μ
|
| 26 |
+
mp3_fp.seek(0)
|
| 27 |
+
# Base64 μΈμ½λ©
|
| 28 |
+
audio_bytes = mp3_fp.read()
|
| 29 |
+
audio_base64 = base64.b64encode(audio_bytes).decode()
|
| 30 |
+
return audio_base64
|
| 31 |
|
| 32 |
+
def none_temp():
|
| 33 |
+
st.info("λ¨Όμ λ°μ΄ν°λ₯Ό μ νν΄ μ£ΌμΈμ")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 34 |
|
| 35 |
+
def normal(df, col_name):
|
| 36 |
+
chart_generate(df, col_name)
|
| 37 |
+
st.success("β
μ°¨λ μν: μ μ")
|
| 38 |
+
st.markdown("**μ‘°μΉ μ¬ν:** μΆκ° μ‘°μΉλ νμνμ§ μμ΅λλ€.")
|
| 39 |
|
| 40 |
+
def anormal(df, col_name, warning, text_input, audio_base64):
|
| 41 |
+
# custom style
|
| 42 |
+
audio_html = f"""
|
| 43 |
+
<style>
|
| 44 |
+
.audio-container {{
|
| 45 |
+
display: flex;
|
| 46 |
+
align-items: center;
|
| 47 |
+
gap: 10px;
|
| 48 |
+
justify-content: flex-end; /* μ€λ₯Έμͺ½ μ λ ¬ */
|
| 49 |
+
margin-top: 10px;
|
| 50 |
+
}}
|
| 51 |
+
.audio-icon {{
|
| 52 |
+
font-size: 30px;
|
| 53 |
+
cursor: pointer;
|
| 54 |
+
}}
|
| 55 |
+
.audio-icon[title]:hover::after {{
|
| 56 |
+
content: attr(title);
|
| 57 |
+
position: absolute;
|
| 58 |
+
background: #333;
|
| 59 |
+
color: #fff;
|
| 60 |
+
padding: 5px 8px;
|
| 61 |
+
border-radius: 5px;
|
| 62 |
+
white-space: nowrap;
|
| 63 |
+
font-size: 12px;
|
| 64 |
+
top: -35px;
|
| 65 |
+
right: 0;
|
| 66 |
+
z-index: 999;
|
| 67 |
+
}}
|
| 68 |
+
</style>
|
| 69 |
+
|
| 70 |
+
<div class="audio-container">
|
| 71 |
+
<div class="audio-icon" title="μ λ΄μ©μ μμ±μΌλ‘ λ£κΈ°">π</div>
|
| 72 |
+
<audio controls>
|
| 73 |
+
<source src="data:audio/mp3;base64,{audio_base64}" type="audio/mp3">
|
| 74 |
+
λΈλΌμ°μ κ° μ€λμ€ νκ·Έλ₯Ό μ§μνμ§ μμ΅λλ€.
|
| 75 |
+
</audio>
|
| 76 |
+
</div>
|
| 77 |
+
"""
|
| 78 |
+
chart_generate(df, col_name)
|
| 79 |
+
st.warning(warning)
|
| 80 |
+
st.markdown(text_input)
|
| 81 |
+
st.markdown(audio_html, unsafe_allow_html=True)
|
| 82 |
|
| 83 |
+
# μλΉμ€ μ€ν
|
| 84 |
+
st.subheader("λ°μ΄ν° μ ν")
|
| 85 |
+
selected_text = st.selectbox("λ°μ΄ν°λ₯Ό μ ννμΈμ", options)
|
| 86 |
+
|
| 87 |
+
# st.markdown("""
|
| 88 |
+
# <style>
|
| 89 |
+
# div.stButton > button {
|
| 90 |
+
# background-color: transparent;
|
| 91 |
+
# border: none;
|
| 92 |
+
# color: black;
|
| 93 |
+
# font-size: 30px;
|
| 94 |
+
# padding: 0;
|
| 95 |
+
# }
|
| 96 |
+
# div.stButton > button:hover {
|
| 97 |
+
# color: red;
|
| 98 |
+
# cursor: pointer;
|
| 99 |
+
# }
|
| 100 |
+
# </style>
|
| 101 |
+
# """, unsafe_allow_html=True)
|
| 102 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 103 |
|
| 104 |
if selected_text:
|
| 105 |
+
if selected_text == "":
|
| 106 |
+
none_temp()
|
| 107 |
+
elif text == "2024-09-26":
|
| 108 |
+
normal(df, "ECU_DPFSoot")
|
| 109 |
+
else:
|
| 110 |
+
audio_base64 = tts_engine(warning+" "+0text_input)
|
| 111 |
+
anormal(df, "ECU_DPFSoot", warning, text_input, audio_base64)
|
| 112 |
+
|