Spaces:
Sleeping
Sleeping
File size: 4,661 Bytes
46e19ef d558c26 540f4c8 d558c26 e3a58c6 46e19ef e3a58c6 8ef9310 0f433ab e3a58c6 0f433ab d558c26 0498d1c 3e9568e 8ef9310 e3a58c6 91a2ea1 304ed82 e3a58c6 540f4c8 e3a58c6 91a2ea1 e3a58c6 d558c26 e3a58c6 d558c26 e3a58c6 d558c26 e3a58c6 61c9f90 e3a58c6 d558c26 3e9568e d558c26 e3a58c6 61c9f90 e3a58c6 d558c26 e3a58c6 0f433ab 3e9568e e3a58c6 61c9f90 e3a58c6 9586c71 91a2ea1 9586c71 e3a58c6 91a2ea1 61c9f90 d558c26 e3a58c6 85d956d e3a58c6 85d956d e3a58c6 8ef9310 d558c26 8ef9310 58f3405 0498d1c 8ef9310 61c9f90 d558c26 85d956d 9586c71 85d956d e3a58c6 85d956d e3a58c6 85d956d |
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 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 |
import os
import speech_recognition as sr
import difflib
import gradio as gr
from transformers import pipeline
# Tạo thư mục audio nếu chưa tồn tại
if not os.path.exists('audio'):
os.makedirs('audio')
# Bước 1: Chuyển đổi âm thanh thành văn bản
def transcribe_audio(audio):
if audio is None:
return "No audio file provided." # Xử lý trường hợp không có tệp âm thanh
recognizer = sr.Recognizer()
audio_file = sr.AudioFile(audio)
with audio_file as source:
audio_data = recognizer.record(source)
try:
transcription = recognizer.recognize_google(audio_data)
return transcription
except sr.UnknownValueError:
return "Google Speech Recognition could not understand the audio"
except sr.RequestError as e:
return f"Error with Google Speech Recognition service: {e}"
# Bước 2: Tạo âm thanh phát âm cho các từ sai
def create_pronunciation_audio(word):
# Cập nhật mô hình ở đây nếu cần
tts = pipeline("text-to-speech", model="tts_models/en/ljspeech/fastspeech2_hifigan") # Mô hình TTS
audio_file_path = f"audio/{word}.wav"
tts(word, output_file=audio_file_path) # Tạo âm thanh từ văn bản
return audio_file_path
# Bước 3: So sánh văn bản đã chuyển đổi với đoạn văn bản gốc
def compare_texts(reference_text, transcribed_text):
word_scores = []
reference_words = reference_text.split()
transcribed_words = transcribed_text.split()
incorrect_words_audios = [] # Lưu trữ đường dẫn âm thanh cho các từ sai
sm = difflib.SequenceMatcher(None, reference_text, transcribed_text)
similarity_score = round(sm.ratio() * 100, 2)
# Tạo đầu ra HTML
html_output = f"<strong>Fidelity Class:</strong> {'CORRECT' if similarity_score > 50 else 'INCORRECT'}<br>"
html_output += f"<strong>Quality Score:</strong> {similarity_score}<br>"
html_output += f"<strong>Transcribed Text:</strong> {transcribed_text}<br>"
html_output += "<strong>Word Score List:</strong><br>"
# Tạo danh sách điểm số từ màu sắc
for i, word in enumerate(reference_words):
try:
if word.lower() == transcribed_words[i].lower():
html_output += f'<span style="color: green;">{word}</span> ' # Từ đúng màu xanh
elif difflib.get_close_matches(word, transcribed_words):
html_output += f'<span style="color: yellow;">{word}</span> ' # Từ gần đúng màu vàng
else:
html_output += f'<span style="color: red;">{word}</span> ' # Từ sai màu đỏ
# Tạo âm thanh phát âm cho từ sai
audio_file_path = create_pronunciation_audio(word)
incorrect_words_audios.append((word, audio_file_path))
except IndexError:
html_output += f'<span style="color: red;">{word}</span> ' # Từ tham chiếu không được chuyển đổi
# Cung cấp âm thanh cho các từ sai
if incorrect_words_audios:
html_output += "<br><strong>Pronunciation for Incorrect Words:</strong><br>"
for word, audio in incorrect_words_audios:
html_output += f'{word}: '
html_output += f'<audio controls><source src="{audio}" type="audio/wav">Your browser does not support the audio tag.</audio><br>'
return html_output
# Bước 4: Chức năng Text-to-Speech
def text_to_speech(paragraph):
audio_file_path = create_pronunciation_audio(paragraph) # Sử dụng hàm đã sửa
return audio_file_path
# Giao diện Gradio
def gradio_function(paragraph, audio):
transcribed_text = transcribe_audio(audio)
comparison_result = compare_texts(paragraph, transcribed_text)
return comparison_result
interface = gr.Interface(
fn=gradio_function,
inputs=[
gr.Textbox(lines=5, label="Input Paragraph"),
gr.Audio(type="filepath", label="Record Audio")
],
outputs="html",
title="Speech Recognition Comparison",
description="Input a paragraph, record your audio, and compare the transcription to the original text."
)
tts_interface = gr.Interface(
fn=text_to_speech,
inputs=gr.Textbox(lines=5, label="Input Paragraph to Read Aloud"),
outputs=gr.Audio(label="Text-to-Speech Output"),
title="Text-to-Speech",
description="This tool will read your input paragraph aloud."
)
# Kết hợp cả hai giao diện
demo = gr.TabbedInterface([interface, tts_interface], ["Speech Recognition", "Text-to-Speech"])
# Khởi động ứng dụng Gradio
demo.launch()
|