ctc القسري محاذاة
v0.2
من فضلك، قم بتمييز المشروع بنجمة على جيثب (انظر الزاوية العلوية اليمنى) إذا كنت تقدر مساهمتي في المجتمع!
توفر حزمة Python هذه طريقة فعالة لإجراء المحاذاة القسرية بين النص والصوت باستخدام نماذج Hugging Face المدربة مسبقًا. فهو يستفيد من قوة نماذج Wav2Vec2 وHuBERT وMMS للحصول على محاذاة دقيقة، مما يجعله أداة قوية لإنشاء مجموعات الكلام.
، وعتبة الدمج لدمج المقاطع، والمزيد.pip install git+https://github.com/MahmoudAshraf97/ctc-forced-aligner.git
ctc-forced-aligner --audio_path " path/to/audio.wav " --text_path " path/to/text.txt " --language " eng " --romanize
دعوى | وصف | تقصير |
---|---|---|
--audio_path | المسار إلى الملف الصوتي | مطلوب |
--text_path | المسار إلى الملف النصي | مطلوب |
--language | اللغة في كود ISO 639-3 | مطلوب |
--romanize | تمكين الكتابة بالحروف اللاتينية للنصوص غير اللاتينية أو للنماذج متعددة اللغات بغض النظر عن اللغة، وهو أمر مطلوب عند استخدام النموذج الافتراضي | خطأ شنيع |
--split_size | دقة المحاذاة: "جملة" أو "كلمة" أو "حرف" | "كلمة" |
--star_frequency | تكرار الرمز المميز : "المقطع" أو "الحواف" | "حواف" |
--merge_threshold | عتبة الدمج لدمج الشريحة | 0.00 |
--alignment_model | اسم نموذج المحاذاة | محمود أشرف/mms-300m-1130-المحاذاة القسرية |
--compute_dtype | حساب dtype للاستدلال | "تعويم 32" |
--batch_size | حجم الدفعة للاستدلال | 4 |
--window_size | حجم النافذة بالثواني لتقطيع الصوت | 30 |
--context_size | التداخل بين القطع في ثوان | 2 |
--attn_implementation | تنفيذ الاهتمام | "مشتاق" |
--device | الجهاز المستخدم للاستدلال: "cuda" أو "cpu" | "cuda" إذا كان متاحًا، وإلا "cpu" |
# Align an English audio file with the text file
ctc-forced-aligner --audio_path " english_audio.wav " --text_path " english_text.txt " --language " eng " --romanize
# Align a Russian audio file with romanized text
ctc-forced-aligner --audio_path " russian_audio.wav " --text_path " russian_text.txt " --language " rus " --romanize
# Align on a sentence level
ctc-forced-aligner --audio_path " audio.wav " --text_path " text.txt " --language " eng " --split_size " sentence " --romanize
# Align using a model with native vocabulary
ctc-forced-aligner --audio_path " audio.wav " --text_path " text.txt " --language " ara " --alignment_model " jonatasgrosman/wav2vec2-large-xlsr-53-arabic "
import torch
from ctc_forced_aligner import (
load_audio ,
load_alignment_model ,
generate_emissions ,
preprocess_text ,
get_alignments ,
get_spans ,
postprocess_results ,
)
audio_path = "your/audio/path"
text_path = "your/text/path"
language = "iso" # ISO-639-3 Language code
device = "cuda" if torch . cuda . is_available () else "cpu"
batch_size = 16
alignment_model , alignment_tokenizer = load_alignment_model (
device ,
dtype = torch . float16 if device == "cuda" else torch . float32 ,
)
audio_waveform = load_audio ( audio_path , alignment_model . dtype , alignment_model . device )
with open ( text_path , "r" ) as f :
lines = f . readlines ()
text = "" . join ( line for line in lines ). replace ( " n " , " " ). strip ()
emissions , stride = generate_emissions (
alignment_model , audio_waveform , batch_size = batch_size
)
tokens_starred , text_starred = preprocess_text (
text ,
romanize = True ,
language = language ,
)
segments , scores , blank_token = get_alignments (
emissions ,
tokens_starred ,
alignment_tokenizer ,
)
spans = get_spans ( tokens_starred , segments , blank_token )
word_timestamps = postprocess_results ( text_starred , spans , stride , scores )
سيتم حفظ نتائج المحاذاة في ملف يحتوي على المعلومات التالية بتنسيق JSON:
text
: النص المحاذي.segments
: قائمة بالمقاطع، يحتوي كل منها على وقت البداية والنهاية لمقطع النص المقابل.{
"text" : " This is a sample text to be aligned with the audio. " ,
"segments" : [
{
"start" : 0.000 ,
"end" : 1.234 ,
"text" : " This "
},
{
"start" : 1.234 ,
"end" : 2.567 ,
"text" : " is "
},
{
"start" : 2.567 ,
"end" : 3.890 ,
"text" : " a "
},
{
"start" : 3.890 ,
"end" : 5.213 ,
"text" : " sample "
},
{
"start" : 5.213 ,
"end" : 6.536 ,
"text" : " text "
},
{
"start" : 6.536 ,
"end" : 7.859 ,
"text" : " to "
},
{
"start" : 7.859 ,
"end" : 9.182 ,
"text" : " be "
},
{
"start" : 9.182 ,
"end" : 10.405 ,
"text" : " aligned "
},
{
"start" : 10.405 ,
"end" : 11.728 ,
"text" : " with "
},
{
"start" : 11.728 ,
"end" : 13.051 ,
"text" : " the "
},
{
"start" : 13.051 ,
"end" : 14.374 ,
"text" : " audio. "
}
]
}
المساهمات هي موضع ترحيب! لا تتردد في فتح قضية أو تقديم طلب سحب.
هذا المشروع مرخص بموجب ترخيص BSD، لاحظ أن النموذج الافتراضي لديه ترخيص CC-BY-NC 4.0، لذا تأكد من استخدام نموذج مختلف للاستخدام التجاري.
يعتمد هذا المشروع على عمل فريق FAIR MMS.