声纹识别之Alize入门教程(三):I-vector
Alize完整的ivector例程,包括:数据准备、特征提取、训练以及测试等。最终生成的得分文件res/scores_PLDA_lengthnorm.txt,其含义参考GMM-UBM。
M S0002 1 BAC009S0002W0122 0.644295
M S0003 1 BAC009S0002W0122 0.520998
M S0004 1 BAC009S0002W0122 0.48462
M S0002 1 BAC009S0002W0123 0.65574
M S0003 1 BAC009S0002W0123 0.722522
M S0004 1 BAC009S0002W0123 0.434874
利用自己的数据训练,只需要按照data/目录下对应的文件夹进行添加/删除即可。修改gmm/ivector/plda等参数配置,只需要修改cfg/目录下对应的文件即可。
data/目录如下:
1.提取特征(01_extraction_feature.py)
提取特征,并产生相应的lst文件。
import os
def gen_lst (src_fpath, lst_fpath):
''' 用于产生.lst文件
src_fpath 为UBM的wav文件路径,src_fpath = './data/ubm'
lst_fpath 为UBM.lst存放路径,lst_fpath = './lst/UBM.lst'
'''flist=open(lst_fpath,'w')
spks = os.listdir(src_fpath)
spks.sort()
for spk in spks:
spk_path = os.path.join(src_fpath,spk)
spk_files = os.listdir(spk_path)
spk_files.sort()
for file in spk_files:
if file[-4:] != '.wav':
print('%s not .wav file'%(file))
continue
flist.write(file[0:-4]+'\n');
flist.close()def extraction_feature(src_path):
'''提取特征
src_path = './data/ubm'
'''
spks = os.listdir(src_path)
spks.sort()
for spk in spks:
spk_path = os.path.join(src_path,spk)
if not os.path.isdir(spk_path):
continue
spk_files = os.listdir(spk_path)
spk_files.sort()
for file in spk_files:
if file[-4:] != '.wav':
print('%s not .wav file'%(file))
continue
COMMAND_LINE = '%s%s%s%s%s'%('bin\\sfbcep.exe -m -k 0.97 -p19 -n 24 -r 22 -e -D -A -F wave ',
os.path.join(spk_path,file),' ./data/prm/',file[:-4],'.tmp.prm')
os.system(COMMAND_LINE)
print('%s'%(COMMAND_LINE))if __name__== "__main__" :
src_ubm = './data/ubm'
lst_ubm = './lst/UBM.lst'
gen_lst (src_ubm, lst_ubm)src_test = './data/test'
lst_test = './lst/test.lst'
gen_lst (src_test, lst_test)src_train = './data/train'
lst_train = './lst/train.lst'
gen_lst (src_train, lst_train)# 提取特征
extraction_feature(src_ubm)
extraction_feature(src_test)
extraction_feature(src_train)
2.数据及特征处理(02_RUN_spro_front-end.py)
能量检测(VAD)、特征归一化。
CMD_NORM_E="bin\\NormFeat.exe --config cfg/NormFeat_energy_SPro.cfg --inputFeatureFilename data/data.lst --featureFilesPath data/prm/"
os.system(CMD_NORM_E)
CMD_ENERGY="bin\\EnergyDetector.exe --config cfg/EnergyDetector_SPro.cfg --inputFeatureFilename data/data.lst --featureFilesPath data/prm/ --labelFilesPath data/lbl/"
os.system(CMD_ENERGY)
CMD_NORM="bin\\NormFeat.exe --config cfg/NormFeat_SPro.cfg --inputFeatureFilename data/data.lst --featureFilesPath data/prm/ --labelFilesPath data/lbl/"
os.system(CMD_NORM)
3.产生ndx配置文件(03_gen_ndx.py)
import os
def gen_ndx (src_fpath, lst_fpath):
''' 用于产生.ndx文件
lst_fpath = ndx/ivExtractor.ndx
'''flist=open(lst_fpath,'w')
spks = os.listdir(src_fpath)
spks.sort()
for spk in spks:
flist.write(spk+' ')
spk_path = os.path.join(src_fpath,spk)
spk_files = os.listdir(spk_path)
spk_files.sort()
for file in spk_files:
if file[-4:] != '.wav':
print('%s not .wav file'%(file))
continue
flist.write(file[0:-4]+' ')
flist.write('\n')
flist.close()def gen_ivndx (src_fpath, lst_fpath):
'''
'''flist=open(lst_fpath,'w')
spks = os.listdir(src_fpath)
spks.sort()
for spk in spks:
spk_path = os.path.join(src_fpath,spk)
spk_files = os.listdir(spk_path)
spk_files.sort()
for file in spk_files:
if file[-4:] != '.wav':
print('%s not .wav file'%(file))
continue
flist.write(file[0:-4]+' '+file[0:-4]+'\n');
flist.close()def gen_pladndx (src_fpath, lst_fpath):
''' 用于产生.ndx文件
lst_fpath = ndx/ivExtractor.ndx
'''
flist=open(lst_fpath,'w')
spks = os.listdir(src_fpath)
spks.sort()
for spk in spks:
#flist.write(spk+' ')
spk_path = os.path.join(src_fpath,spk)
spk_files = os.listdir(spk_path)
spk_files.sort()
for file in spk_files:
if file[-4:] != '.wav':
print('%s not .wav file'%(file))
continue
flist.write(file[0:-4]+' ')
flist.write('\n')
flist.close()if __name__== "__main__" :
'''???
'''
src_train = './data/train'
lst_train = 'ndx/ivExtractor_train.ndx'
gen_ivndx (src_train, lst_train)src_test = './data/test'
lst_test = 'ndx/ivExtractor_test.ndx'
gen_ivndx (src_test, lst_test)gen_ivndx ('data/ubm', 'ndx/ivExtractor_ubm.ndx')
filelist = ['ndx/ivExtractor_ubm.ndx','ndx/ivExtractor_train.ndx','ndx/ivExtractor_test.ndx']
newfile=open('ndx/ivExtractor.ndx','w')
for item in filelist:
for txt in open(item,'r'):
newfile.write(txt)newfile.close()
'''
'''
src_plda = './data/ubm'
lst_plda = 'ndx/Plda.ndx'
gen_pladndx (src_plda, lst_plda)src_plda = './data/ubm'
lst_plda = 'ndx/ivNorm.ndx'
gen_pladndx (src_plda, lst_plda)#trainModel.ndx
src_train = './data/train'
lst_train = 'ndx/trainModel.ndx'
gen_ndx (src_train, lst_train)#ivTest_plda_target-seg.ndx
src_test = './data/test'
# src_train
ndx_fpath = 'ndx/ivTest_plda_target-seg.ndx'
flist=open(ndx_fpath,'w')
spks_train = os.listdir(src_train)
spks = os.listdir(src_test)
spks.sort()
for spk in spks:
spk_path = os.path.join(src_test,spk)
spk_files = os.listdir(spk_path)
spk_files.sort()
for file in spk_files:
if file[-4:] != '.wav':
print('%s not .wav file'%(file))
continue
flist.write(file[0:-4]+' ')
for spk_train in spks_train:
flist.write(spk_train+' ')
flist.write('\n')
flist.close()
4.提取ivector特征并进行plda打分测试(04_RUN_i-vector_and_plda_test.py)
# 1. UBM training
print( "Train Universal Background Model by EM algorithm")
CMD_LINE = "bin\\TrainWorld.exe --config cfg/TrainWorld.cfg "
os.system(CMD_LINE)# 2. Total Variability matrix Estimation
print( "Train TotalVariability matrix")
CMD_LINE = "bin\\TotalVariability.exe --config cfg/TotalVariability.cfg"
os.system(CMD_LINE)
# 3. I-vector extraction
print( "Extract i-vectors")
CMD_LINE = "bin\\IvExtractor.exe --config cfg/ivExtractor.cfg "
os.system(CMD_LINE)# 1. I-vector Normalization
print( "Normalize i-vectors")
CMD_LINE = "bin\\IvNorm.exe --config cfg/ivNorm.cfg "
os.system(CMD_LINE)
# 2. PLDA Training
print( "Train Probabilistic Linear Discriminant Analysis model")
CMD_LINE = "bin\\PLDA.exe --config cfg/Plda.cfg "
os.system(CMD_LINE)
# 3. PLDA Testing
print( "Compare models to test segments using PLDA native scoring")
CMD_LINE = "bin\\IvTest.exe --config cfg/ivTest_Plda.cfg "
os.system(CMD_LINE)
完整代码下载地址:https://download.csdn.net/download/u012594175/11100607
声纹识别交流QQ群:875705987
声纹识别之Alize入门教程(三):I-vector相关推荐
- 基于深度学习的声纹识别
一.选题 1.1 题目: 基于深度学习的声纹识别 1.2 研究内容: ① 研究用于声纹识别的语音参数以及这些参数对声纹识别性能的影响. ② 研究声纹识别的传统方法及性能. ③ 在研究声纹识别的传统方法 ...
- 批训练、注意力模型及其声纹分割应用,谷歌三篇论文揭示其声纹识别技术原理
声纹识别技术在谷歌的诸多产品中有着重要应用.除了安卓手机目前所独有的声纹解锁功能外,谷歌的家庭语音助手 Google Home 也能通过声纹识别支持多用户模式,从而针对不同用户提供个性化服务.当你向 ...
- 声纹技术(三):声纹识别技术
3.1 声纹识别:声纹技术的核心 3.1.1 名称与概念 广义上讲,声纹技术是一个宽泛的概念,其包含了许多不同的技术及应用.在所有这些技术中,声纹识别技术是其他技术的基础.无论是第5 章将要介绍的声纹 ...
- 声纹识别(说话人识别)技术
说话人识别(Speaker Recognition,SR),又称声纹识别(Voiceprint Recognition,VPR),顾名思义,即通过声音来识别出来"谁在说话",是根据 ...
- 中国AI又夺一冠!依图刷榜全球声纹识别挑战赛,刷新纪录,大比分夺魁
鱼羊 发自 凹非寺 量子位 出品 | 公众号 QbitAI 中国军团,继续刷新全球AI各项竞赛. 这一次,是全球声纹识别竞赛:这一次,是独角兽依图. VoxCeleb说话人识别挑战赛,简称VoxSRC ...
- 声纹识别开源工具 ASV-Subtools
今天非常荣幸有机会在Speechhome语音技术研讨会上分享我们团队在开源项目上的一些工作.今天我分享的主题是声纹识别开源工具ASV-Subtools. 今天我分享的主要有5个部分的内容,分别是背景介 ...
- 声纹识别概述(1)初识
声纹识别 1. 声纹概念 2. 声纹识别的分类 3. 声纹识别的原理 4. 声纹识别的关键 特征提取 模式识别 5. 声纹识别的技术指标 6. 影响声纹识别水平的因素 初识声纹 1. 声纹概念 声波频 ...
- 声纹识别开源代码工具
声纹识别,也称为说话人识别,主要的开源工具有: 1.MSR Identity Toolkit ,微软开源的工具箱,MATLAB版本,包含GMM-UBM和I-vector的demo,简单易用. 2.Al ...
- 《ASV-Subtools 声纹识别实战》课程
AI工匠学堂https://xjw.h5.xeknow.com/s/2XhsYq ASV-Subtools简介 近年来,随着深度学习的快速发展,简单易用.性能稳定.开发高效的深度学习框架越来越被科研和 ...
- 一文看懂“声纹识别VPR” | AI产品经理需要了解的AI技术概念_团员分享_@cony
前言:声纹识别是AI领域中一个看似很小.但其实有机会在近期落地,且比较有意思的细分方向:本文作者是"AI产品经理大本营"团员@cony ,她总结了AI产品经理"最必要& ...
最新文章
- ECLIPSE 如何导入文件?
- Hadoop综合大作业补交4次作业:获取全部校园新闻,网络爬虫基础练习,中文词频统计,熟悉常用的Linux操作...
- 类加载过程(加载+验证+准备+解析+初始化)
- 【php】命名空间的影响
- mac插网线不能上网_实现两个无线路由器之间的连接,最稳定的方式是使用网线连接...
- 【HDU - 1085 】Holding Bin-Laden Captive! (母函数)
- QT学习笔记:常用快捷键总结表
- 0.5px边框,css及sass
- 头条白板面试_如何在白板上组织您的想法并粉碎技术面试
- hdu4848 求到达每一个点总时间最短(sum[d[i]])。
- java 实现内存数据表_数据结构 Java中的内存
- K3打印单据,提示:等待C盘释放空间,内存不足
- numpy教程:numpy基本数据类型及多维数组元素存取
- 人脸关键点数据集整理
- 【安全测试工具】Drozer介绍及使用
- 红石32位cpu通用计算机,【TRP|HappyWater】32位红石电脑RSC-3230(无命令方块)
- python 坐标轴单位标注_matlab坐标轴如何带单位标注?
- 官方完整HL7 ECG-XML例子及注释翻译(1)
- Redis(2) redis-cli 客户端操作Redis - 常用命令大全
- Altium Designer 20新手上路(一)常见网站及插件推荐
热门文章
- 《杂记》- 之- 使用windows终端命令查看文件的MD5
- aida64怎么测试cpu稳定性_如何对超频内存和CPU进行稳定性测试(图文详细版α1.55*)...
- 实时渲染和离线渲染的区别
- ppt保存为高分辨率图片(ppt2016)
- 【CodingNoBorder - 10】无际软工队 - 求职岛:ALPHA 阶段事后分析
- Ubuntu安装语言包
- 迅为4412开发板上的步进电机小知识
- Perl教程-1.Perl简介
- win10怎样获得计算机管理员权限,详解Win10获取管理员权限的具体方法
- java 纳秒 毫秒,秒(s) 毫秒(ms) 微秒(μs) 纳秒(ns) 皮秒(ps)及Java获得