File size: 4,331 Bytes
236cd6c
 
4a4ded1
83a90dd
39adf97
48ee50b
7b2398c
4a571e2
d31c393
236cd6c
2ac3e95
 
68ed844
 
 
 
 
aa6577a
2ac3e95
 
236cd6c
2ac3e95
 
236cd6c
a5c9a03
2ac3e95
 
 
 
 
 
 
 
 
 
d953f41
68ed844
50b8fa6
 
50430ba
50b8fa6
2ac3e95
50b8fa6
 
b8436ab
d953f41
2ac3e95
d953f41
2ac3e95
50b8fa6
 
d953f41
 
ea8a465
8b96fa9
52dbcec
 
 
05efc0a
 
 
 
 
 
 
 
 
0a224bb
52dbcec
8db620c
52dbcec
4ee4257
8b96fa9
 
 
 
 
31548fa
0a224bb
370ad7b
52dbcec
31548fa
8db620c
4a8b73c
52dbcec
31548fa
8db620c
4a8b73c
d953f41
31548fa
8db620c
c203dc8
2ac3e95
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
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
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
# νŒ¨ν‚€μ§€ 뢈러였기
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)