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() | |