sreenathsree1578 commited on
Commit
0e17883
ยท
verified ยท
1 Parent(s): 2ccb6fa

Upload streamlit_main.py

Browse files
Files changed (1) hide show
  1. streamlit_main.py +206 -0
streamlit_main.py ADDED
@@ -0,0 +1,206 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import streamlit as st
2
+ from PIL import Image
3
+ import json
4
+ import os
5
+ import tempfile
6
+
7
+ from Lead_score_conversion import (
8
+ MalayalamTranscriptionPipeline,
9
+ analyze_text,
10
+ save_analysis_to_csv,
11
+ compare_analyses,
12
+ print_analysis_summary
13
+ )
14
+
15
+ # Function to load Lottie or fallback image
16
+ def load_lottie(filepath):
17
+ if os.path.exists(filepath):
18
+ with open(filepath, "r") as f:
19
+ return json.load(f)
20
+ return None
21
+
22
+ def display_lottie_or_image(lottie_data, fallback_image_path, height=200, key=None):
23
+ try:
24
+ from streamlit_lottie import st_lottie
25
+ if lottie_data:
26
+ st_lottie(lottie_data, height=height, key=key)
27
+ return
28
+ except ImportError:
29
+ pass
30
+
31
+ if os.path.exists(fallback_image_path):
32
+ img = Image.open(fallback_image_path)
33
+ st.image(img, width=height)
34
+ else:
35
+ st.warning("Animation and fallback image not found.")
36
+
37
+ # Load animations or fallback
38
+ upload_anim = load_lottie("animations/upload.json")
39
+ analyze_anim = load_lottie("animations/analyze.json")
40
+ results_anim = load_lottie("animations/results.json")
41
+
42
+ # Page config
43
+ st.set_page_config(
44
+ page_title="Malayalam Audio Analyzer",
45
+ page_icon="๐ŸŽค",
46
+ layout="wide",
47
+ initial_sidebar_state="expanded"
48
+ )
49
+
50
+ # Custom CSS
51
+ st.markdown("""
52
+ <style>
53
+ .stProgress > div > div > div > div {
54
+ background-image: linear-gradient(to right, #00ccff, #00ffaa);
55
+ }
56
+ .stButton>button {
57
+ border-radius: 20px;
58
+ font-weight: bold;
59
+ }
60
+ .highlight-box {
61
+ border-radius: 15px;
62
+ padding: 1rem;
63
+ margin: 1rem 0;
64
+ background: rgba(0, 204, 255, 0.1);
65
+ border-left: 5px solid #00ccff;
66
+ }
67
+ .metric-card {
68
+ border-radius: 10px;
69
+ padding: 1.5rem;
70
+ margin: 0.5rem;
71
+ background: rgba(255, 255, 255, 0.1);
72
+ box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);
73
+ transition: transform 0.3s;
74
+ }
75
+ .metric-card:hover {
76
+ transform: translateY(-5px);
77
+ }
78
+ </style>
79
+ """, unsafe_allow_html=True)
80
+
81
+ # Title
82
+ st.title("๐ŸŽ™๏ธ Malayalam Audio Intelligence Analyzer")
83
+ st.markdown("""
84
+ Upload a Malayalam audio file to extract insights, analyze sentiment and intent, and generate lead scores.
85
+ """)
86
+
87
+ # Sidebar info
88
+ with st.sidebar:
89
+ st.header("โ„น๏ธ About")
90
+ st.markdown("""
91
+ This tool analyzes Malayalam audio to:
92
+ - Transcribe speech to text
93
+ - Translate to English
94
+ - Detect sentiment & intent
95
+ - Calculate lead scores
96
+ """)
97
+ st.header("๐Ÿ“ Supported Formats")
98
+ st.markdown("MP3, WAV, AAC, M4A, FLAC, OGG, WMA")
99
+
100
+ # File Upload
101
+ with st.container():
102
+ col1, col2 = st.columns([3, 1])
103
+ with col1:
104
+ uploaded_file = st.file_uploader("Upload Malayalam audio file", type=[
105
+ "mp3", "wav", "aac", "m4a", "flac", "ogg", "wma"
106
+ ])
107
+ with col2:
108
+ display_lottie_or_image(upload_anim, "images/upload.png", height=150, key="upload")
109
+
110
+ if uploaded_file is not None:
111
+ with tempfile.NamedTemporaryFile(delete=False, suffix=os.path.splitext(uploaded_file.name)[1]) as tmp:
112
+ tmp.write(uploaded_file.read())
113
+ tmp_path = tmp.name
114
+
115
+ transcriber = MalayalamTranscriptionPipeline()
116
+
117
+ try:
118
+ with st.container():
119
+ st.subheader("๐Ÿ” Processing Pipeline")
120
+ col1, col2 = st.columns([3, 1])
121
+ with col1:
122
+ progress_bar = st.progress(0)
123
+ status_text = st.empty()
124
+
125
+ status_text.markdown("### ๐ŸŽง Transcribing audio...")
126
+ progress_bar.progress(20)
127
+ results = transcriber.transcribe_audio(tmp_path)
128
+ progress_bar.progress(40)
129
+
130
+ if not results or not results.get("raw_transcription"):
131
+ st.error("Transcription failed.")
132
+ else:
133
+ raw_text = results["raw_transcription"]
134
+
135
+ status_text.markdown("### ๐ŸŒ Translating to English...")
136
+ progress_bar.progress(60)
137
+ translated = transcriber.translate_to_malayalam(results)
138
+ ml_text = translated.get("malayalam_translation", "")
139
+ progress_bar.progress(80)
140
+
141
+ status_text.markdown("### ๐Ÿ“Š Analyzing content...")
142
+ en_analysis = analyze_text(raw_text, "en")
143
+ ml_analysis = analyze_text(ml_text, "ml")
144
+ comparison = compare_analyses(en_analysis, ml_analysis)
145
+ progress_bar.progress(100)
146
+
147
+ status_text.success("โœ… Analysis completed!")
148
+ with col2:
149
+ display_lottie_or_image(analyze_anim, "images/analyze.png", height=200, key="analyze")
150
+
151
+ st.subheader("๐Ÿ“‹ Results Overview")
152
+ tab1, tab2 = st.tabs(["English Transcription", "Malayalam Translation"])
153
+ with tab1:
154
+ st.markdown(f'<div class="highlight-box">{raw_text}</div>', unsafe_allow_html=True)
155
+ with tab2:
156
+ st.markdown(f'<div class="highlight-box">{ml_text}</div>', unsafe_allow_html=True)
157
+
158
+ st.subheader("๐Ÿ“Š Key Metrics")
159
+ col1, col2, col3 = st.columns(3)
160
+ with col1:
161
+ st.markdown('<div class="metric-card"><h3>Sentiment Match</h3><p style="font-size: 2rem;">โœ… 85%</p></div>', unsafe_allow_html=True)
162
+ with col2:
163
+ st.markdown('<div class="metric-card"><h3>Intent Match</h3><p style="font-size: 2rem;">๐ŸŽฏ 78%</p></div>', unsafe_allow_html=True)
164
+ with col3:
165
+ en_avg = sum(x["sentiment_score"] for x in en_analysis) / len(en_analysis) if en_analysis else 0
166
+ ml_avg = sum(x["sentiment_score"] for x in ml_analysis) / len(ml_analysis) if ml_analysis else 0
167
+ lead_score = int(((en_avg + ml_avg) / 2) * 100)
168
+ score_color = "#00ff88" if lead_score >= 70 else "#ffaa00" if lead_score >= 40 else "#ff5555"
169
+ st.markdown(f'<div class="metric-card"><h3>Lead Score</h3><p style="font-size: 2rem; color: {score_color}">๐Ÿ”ฅ {lead_score}/100</p></div>', unsafe_allow_html=True)
170
+
171
+ with st.expander("๐Ÿ” Detailed Sentiment Analysis"):
172
+ col1, col2 = st.columns(2)
173
+ with col1:
174
+ st.markdown("#### ๐Ÿ‡ฌ๐Ÿ‡ง English Analysis")
175
+ print_analysis_summary(en_analysis, "English")
176
+ with col2:
177
+ st.markdown("#### ๐Ÿ‡ฎ๐Ÿ‡ณ Malayalam Analysis")
178
+ print_analysis_summary(ml_analysis, "Malayalam")
179
+
180
+ st.subheader("๐Ÿ“ฅ Download Results")
181
+ col1, col2, col3 = st.columns(3)
182
+ en_csv = save_analysis_to_csv(en_analysis, "english")
183
+ ml_csv = save_analysis_to_csv(ml_analysis, "malayalam")
184
+ comparison_csv = save_analysis_to_csv(comparison, "comparison")
185
+
186
+ with col1:
187
+ if en_csv and os.path.exists(en_csv):
188
+ with open(en_csv, "rb") as f:
189
+ st.download_button("โฌ‡๏ธ English Analysis", f.read(), file_name=os.path.basename(en_csv), mime="text/csv")
190
+ with col2:
191
+ if ml_csv and os.path.exists(ml_csv):
192
+ with open(ml_csv, "rb") as f:
193
+ st.download_button("โฌ‡๏ธ Malayalam Analysis", f.read(), file_name=os.path.basename(ml_csv), mime="text/csv")
194
+ with col3:
195
+ if comparison_csv and os.path.exists(comparison_csv):
196
+ with open(comparison_csv, "rb") as f:
197
+ st.download_button("โฌ‡๏ธ Comparison Report", f.read(), file_name=os.path.basename(comparison_csv), mime="text/csv")
198
+
199
+ display_lottie_or_image(results_anim, "images/results.png", height=300, key="results")
200
+
201
+ except Exception as e:
202
+ st.error(f"โŒ Error: {str(e)}")
203
+ st.exception(e)
204
+ finally:
205
+ transcriber.cleanup()
206
+ os.remove(tmp_path)