Spaces:
Sleeping
Sleeping
import gradio as gr | |
import speech_recognition as sr | |
import difflib | |
import pyaudio | |
# Hàm chuyển giọng nói thành văn bản | |
def transcribe_speech(): | |
recognizer = sr.Recognizer() | |
with sr.Microphone() as source: | |
# Điều chỉnh tiếng ồn nền và ghi âm | |
recognizer.adjust_for_ambient_noise(source, duration=1) | |
audio = recognizer.listen(source) | |
try: | |
# Chuyển giọng nói thành văn bản | |
text = recognizer.recognize_google(audio, language="vi-VN") | |
return text | |
except sr.UnknownValueError: | |
return "Không thể nhận diện giọng nói" | |
except sr.RequestError as e: | |
return f"Lỗi kết nối dịch vụ Google: {e}" | |
# Hàm so sánh văn bản chuyển đổi với văn bản mẫu | |
def compare_transcription(transcribed_text, reference_text): | |
transcribed_words = transcribed_text.split() | |
reference_words = reference_text.split() | |
incorrect_words = [] | |
for i, word in enumerate(transcribed_words): | |
if i >= len(reference_words) or word.lower() != reference_words[i].lower(): | |
incorrect_words.append(word) | |
matches = difflib.SequenceMatcher(None, transcribed_words, reference_words) | |
accuracy = matches.ratio() * 100 | |
return accuracy, incorrect_words | |
# Hàm tích hợp để dùng trên Gradio | |
def process_speech(reference_text): | |
transcribed_text = transcribe_speech() | |
if "Lỗi" in transcribed_text or "Không thể nhận diện" in transcribed_text: | |
return transcribed_text, None, None | |
accuracy, incorrect_words = compare_transcription(transcribed_text, reference_text) | |
return transcribed_text, f"{accuracy:.2f}%", ", ".join(incorrect_words) if incorrect_words else "Không có từ sai" | |
# Tạo giao diện với Gradio | |
def build_interface(): | |
with gr.Blocks() as demo: | |
# Input cho văn bản mẫu | |
reference_text = gr.Textbox(label="Văn bản mẫu", value="Xin chào, tôi là ChatGPT", lines=2) | |
# Button để ghi âm | |
record_button = gr.Button("Ghi âm và kiểm tra") | |
# Output hiển thị kết quả | |
transcribed_text = gr.Textbox(label="Văn bản bạn nói") | |
accuracy = gr.Textbox(label="Độ chính xác (%)") | |
incorrect_words = gr.Textbox(label="Những từ nói sai") | |
# Nút ghi âm được kết nối với chức năng xử lý | |
record_button.click(fn=process_speech, inputs=[reference_text], outputs=[transcribed_text, accuracy, incorrect_words]) | |
return demo | |
# Chạy giao diện | |
demo = build_interface() | |
demo.launch() | |