File size: 3,426 Bytes
ed9b1d3
 
 
9bde428
ed9b1d3
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
9bde428
ed9b1d3
9bde428
ed9b1d3
9bde428
ed9b1d3
 
 
 
 
 
 
9bde428
ed9b1d3
9bde428
 
ed9b1d3
 
 
 
 
 
9bde428
ed9b1d3
 
9bde428
ed9b1d3
9bde428
ed9b1d3
 
9bde428
ed9b1d3
 
 
 
 
 
9bde428
 
ed9b1d3
9bde428
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
ed9b1d3
 
9bde428
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
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)
dog_sounds = {
    "sit": r'C:\Users\User\Downloads\dog_sit.mp3',
    "come": r'C:\Users\User\Downloads\dog_come.mp3',
    "fetch": r'C:\Users\User\Downloads\dog_fetch.mp3',
    "treat": r'C:\Users\User\Downloads\dog_treat.mp3',
    "play": r'C:\Users\User\Downloads\dog_play.mp3',
    "bark": r'C:\Users\User\Downloads\dog_bark.mp3'
}

# Initialize speech recognizer
recognizer = sr.Recognizer()
pygame.mixer.init()

def recognize_speech():
    """Recognizes speech from the microphone input."""
    with sr.Microphone() as source:
        try:
            audio = recognizer.listen(source, timeout=5)
            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 sr.WaitTimeoutError:
            return "No speech detected. Please try again."

def dog_response(command):
    """Plays the corresponding dog sound based on the recognized command."""
    if command:
        for key in dog_sounds:
            if key in command:
                play_dog_sound(dog_sounds[key])
                return f"Playing sound for {key}"
        play_dog_sound(dog_sounds["bark"])
        return "No specific dog command recognized. Playing default bark sound."
    return "No command to process."

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 make_dog_response(command):
    """Generates a playful dog response using text-to-speech."""
    try:
        tts = gTTS(text=f"Woof! I heard you say {command}", lang='en')
        response_file = "dog_response.mp3"
        tts.save(response_file)
        pygame.mixer.music.load(response_file)
        pygame.mixer.music.play()
        while pygame.mixer.music.get_busy():
            continue
        os.remove(response_file)
        return f"Generated response: Woof! I heard you say {command}"
    except Exception as e:
        return f"Error generating speech: {e}"

def process_command():
    command = recognize_speech()
    response = dog_response(command)
    tts_response = make_dog_response(command)
    return command, response, tts_response

iface = gr.Interface(
    fn=process_command,
    inputs=[],
    outputs=["text", "text", "text"],
    title="๐Ÿถ Dog Command Recognition ๐Ÿถ",
    description="๐ŸŽค Speak a command and let the dog respond! ๐Ÿ•\n\nTry commands like 'sit', 'come', 'fetch', 'treat', 'play', or anything else!",
    theme="default",
    live=True,
    css="""
    body { background-color: #f0f8ff; }
    .output-text { color: #ff4500; font-size: 18px; font-weight: bold; }
    .interface-title { color: #008080; font-size: 24px; font-weight: bold; }
    .interface-description { color: #2f4f4f; font-size: 16px; }
    """
)

if __name__ == "__main__":
    iface.launch()