Silakan beri bintang pada proyek ini di github (lihat pojok kanan atas) jika Anda menghargai kontribusi saya kepada komunitas!
Paket Python ini menyediakan cara efisien untuk melakukan penyelarasan paksa antara teks dan audio menggunakan model Hugging Face yang telah dilatih sebelumnya. Ini memanfaatkan kekuatan model Wav2Vec2, HuBERT, dan MMS untuk penyelarasan yang akurat, menjadikannya alat yang ampuh untuk membuat korpus ucapan.
, ambang batas penggabungan untuk penggabungan segmen, dan banyak lagi.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
Argumen | Keterangan | Bawaan |
---|---|---|
--audio_path | Jalur ke file audio | Diperlukan |
--text_path | Jalur ke file teks | Diperlukan |
--language | Bahasa dalam kode ISO 639-3 | Diperlukan |
--romanize | Mengaktifkan romanisasi untuk skrip non-latin atau untuk model multibahasa apa pun bahasanya, diperlukan saat menggunakan model default | PALSU |
--split_size | Perincian penyelarasan: "kalimat", "kata", atau "char" | "kata" |
--star_frequency | Frekuensi token : "segmen" atau "tepi" | "tepi" |
--merge_threshold | Gabungkan ambang batas untuk penggabungan segmen | 0,00 |
--alignment_model | Nama model penyelarasan | MahmoudAshraf/mms-300m-1130-penyelaras paksa |
--compute_dtype | Hitung dtype untuk inferensi | "mengapung32" |
--batch_size | Ukuran batch untuk inferensi | 4 |
--window_size | Ukuran jendela dalam hitungan detik untuk potongan audio | 30 |
--context_size | Tumpang tindih antar potongan dalam hitungan detik | 2 |
--attn_implementation | Implementasi perhatian | "ingin sekali" |
--device | Perangkat yang digunakan untuk inferensi: "cuda" atau "cpu" | "cuda" jika tersedia, yang lain "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 )
Hasil penyelarasan akan disimpan ke file yang berisi informasi berikut dalam format JSON:
text
: Teks yang disejajarkan.segments
: Daftar segmen, masing-masing berisi waktu mulai dan berakhir dari segmen teks terkait.{
"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. "
}
]
}
Kontribusi dipersilakan! Silakan membuka terbitan atau mengirimkan permintaan penarikan.
Proyek ini dilisensikan di bawah Lisensi BSD, perhatikan bahwa model defaultnya memiliki Lisensi CC-BY-NC 4.0, jadi pastikan untuk menggunakan model yang berbeda untuk penggunaan komersial.
Proyek ini didasarkan pada karya tim FAIR MMS.