| import os |
| import random |
| import gradio as gr |
| from gtts import gTTS |
| import tempfile |
|
|
| |
| IMAGE_FOLDER = "IMAGES/" |
|
|
| |
| letter_words = { |
| "A": "Apple", "B": "Bat", "C": "Cat", "D": "Duck", "E": "Eyes", "F": "Fish" |
| } |
|
|
| |
| alphabet_data = {f.split(".")[0].upper(): os.path.join(IMAGE_FOLDER, f) |
| for f in os.listdir(IMAGE_FOLDER) if f.endswith(('.png', '.jpg', '.jpeg'))} |
|
|
| |
| def get_random_image(): |
| letter = random.choice(list(alphabet_data.keys())) |
| image_path = alphabet_data[letter] |
| word = letter_words.get(letter, "Unknown") |
| |
| |
| sentence = f"{letter} for {word}" |
| tts = gTTS(sentence, lang="en") |
| |
| |
| temp_audio = tempfile.NamedTemporaryFile(delete=False, suffix=".mp3") |
| tts.save(temp_audio.name) |
| |
| return image_path, sentence, temp_audio.name |
|
|
| |
| with gr.Blocks(css=""" |
| body { |
| background-color: #f8f9fa; |
| } |
| .title { |
| text-align: center; |
| font-size: 2.5rem; |
| font-weight: bold; |
| color: #333; |
| padding-bottom: 10px; |
| } |
| .sub-title { |
| text-align: center; |
| font-size: 1.2rem; |
| color: #666; |
| margin-bottom: 20px; |
| } |
| .container { |
| max-width: 500px; |
| margin: auto; |
| text-align: center; |
| } |
| .gradio-image img { |
| border-radius: 20px; |
| box-shadow: 0px 4px 10px rgba(0, 0, 0, 0.2); |
| } |
| .gradio-button { |
| font-size: 1.2rem; |
| padding: 10px; |
| border-radius: 15px; |
| background: linear-gradient(135deg, #ff7eb3, #ff758c); |
| color: white; |
| border: none; |
| cursor: pointer; |
| transition: transform 0.2s ease; |
| } |
| .gradio-button:hover { |
| transform: scale(1.05); |
| } |
| """) as demo: |
| gr.Markdown("<div class='title'>🔤 Alphabet Learning Game with Audio</div>") |
| |
|
|
| with gr.Row(): |
| img_display = gr.Image(label="Letter Image", elem_classes="gradio-image") |
| |
| text_display = gr.Textbox(label="What you hear", interactive=False) |
| audio_output = gr.Audio() |
|
|
| next_btn = gr.Button("🎵 Next Letter", elem_classes="gradio-button") |
|
|
| next_btn.click(get_random_image, inputs=[], outputs=[img_display, text_display, audio_output]) |
|
|
| demo.launch() |
|
|