Spaces:
Sleeping
Sleeping
File size: 3,315 Bytes
009db83 e6d5013 66233bc 009db83 e6d5013 009db83 e6d5013 009db83 66233bc 009db83 66233bc 009db83 e6d5013 66233bc 009db83 66233bc e6d5013 66233bc e6d5013 009db83 |
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 74 75 76 77 78 79 80 81 82 83 84 85 86 87 |
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()
|