Spaces:
Running
Running
File size: 2,519 Bytes
b63476f fb93a17 d6fa022 fb93a17 d6fa022 fb93a17 d6fa022 fb93a17 d6fa022 fb93a17 2cf982a bf2d620 d6fa022 2cf982a d6fa022 2cf982a d6fa022 bf2d620 d6fa022 2cf982a fb93a17 d6fa022 2cf982a d6fa022 fb93a17 d6fa022 c994feb d6fa022 2a0284a d6fa022 2a0284a d6fa022 5995a5d bf2d620 |
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 |
import gradio as gr
from gtts import gTTS
import time
import difflib
import tempfile
import os
import speech_recognition as sr
# Function to play the text (optional)
def play_text(text):
tts = gTTS(text=text, lang='hi', slow=False)
temp_file = tempfile.NamedTemporaryFile(delete=False, suffix='.mp3')
tts.save(temp_file.name)
os.system(f"start {temp_file.name}") # Windows
return "✅ Text is being read out. Please listen and read it yourself."
def transcribe_audio(audio, original_text):
recognizer = sr.Recognizer()
try:
with sr.AudioFile(audio) as source:
audio_data = recognizer.record(source)
# Try chunking if needed
transcription = recognizer.recognize_google(audio_data, language="hi-IN")
# Clean and split the text better (remove punctuations etc.)
import re
original_words = re.findall(r'\w+', original_text.strip())
transcribed_words = re.findall(r'\w+', transcription.strip())
matcher = difflib.SequenceMatcher(None, original_words, transcribed_words)
accuracy = round(matcher.ratio() * 100, 2)
speed = round(len(transcribed_words) / (len(audio_data.frame_data) / audio_data.sample_rate), 2)
result = {
"📝 Transcribed Text": transcription,
"🎯 Accuracy (%)": accuracy,
"⏱️ Speaking Speed (words/sec)": speed
}
return result
except sr.UnknownValueError:
return {"error": "Could not understand audio"}
except sr.RequestError as e:
return {"error": f"Request error: {e}"}
except Exception as e:
return {"error": str(e)}
# Gradio App
with gr.Blocks() as app:
gr.Markdown("## 🗣️ Hindi Reading & Pronunciation Practice App")
with gr.Row():
input_text = gr.Textbox(label="Paste Hindi Text Here", placeholder="यहाँ हिंदी टेक्स्ट लिखें...")
play_button = gr.Button("🔊 Listen to Text")
play_button.click(play_text, inputs=[input_text], outputs=[])
gr.Markdown("### 🎤 Now upload or record yourself reading the text aloud below:")
audio_input = gr.Audio(type="filepath", label="Upload or Record Your Voice")
submit_button = gr.Button("✅ Submit Recording for Checking")
output = gr.JSON(label="Results")
submit_button.click(transcribe_audio, inputs=[audio_input, input_text], outputs=[output])
# Launch the app
app.launch()
|