Views
No views yet
CAM++ speaker embedding model speech_campplus_sv_zh_en_16k-common_advanced (192-dim, trained on 200k speakers across VoxCeleb + CNCeleb + 3D-Speaker corpus)..bin, and the ModelScope ONNX is not always accessible outside China.| Spec | |
|---|---|
| Architecture | CAM++ (FCM + TDNN + DenseTDNN + StatsPool + Dense) |
| Input | 80-dim fbank, (batch, frames, 80) float32 |
| Output | 192-dim L2-normalized speaker embedding, (batch, 192) |
| Sample rate | 16 kHz |
| File size | 27 MB |
| Speakers (training) | ~200k (VoxCeleb 1+2 + CNCeleb 1+2 + 3D-Speaker) |
| Languages | Chinese + English (works well cross-lingual incl. Vietnamese) |
1import numpy as np
2import onnxruntime as ort
3import kaldi_native_fbank as knf
4import soundfile as sf
5from huggingface_hub import hf_hub_download
6
7# 1. Load model
8model_path = hf_hub_download("welcomyou/campplus-3dspeaker-200k-onnx",
9 "campplus_cn_en_common_200k.onnx")
10sess = ort.InferenceSession(model_path, providers=["CPUExecutionProvider"])
11
12# 2. Compute 80-dim fbank from 16kHz mono audio
13audio, sr = sf.read("speaker.wav", dtype="float32") # must be 16 kHz mono
14opts = knf.FbankOptions()
15opts.frame_opts.samp_freq = 16000
16opts.frame_opts.dither = 0.0
17opts.mel_opts.num_bins = 80
18fbank_extractor = knf.OnlineFbank(opts)
19fbank_extractor.accept_waveform(16000, audio * 32768.0)
20fbank_extractor.input_finished()
21frames = np.stack([fbank_extractor.get_frame(i)
22 for i in range(fbank_extractor.num_frames_ready)])
23frames -= frames.mean(axis=0, keepdims=True) # CMVN
24
25# 3. Run inference
26embedding = sess.run(None, {"input": frames[np.newaxis]})[0][0]
27print(embedding.shape) # (192,)
28
29# 4. Cosine similarity for verification
30emb_a = embedding / np.linalg.norm(embedding)
31# emb_b = ... (another speaker)
32# similarity = emb_a @ emb_b1# 1. Download PyTorch checkpoint from ModelScope
2pip install modelscope
3python -c "from modelscope import snapshot_download; \
4 snapshot_download('iic/speech_campplus_sv_zh_en_16k-common_advanced')"
5
6# 2. Run export script (re-implements CAM++ architecture + loads weights + exports ONNX)
7python convert_onnx/export_campplus_onnx.py \
8 --pt_path modelscope_cache/iic/speech_campplus_sv_zh_en_16k-common_advanced/campplus_cn_en_common.pt \
9 --onnx_path models/campp-3dspeaker/campplus_cn_en_common_200k.onnxconvert_onnx/export_campplus_onnx.py — copies FCM, TDNN, DenseTDNN, StatsPool, CAMPPlus modules from the 3D-Speaker repo, loads campplus_cn_en_common.pt, traces with torch.onnx.export.speech_campplus_sv_zh_en_16k-common_advanced (ModelScope)