Spaces:
Sleeping
Sleeping
| import speech_recognition as sr # type: ignore | |
| import os | |
| import pygame # type: ignore | |
| import gradio as gr | |
| from gtts import gTTS # type: ignore | |
| from pydub import AudioSegment | |
| from pydub.playback import play | |
| # Dog sound files (Ensure these files exist in the same directory) | |
| dog_sounds = { | |
| "sit": "dog_sit.mp3", | |
| "come": "dog_come.mp3", | |
| "fetch": "dog_fetch.mp3", | |
| "treat": "dog_treat.mp3", | |
| "play": "dog_play.mp3", | |
| "bark": "dog_bark.mp3" | |
| } | |
| # Initialize speech recognizer | |
| recognizer = sr.Recognizer() | |
| os.environ["SDL_AUDIODRIVER"] = "dummy" # Prevents pygame audio errors in headless mode | |
| pygame.mixer.init() | |
| def recognize_speech(audio_file): | |
| """Recognizes speech from an uploaded audio file.""" | |
| try: | |
| with sr.AudioFile(audio_file) as source: | |
| audio = recognizer.record(source) | |
| command = recognizer.recognize_google(audio) | |
| return command.lower() | |
| except sr.UnknownValueError: | |
| return "Sorry, I could not understand your speech." | |
| except sr.RequestError: | |
| return "Sorry, the speech service is unavailable." | |
| except Exception as e: | |
| return f"Error: {str(e)}" | |
| def dog_response(command): | |
| """Plays the corresponding dog sound and generates a speech response.""" | |
| if command: | |
| for key in dog_sounds: | |
| if key in command: | |
| sound_file = dog_sounds[key] | |
| play_dog_sound(sound_file) | |
| return sound_file, f"Playing sound for {key}", generate_speech(f"Woof! I heard you say {key}") | |
| # If no specific command is recognized, play bark | |
| sound_file = dog_sounds["bark"] | |
| play_dog_sound(sound_file) | |
| return sound_file, "No specific dog command recognized. Playing default bark sound.", generate_speech("Woof! I didn't recognize that, so I'll just bark!") | |
| return None, "No command to process.", None | |
| def play_dog_sound(sound_file): | |
| """Plays an audio file using Pygame.""" | |
| if os.path.exists(sound_file): | |
| pygame.mixer.music.load(sound_file) | |
| pygame.mixer.music.play() | |
| while pygame.mixer.music.get_busy(): | |
| continue | |
| else: | |
| return f"Error: Sound file '{sound_file}' not found." | |
| def generate_speech(text): | |
| """Generates a TTS response and returns the file path.""" | |
| speech_file = "dog_response.mp3" | |
| tts = gTTS(text=text, lang="en") | |
| tts.save(speech_file) | |
| return speech_file # Return audio file for Gradio | |
| def process_command(audio_file): | |
| """Processes the command from the user.""" | |
| command = recognize_speech(audio_file) | |
| sound_file, response_text, speech_file = dog_response(command) | |
| # Return the dog sound file in the first output | |
| return sound_file, response_text, speech_file | |
| # Gradio UI | |
| iface = gr.Interface( | |
| fn=process_command, | |
| inputs=gr.Audio(sources=["microphone"], type="filepath"), | |
| outputs=["audio", "text", "audio"], # First box now plays dog sound | |
| title="πΆ Dog Command Recognition πΆ", | |
| description="π€ Speak a command and let the dog respond! π\n\nTry commands like 'sit', 'come', 'fetch', 'treat', 'play'", | |
| live=True, | |
| ) | |
| if __name__ == "__main__": | |
| iface.launch(share=True) | |