# 패키지 불러오기 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)