Spaces:
Sleeping
Sleeping
Update app.py
Browse files
app.py
CHANGED
|
@@ -7,13 +7,8 @@ from datetime import datetime
|
|
| 7 |
import soundfile as sf
|
| 8 |
import torch
|
| 9 |
from tenacity import retry, stop_after_attempt, wait_fixed
|
| 10 |
-
import pyttsx3
|
| 11 |
from transformers import pipeline
|
| 12 |
|
| 13 |
-
# Initialize text-to-speech engine
|
| 14 |
-
tts_engine = pyttsx3.init()
|
| 15 |
-
tts_engine.setProperty('rate', 150)
|
| 16 |
-
|
| 17 |
# Initialize local models with retry logic
|
| 18 |
@retry(stop=stop_after_attempt(3), wait=wait_fixed(2))
|
| 19 |
def load_whisper_model():
|
|
@@ -145,10 +140,6 @@ def handle_health_query(query, language="en"):
|
|
| 145 |
return "Please provide a valid health query."
|
| 146 |
# Placeholder for Q&A logic (could integrate a model like BERT for Q&A)
|
| 147 |
response = f"Response to query '{query}': For accurate health information, consult a healthcare provider."
|
| 148 |
-
# Text-to-speech
|
| 149 |
-
tts_engine.setProperty('voice', language)
|
| 150 |
-
tts_engine.say(response)
|
| 151 |
-
tts_engine.runAndWait()
|
| 152 |
return response
|
| 153 |
|
| 154 |
def analyze_voice(audio_file, language="en"):
|
|
@@ -170,8 +161,6 @@ def analyze_voice(audio_file, language="en"):
|
|
| 170 |
# Transcribe audio
|
| 171 |
transcription = transcribe_audio(audio_file, language)
|
| 172 |
if "Error transcribing" in transcription:
|
| 173 |
-
tts_engine.say(transcription)
|
| 174 |
-
tts_engine.runAndWait()
|
| 175 |
return transcription
|
| 176 |
|
| 177 |
# Check for medication-related queries
|
|
@@ -179,15 +168,11 @@ def analyze_voice(audio_file, language="en"):
|
|
| 179 |
feedback = "Error: This tool does not provide medication or treatment advice. Please describe symptoms only (e.g., 'I have a fever')."
|
| 180 |
feedback += f"\n\n**Debug Info**: Transcription = '{transcription}', File Hash = {file_hash}"
|
| 181 |
feedback += "\n**Disclaimer**: This is not a diagnostic tool. Consult a healthcare provider for medical advice."
|
| 182 |
-
tts_engine.say(feedback)
|
| 183 |
-
tts_engine.runAndWait()
|
| 184 |
return feedback
|
| 185 |
|
| 186 |
# Analyze symptoms
|
| 187 |
prediction, score = analyze_symptoms(transcription)
|
| 188 |
if "Error analyzing" in prediction:
|
| 189 |
-
tts_engine.say(prediction)
|
| 190 |
-
tts_engine.runAndWait()
|
| 191 |
return prediction
|
| 192 |
|
| 193 |
# Generate feedback
|
|
@@ -199,10 +184,6 @@ def analyze_voice(audio_file, language="en"):
|
|
| 199 |
feedback += f"\n\n**Debug Info**: Transcription = '{transcription}', Prediction = {prediction}, Confidence = {score:.4f}, File Hash = {file_hash}"
|
| 200 |
feedback += "\n**Disclaimer**: This is not a diagnostic tool. Consult a healthcare provider for medical advice."
|
| 201 |
|
| 202 |
-
# Text-to-speech for feedback
|
| 203 |
-
tts_engine.say(feedback)
|
| 204 |
-
tts_engine.runAndWait()
|
| 205 |
-
|
| 206 |
# Clean up temporary audio file
|
| 207 |
try:
|
| 208 |
os.remove(audio_file)
|
|
@@ -212,10 +193,7 @@ def analyze_voice(audio_file, language="en"):
|
|
| 212 |
|
| 213 |
return feedback
|
| 214 |
except Exception as e:
|
| 215 |
-
|
| 216 |
-
tts_engine.say(error_msg)
|
| 217 |
-
tts_engine.runAndWait()
|
| 218 |
-
return error_msg
|
| 219 |
|
| 220 |
# Gradio interface
|
| 221 |
def create_gradio_interface():
|
|
@@ -225,7 +203,8 @@ def create_gradio_interface():
|
|
| 225 |
# Health Voice Analyzer
|
| 226 |
Record or upload a voice sample describing symptoms in English, Spanish, Hindi, or Mandarin (e.g., 'I have a fever').
|
| 227 |
Ask health questions in the text box below. Supports WAV, 16kHz audio.
|
| 228 |
-
**Disclaimer**: This is not a diagnostic tool. Consult a healthcare provider for medical advice.
|
|
|
|
| 229 |
"""
|
| 230 |
)
|
| 231 |
with gr.Row():
|
|
|
|
| 7 |
import soundfile as sf
|
| 8 |
import torch
|
| 9 |
from tenacity import retry, stop_after_attempt, wait_fixed
|
|
|
|
| 10 |
from transformers import pipeline
|
| 11 |
|
|
|
|
|
|
|
|
|
|
|
|
|
| 12 |
# Initialize local models with retry logic
|
| 13 |
@retry(stop=stop_after_attempt(3), wait=wait_fixed(2))
|
| 14 |
def load_whisper_model():
|
|
|
|
| 140 |
return "Please provide a valid health query."
|
| 141 |
# Placeholder for Q&A logic (could integrate a model like BERT for Q&A)
|
| 142 |
response = f"Response to query '{query}': For accurate health information, consult a healthcare provider."
|
|
|
|
|
|
|
|
|
|
|
|
|
| 143 |
return response
|
| 144 |
|
| 145 |
def analyze_voice(audio_file, language="en"):
|
|
|
|
| 161 |
# Transcribe audio
|
| 162 |
transcription = transcribe_audio(audio_file, language)
|
| 163 |
if "Error transcribing" in transcription:
|
|
|
|
|
|
|
| 164 |
return transcription
|
| 165 |
|
| 166 |
# Check for medication-related queries
|
|
|
|
| 168 |
feedback = "Error: This tool does not provide medication or treatment advice. Please describe symptoms only (e.g., 'I have a fever')."
|
| 169 |
feedback += f"\n\n**Debug Info**: Transcription = '{transcription}', File Hash = {file_hash}"
|
| 170 |
feedback += "\n**Disclaimer**: This is not a diagnostic tool. Consult a healthcare provider for medical advice."
|
|
|
|
|
|
|
| 171 |
return feedback
|
| 172 |
|
| 173 |
# Analyze symptoms
|
| 174 |
prediction, score = analyze_symptoms(transcription)
|
| 175 |
if "Error analyzing" in prediction:
|
|
|
|
|
|
|
| 176 |
return prediction
|
| 177 |
|
| 178 |
# Generate feedback
|
|
|
|
| 184 |
feedback += f"\n\n**Debug Info**: Transcription = '{transcription}', Prediction = {prediction}, Confidence = {score:.4f}, File Hash = {file_hash}"
|
| 185 |
feedback += "\n**Disclaimer**: This is not a diagnostic tool. Consult a healthcare provider for medical advice."
|
| 186 |
|
|
|
|
|
|
|
|
|
|
|
|
|
| 187 |
# Clean up temporary audio file
|
| 188 |
try:
|
| 189 |
os.remove(audio_file)
|
|
|
|
| 193 |
|
| 194 |
return feedback
|
| 195 |
except Exception as e:
|
| 196 |
+
return f"Error processing audio: {str(e)}"
|
|
|
|
|
|
|
|
|
|
| 197 |
|
| 198 |
# Gradio interface
|
| 199 |
def create_gradio_interface():
|
|
|
|
| 203 |
# Health Voice Analyzer
|
| 204 |
Record or upload a voice sample describing symptoms in English, Spanish, Hindi, or Mandarin (e.g., 'I have a fever').
|
| 205 |
Ask health questions in the text box below. Supports WAV, 16kHz audio.
|
| 206 |
+
**Disclaimer**: This is not a diagnostic tool. Consult a healthcare provider for medical advice.
|
| 207 |
+
**Note**: Text-to-speech is available in the web frontend (Salesforce Sites) using the browser's Web Speech API.
|
| 208 |
"""
|
| 209 |
)
|
| 210 |
with gr.Row():
|