| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
|
|
| |
| |
|
|
| |
| import os, glob, shutil, subprocess |
|
|
| |
| _cands = glob.glob("/kaggle/input/*/vmc2026-track2") + glob.glob("/kaggle/input/**/vmc2026-track2", recursive=True) |
| TRACK2_SRC = _cands[0] if _cands else None |
| assert TRACK2_SRC, "Không thấy thư mục vmc2026-track2 — đã Add Input gói Track 2 chưa?" |
|
|
| WORK = "/kaggle/working/vmc2026-track2" |
| print("Track2 source :", TRACK2_SRC) |
|
|
| |
| if not os.path.exists(WORK): |
| print("Đang copy gói Track 2 ra working (vài phút)...") |
| shutil.copytree(TRACK2_SRC, WORK) |
| print("Số wav hiện có:", len(os.listdir(f"{WORK}/wav"))) |
|
|
| |
| |
| |
|
|
| |
| def sh(cmd): |
| print("$", cmd) |
| print(subprocess.run(cmd, shell=True, capture_output=True, text=True).stdout[-2000:]) |
|
|
| |
| sh("apt-get -qq update && apt-get -qq install -y sox make gcc") |
| sh("which sox && sox --version") |
|
|
| |
| SV56_DIR = "/kaggle/working/STL-2009" |
| SV56_BIN_DIR = f"{SV56_DIR}/src/sv56" |
| if not os.path.exists(f"{SV56_BIN_DIR}/sv56demo"): |
| sh("cd /kaggle/working && wget -q https://github.com/openitu/STL/archive/refs/tags/v2009.tar.gz") |
| sh("cd /kaggle/working && tar -xf v2009.tar.gz") |
| sh(f"cd {SV56_BIN_DIR} && make -f makefile.unx") |
| assert os.path.exists(f"{SV56_BIN_DIR}/sv56demo"), "Build sv56 thất bại — kiểm tra Internet=On + log make." |
|
|
| |
| os.environ["PATH"] = SV56_BIN_DIR + ":" + os.environ["PATH"] |
| sh("which sv56demo") |
|
|
| |
| |
|
|
| |
| def find_root(rel_path): |
| """Tìm thư mục ROOT trong /kaggle/input sao cho ROOT/rel_path tồn tại.""" |
| base = os.path.basename(rel_path) |
| for hit in glob.glob(f"/kaggle/input/**/{base}", recursive=True): |
| if hit.endswith(rel_path.replace("/", os.sep)) or hit.endswith(rel_path): |
| return hit[: -len(rel_path)].rstrip("/") |
| return None |
|
|
| |
| _esd_first = open(f"{WORK}/ESD_utts_train_dev.csv").readline().strip().split(",")[0] |
| _p = _esd_first.split("/") |
| ESD_REL = f"{_p[0]}/{_p[1]}/{_p[0]}_{_p[2]}" |
| ESD_ROOT = find_root(ESD_REL) |
|
|
| |
| _dt_first = open(f"{WORK}/DT_utts_train_dev.csv").readline().strip().split(",")[0] |
| DT_ROOT = find_root(_dt_first) |
|
|
| print("ESD_REL :", ESD_REL) |
| print("ESD_ROOT :", ESD_ROOT) |
| print("DT_ROOT :", DT_ROOT) |
| assert ESD_ROOT, "Không thấy ESD — đã Add Input 'Emotional Speech Dataset (ESD).zip' chưa?" |
| assert DT_ROOT, "Không thấy DailyTalk — đã Add Input 'dailytalk.zip' chưa?" |
|
|
| |
| |
|
|
| |
| GATHERED = f"{WORK}/gathered" |
| os.makedirs(GATHERED, exist_ok=True) |
|
|
| |
| n_esd = 0 |
| for line in open(f"{WORK}/ESD_utts_train_dev.csv"): |
| src_rel, dst = line.strip().split(",") |
| p = src_rel.split("/") |
| src = f"{ESD_ROOT}/{p[0]}/{p[1]}/{p[0]}_{p[2]}" |
| if os.path.exists(src): |
| shutil.copy(src, f"{GATHERED}/{dst}") |
| n_esd += 1 |
| else: |
| print("ESD thiếu:", src) |
|
|
| |
| n_dt = 0 |
| for line in open(f"{WORK}/DT_utts_train_dev.csv"): |
| src_rel, dst = line.strip().split(",") |
| src = f"{DT_ROOT}/{src_rel}" |
| if os.path.exists(src): |
| shutil.copy(src, f"{GATHERED}/{dst}") |
| n_dt += 1 |
| else: |
| print("DailyTalk thiếu:", src) |
|
|
| print(f"Đã gom: ESD {n_esd}/1379 · DailyTalk {n_dt}/38 · tổng {len(os.listdir(GATHERED))}") |
|
|
| |
| |
|
|
| |
| |
| sh(f"bash {WORK}/sv56scripts/batch_normRMSE.sh {GATHERED}") |
|
|
| |
| moved = 0 |
| for n in os.listdir(GATHERED): |
| if n.endswith("_norm.wav"): |
| final = "_".join(n.split("_")[:-1]) + ".wav" |
| shutil.move(f"{GATHERED}/{n}", f"{WORK}/wav/{final}") |
| moved += 1 |
| print("Đã chuẩn hóa & move vào wav/:", moved, "file") |
|
|
| |
| |
|
|
| |
| total = len(glob.glob(f"{WORK}/wav/*.wav")) |
| print("Tổng wav trong wav/:", total) |
| if total == 15477: |
| shutil.rmtree(GATHERED, ignore_errors=True) |
| |
| shutil.rmtree(SV56_DIR, ignore_errors=True) |
| for f in glob.glob("/kaggle/working/v2009.tar.gz"): |
| os.remove(f) |
| print("✅ ĐỦ 15.477 file. Sẵn sàng Save Version → tạo Dataset.") |
| print(" Dùng dataset này cho notebook baseline: DATA_ROOT = '/kaggle/input/<dataset-mới>/vmc2026-track2'") |
| else: |
| print(f"⚠️ Chưa đủ (đang {total}). Kiểm tra log bước 3-4 xem ESD/DailyTalk có thiếu file nào.") |
|
|
| |
| |
| |
| |
| |
|
|