Spaces:
Sleeping
Sleeping
import gradio as gr | |
import speech_recognition as sr | |
import difflib | |
# Hàm chuyển giọng nói thành văn bản từ file | |
def transcribe_speech(audio_file, language_code): | |
recognizer = sr.Recognizer() | |
# Load audio file | |
with sr.AudioFile(audio_file) as source: | |
# Điều chỉnh tiếng ồn nền và ghi âm | |
recognizer.adjust_for_ambient_noise(source, duration=1) | |
audio = recognizer.record(source) | |
try: | |
# Chuyển giọng nói thành văn bản với ngôn ngữ được chọn | |
text = recognizer.recognize_google(audio, language=language_code) | |
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, audio_file, language): | |
# Map language selection to corresponding language code | |
language_code = "vi-VN" if language == "Vietnamese" else "en-US" | |
transcribed_text = transcribe_speech(audio_file, language_code) | |
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) | |
# Input cho file âm thanh | |
audio_input = gr.Audio(type="filepath", label="Tải lên file âm thanh") | |
# Dropdown cho chọn ngôn ngữ | |
language_selector = gr.Dropdown( | |
choices=["English", "Vietnamese"], | |
label="Chọn ngôn ngữ", | |
value="Vietnamese" # Default value | |
) | |
# 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 kiểm tra được kết nối với chức năng xử lý | |
gr.Button("Ghi âm và kiểm tra").click( | |
fn=process_speech, | |
inputs=[reference_text, audio_input, language_selector], | |
outputs=[transcribed_text, accuracy, incorrect_words] | |
) | |
return demo | |
# Chạy giao diện | |
demo = build_interface() | |
demo.launch() | |