From a8701ad5df6255502c431fb749b4661ff4853e57 Mon Sep 17 00:00:00 2001
From: 志浩 <neo.dzh@alibaba-inc.com>
Date: 星期三, 02 八月 2023 15:26:01 +0800
Subject: [PATCH] TOLD/SOND: add utt2num_frame script

---
 egs/callhome/diarization/sond/finetune.sh                              |    7 ++++++-
 egs/callhome/diarization/sond/script/calc_num_frames.py                |   21 +++++++++++++++++++++
 egs/callhome/diarization/sond/script/calc_real_meeting_frame_labels.py |    6 +++---
 3 files changed, 30 insertions(+), 4 deletions(-)

diff --git a/egs/callhome/diarization/sond/finetune.sh b/egs/callhome/diarization/sond/finetune.sh
index 5a4842d..91e6798 100644
--- a/egs/callhome/diarization/sond/finetune.sh
+++ b/egs/callhome/diarization/sond/finetune.sh
@@ -180,9 +180,11 @@
     git lfs install
     git clone https://www.modelscope.cn/damo/speech_xvector_sv-en-us-callhome-8k-spk6135-pytorch.git
     mv speech_xvector_sv-en-us-callhome-8k-spk6135-pytorch ${expdir}/
+    echo "Done."
   fi
 
   for dset in callhome1/nonoverlap_0s callhome2/nonoverlap_0s; do
+    echo "Start to extract speaker embeddings for ${dset}"
     key_file=${datadir}/${dset}/wav.scp
     num_scp_file="$(<${key_file} wc -l)"
     _nj=$([ $inference_nj -le $num_scp_file ] && echo "$inference_nj" || echo "$num_scp_file")
@@ -207,6 +209,9 @@
         --sv_model_file ${sv_exp_dir}/sv.pth \
         --output_dir "${_logdir}"/output.JOB
     cat ${_logdir}/output.*/xvector.scp | sort > ${datadir}/${dset}/utt2xvec
+
+    python script/calc_num_frames.py ${key_file} ${datadir}/${dset}/utt2num_frames
+    echo "Done."
   done
 
 fi
@@ -219,7 +224,7 @@
     python -Wignore script/calc_real_meeting_frame_labels.py \
           ${datadir}/${dset} ${dumpdir}/${dset}/labels \
           --n_spk 8 --frame_shift 0.01 --nj 16 --sr 8000
-    find `pwd`/${dumpdir}/${dset}/labels -iname "*.lbl.mat" | awk -F'[/.]' '{print $(NF-2),$0}' | sort > ${datadir}/${dset}/labels.scp
+    find `pwd`/${dumpdir}/${dset}/labels/ -iname "*.lbl.mat" | awk -F'[/.]' '{print $(NF-2),$0}' | sort > ${datadir}/${dset}/labels.scp
   done
 
 fi
diff --git a/egs/callhome/diarization/sond/script/calc_num_frames.py b/egs/callhome/diarization/sond/script/calc_num_frames.py
new file mode 100644
index 0000000..b55ff75
--- /dev/null
+++ b/egs/callhome/diarization/sond/script/calc_num_frames.py
@@ -0,0 +1,21 @@
+import os
+import sys
+import soundfile as sf
+from funasr.utils.misc import load_scp_as_list
+
+
+if __name__ == '__main__':
+    wav_scp = sys.argv[1]
+    out_file = sys.argv[2]
+    frame_shift = 0.01
+
+    os.makedirs(os.path.dirname(out_file), exist_ok=True)
+
+    out_file = open(out_file, "wt")
+    for uttid, wav_path in load_scp_as_list(wav_scp):
+        wav, sr = sf.read(wav_path)
+        num_frame = wav.shape[0] // int(sr * frame_shift)
+        out_file.write(f"{uttid} {num_frame}\n")
+        out_file.flush()
+
+    out_file.close()
diff --git a/egs/callhome/diarization/sond/script/calc_real_meeting_frame_labels.py b/egs/callhome/diarization/sond/script/calc_real_meeting_frame_labels.py
index 58232d4..f295c0c 100644
--- a/egs/callhome/diarization/sond/script/calc_real_meeting_frame_labels.py
+++ b/egs/callhome/diarization/sond/script/calc_real_meeting_frame_labels.py
@@ -1,6 +1,6 @@
 import numpy as np
-from opennmt.utils.job_runner import MultiProcessRunnerV3
-from opennmt.utils.misc import load_scp_as_list, load_scp_as_dict
+from funasr.utils.job_runner import MultiProcessRunnerV3
+from funasr.utils.misc import load_scp_as_list, load_scp_as_dict
 import os
 import librosa
 import scipy.io as sio
@@ -90,7 +90,7 @@
     for mid, wav_path, rttms in task_list:
         meeting_labels, spk_list = build_labels(wav_path, rttms, args.n_spk, args.remove_sil,
                                                 args.sr, args.frame_shift)
-        save_path = os.path.join(args.out_dir, "{}.lbl".format(mid))
+        save_path = os.path.join(args.out_dir, "{}.lbl.mat".format(mid))
         sio.savemat(save_path, {"labels": meeting_labels.astype(bool), "spk_list": spk_list})
         # print mid
     return None

--
Gitblit v1.9.1