Spaces:
Sleeping
Sleeping
| import os | |
| import gradio as gr | |
| import speech_recognition as sr | |
| from gtts import gTTS | |
| from pydub import AudioSegment | |
| from datetime import datetime | |
| import json | |
| from fuzzywuzzy import fuzz | |
| # # Set ffmpeg path | |
| # AudioSegment.converter = r"C:\ffmpeg\ffmpeg-2025-04-17-git-7684243fbe-full_build\bin\ffmpeg.exe" | |
| # Load FAQ data | |
| with open('data.json', 'r', encoding='utf-8') as f: | |
| faq_data = json.load(f) | |
| def clean_reply(reply): | |
| words = reply.strip().split() | |
| if len(words) > 50: | |
| reply = " ".join(words[:50]) | |
| if "." in reply: | |
| reply = reply[:reply.rfind(".")+1] | |
| elif "," in reply: | |
| reply = reply[:reply.rfind(",")+1] | |
| return reply.strip() | |
| def chat_with_ai(prompt): | |
| best_match = None | |
| best_score = 0 | |
| for question, answer in faq_data.items(): | |
| score = fuzz.partial_ratio(prompt, question) | |
| if score > best_score: | |
| best_score = score | |
| best_match = answer | |
| if best_score >= 70: | |
| return clean_reply(best_match) | |
| else: | |
| return "میں آپ کی کال اپنے سینئر کو منتقل کر رہا ہوں، وہ آپ کی مزید رہنمائی کریں گے۔" | |
| def respond_to_audio(audio_path): | |
| if not audio_path: | |
| return None | |
| recognizer = sr.Recognizer() | |
| try: | |
| with sr.AudioFile(audio_path) as source: | |
| audio = recognizer.record(source) | |
| text = recognizer.recognize_google(audio, language="ur-PK") | |
| except Exception as e: | |
| print("Speech Recognition Error:", e) | |
| return None | |
| print("📥 User said:", text) | |
| response_text = chat_with_ai(text) | |
| print("🤖 Bot responds:", response_text) | |
| # Generate TTS audio | |
| tts = gTTS(response_text, lang="ur") | |
| temp_path = "temp_original.mp3" | |
| tts.save(temp_path) | |
| # Load with PyDub and speed up | |
| sound = AudioSegment.from_file(temp_path) | |
| faster_sound = sound._spawn(sound.raw_data, overrides={ | |
| "frame_rate": int(sound.frame_rate * 1.0) | |
| }).set_frame_rate(sound.frame_rate) | |
| response_audio_path = f"response_{datetime.now().strftime('%Y%m%d%H%M%S')}.mp3" | |
| faster_sound.export(response_audio_path, format="mp3") | |
| return response_audio_path | |
| # Gradio UI | |
| with gr.Blocks(title="🤖 Dany Tameerat Voice Assistant") as app: | |
| gr.Markdown("## 🤖 Dany Tameerat Voice Assistant\n📢 مائیک سے سوال کریں، AI اردو میں جواب دے گا!") | |
| audio_input = gr.Audio(type="filepath", label="🎤 مائک سے بولیں", streaming=False) | |
| audio_output = gr.Audio(label="🔊 جواب سنیں", autoplay=True) | |
| # Trigger automatically when recording stops | |
| audio_input.change(fn=respond_to_audio, inputs=audio_input, outputs=audio_output) | |
| app.launch(share=True) | |