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 题目: 基于深度学习的声纹识别 1.2 研究内容: ① 研究用于声纹识别的语音参数以及这些参数对声纹识别性能的影响. ② 研究声纹识别的传统方法及性能. ③ 在研究声纹识别的传统方法 ...

  2. 批训练、注意力模型及其声纹分割应用,谷歌三篇论文揭示其声纹识别技术原理

    声纹识别技术在谷歌的诸多产品中有着重要应用.除了安卓手机目前所独有的声纹解锁功能外,谷歌的家庭语音助手 Google Home 也能通过声纹识别支持多用户模式,从而针对不同用户提供个性化服务.当你向 ...

  3. 声纹技术(三):声纹识别技术

    3.1 声纹识别:声纹技术的核心 3.1.1 名称与概念 广义上讲,声纹技术是一个宽泛的概念,其包含了许多不同的技术及应用.在所有这些技术中,声纹识别技术是其他技术的基础.无论是第5 章将要介绍的声纹 ...

  4. 声纹识别(说话人识别)技术

    说话人识别(Speaker Recognition,SR),又称声纹识别(Voiceprint Recognition,VPR),顾名思义,即通过声音来识别出来"谁在说话",是根据 ...

  5. 中国AI又夺一冠!依图刷榜全球声纹识别挑战赛,刷新纪录,大比分夺魁

    鱼羊 发自 凹非寺 量子位 出品 | 公众号 QbitAI 中国军团,继续刷新全球AI各项竞赛. 这一次,是全球声纹识别竞赛:这一次,是独角兽依图. VoxCeleb说话人识别挑战赛,简称VoxSRC ...

  6. 声纹识别开源工具 ASV-Subtools

    今天非常荣幸有机会在Speechhome语音技术研讨会上分享我们团队在开源项目上的一些工作.今天我分享的主题是声纹识别开源工具ASV-Subtools. 今天我分享的主要有5个部分的内容,分别是背景介 ...

  7. 声纹识别概述(1)初识

    声纹识别 1. 声纹概念 2. 声纹识别的分类 3. 声纹识别的原理 4. 声纹识别的关键 特征提取 模式识别 5. 声纹识别的技术指标 6. 影响声纹识别水平的因素 初识声纹 1. 声纹概念 声波频 ...

  8. 声纹识别开源代码工具

    声纹识别,也称为说话人识别,主要的开源工具有: 1.MSR Identity Toolkit ,微软开源的工具箱,MATLAB版本,包含GMM-UBM和I-vector的demo,简单易用. 2.Al ...

  9. 《ASV-Subtools 声纹识别实战》课程

    AI工匠学堂https://xjw.h5.xeknow.com/s/2XhsYq ASV-Subtools简介 近年来,随着深度学习的快速发展,简单易用.性能稳定.开发高效的深度学习框架越来越被科研和 ...

  10. 一文看懂“声纹识别VPR” | AI产品经理需要了解的AI技术概念_团员分享_@cony

    前言:声纹识别是AI领域中一个看似很小.但其实有机会在近期落地,且比较有意思的细分方向:本文作者是"AI产品经理大本营"团员@cony  ,她总结了AI产品经理"最必要& ...

最新文章

  1. ECLIPSE 如何导入文件?
  2. Hadoop综合大作业补交4次作业:获取全部校园新闻,网络爬虫基础练习,中文词频统计,熟悉常用的Linux操作...
  3. 类加载过程(加载+验证+准备+解析+初始化)
  4. 【php】命名空间的影响
  5. mac插网线不能上网_实现两个无线路由器之间的连接,最稳定的方式是使用网线连接...
  6. 【HDU - 1085 】Holding Bin-Laden Captive! (母函数)
  7. QT学习笔记:常用快捷键总结表
  8. 0.5px边框,css及sass
  9. 头条白板面试_如何在白板上组织您的想法并粉碎技术面试
  10. hdu4848 求到达每一个点总时间最短(sum[d[i]])。
  11. java 实现内存数据表_数据结构 Java中的内存
  12. K3打印单据,提示:等待C盘释放空间,内存不足
  13. numpy教程:numpy基本数据类型及多维数组元素存取
  14. 人脸关键点数据集整理
  15. 【安全测试工具】Drozer介绍及使用
  16. 红石32位cpu通用计算机,【TRP|HappyWater】32位红石电脑RSC-3230(无命令方块)
  17. python 坐标轴单位标注_matlab坐标轴如何带单位标注?
  18. 官方完整HL7 ECG-XML例子及注释翻译(1)
  19. Redis(2) redis-cli 客户端操作Redis - 常用命令大全
  20. Altium Designer 20新手上路(一)常见网站及插件推荐

热门文章

  1. 《杂记》- 之- 使用windows终端命令查看文件的MD5
  2. aida64怎么测试cpu稳定性_如何对超频内存和CPU进行稳定性测试(图文详细版α1.55*)...
  3. 实时渲染和离线渲染的区别
  4. ppt保存为高分辨率图片(ppt2016)
  5. 【CodingNoBorder - 10】无际软工队 - 求职岛:ALPHA 阶段事后分析
  6. Ubuntu安装语言包
  7. 迅为4412开发板上的步进电机小知识
  8. Perl教程-1.Perl简介
  9. win10怎样获得计算机管理员权限,详解Win10获取管理员权限的具体方法
  10. java 纳秒 毫秒,秒(s) 毫秒(ms) 微秒(μs) 纳秒(ns) 皮秒(ps)及Java获得