enroll_list

时间: 2024-01-08 18:21:04 浏览: 36
enroll_list是一个CSV文件,用于存储注册(enroll)的音频文件的信息。每一行代表一个注册音频文件,包含以下信息: - 音频文件的路径(path to enroll wav) - 注册音频文件对应的说话人(speaker) 你可以根据需要修改enroll_list.csv文件,将其中的路径指向你本地的注册音频文件。然后,运行评估脚本scoring.py,该脚本会根据enroll_list.csv中的注册音频文件和test_list.csv中的测试音频文件进行评估,并将结果存储在res/results.csv文件中。 范例:<<引用:修改cfg/enroll_list.csv和cfg/test_list.csv以指向您本地的注册/测试 wav 文件 运行评估: python3 scoring.py 结果将存储在res/results.csv。>> 你可以通过修改enroll_list.csv文件来指定你本地的注册音频文件。然后,运行评估脚本scoring.py来进行评估,并将结果存储在results.csv文件中。
相关问题

wav_list = glob.glob("C:\ResNet\TIMIT\TEST\*\*\*.wav") print(f'找到{len(wav_list)}个训练音频') speaker_name_list = [] all_wav_list = [] speaker_wav_dict = dict({}) enroll_list = [] for wav in wav_list: wav_split = wav.split('\\') d_r = wav_split[-3] speaker_name = wav_split[-2] wav_name = wav_split[-1] speaker_name_list.append(speaker_name) wav_path = f"{d_r}\{speaker_name}\{wav_name}" all_wav_list.append(wav_path) if speaker_name in speaker_wav_dict: speaker_wav_dict[speaker_name].append(wav_path) else: speaker_wav_dict[speaker_name] = [wav_path] enroll_list.append(wav_path) SpeakerNameList = set(speaker_name_list) f = open("TIMIT-testlist.txt", 'w') num_pairs = 4000 for i in range(num_pairs): if i % 2 == 0: # label==1 wav1 = random.sample(enroll_list, 1)[0] id1 = wav1.split('\\')[-2] wav2 = random.sample(speaker_wav_dict[id1], 1)[0] label = 1 else: # label==0 wav1 = random.sample(enroll_list, 1)[0] id1 = wav1.split('\\')[-2] wav2 = random.sample(all_wav_list, 1)[0] id2 = wav2.split('-')[0] if id1 == id2: continue label = 0 f.write("{} .\{} .\{}\n".format(label, wav1, wav2)) f.close()

这段代码是在使用TIMIT数据集创建一份测试集清单文件(TIMIT-testlist.txt),其中包含4000对音频(wav1, wav2)以及它们的标签(label)。具体流程如下: 1. 使用glob模块匹配TIMIT数据集TEST文件夹中所有的.wav文件,并统计数量。 2. 遍历所有.wav文件,将它们的路径存入all_wav_list列表中,并将每个speaker的第一条音频加入enroll_list列表中。 3. 构建speaker_wav_dict字典,键为说话人ID,值为该说话人的所有音频路径列表。 4. 遍历num_pairs次,每次随机选择两个音频wav1和wav2,并给它们标上0或1的标签。 5. 如果标签为1,则从enroll_list列表中随机选择一个音频作为wav1,再从该说话人的所有音频中随机选择一个作为wav2。 6. 如果标签为0,则从enroll_list列表中随机选择一个音频作为wav1,再从all_wav_list列表中随机选择一个作为wav2。要求wav2所属的说话人与wav1不同。 7. 将每对wav1和wav2以及它们的标签写入TIMIT-testlist.txt文件中。 这份测试集清单文件可以用于测试说话人识别模型的准确率。

#include "myapp.h" myapp::myapp(QObject *parent) : QObject(parent) { //创建并打开SQLite数据库 this->mydb = new SqOperator; mydb->openDb(); //创建数据表 mydb->createTable(); //这里分别新建的是登录和注册两个对象 this->login = new mylogin; this->login->show(); this->enroll = new myenroll; this->face = new chatInterface; this->tip = new tips; connect(login,&mylogin::sig_login,this,&myapp::judge); connect(login,&mylogin::sig_enroll,this,&myapp::show_enroll_face); connect(enroll,&myenroll::sig_enroll_info,this,&myapp::insertdb); } bool myapp::judge(QString usrname, QString usrpass) { qDebug()<<usrname<<usrpass; //查询全部数据,并且放入list中 QList<QString> list; mydb->queryTable(list); int i = 0; //当存在两个账号的时候,这里循环里面的if必定会进去,错误和正确都会提示,应该在正确之后直接结束判断,而错误提示则应该放在循环结束 for(i = 0 ; i < list.size() ; i=i+2) { if(usrname == list[i] || usrpass == list[i+1]) { this->face->show(); return true; } } this->tip->loginfail(); return false; } void myapp::show_enroll_face() { this->enroll->show(); } void myapp::insertdb(QString usrname,QString usrpass) { qDebug()<<usrname<<usrpass; info info1; info1.usrname = usrname; info1.usrpass = usrpass; if(mydb->singleInsertData(info1)) { this->tip->insertok(); } }用C++解释每一行代码的语法和作用

#include "myapp.h" //引入myapp.h头文件 myapp::myapp(QObject *parent) : QObject(parent) { //myapp类的构造函数,继承自QObject类,传入一个QObject类型的parent参数 //创建并打开SQLite数据库 this->mydb = new SqOperator; //创建SqOperator类的实例对象mydb mydb->openDb(); //调用mydb对象的openDb()函数,打开SQLite数据库 //创建数据表 mydb->createTable(); //调用mydb对象的createTable()函数,创建数据表 //这里分别新建的是登录和注册两个对象 this->login = new mylogin; //创建mylogin类的实例对象login this->login->show(); //调用login对象的show()函数,显示登录窗口 this->enroll = new myenroll; //创建myenroll类的实例对象enroll this->face = new chatInterface; //创建chatInterface类的实例对象face this->tip = new tips; //创建tips类的实例对象tip //连接信号和槽 connect(login,&mylogin::sig_login,this,&myapp::judge); //将login对象的sig_login信号连接到myapp类的judge槽函数 connect(login,&mylogin::sig_enroll,this,&myapp::show_enroll_face); //将login对象的sig_enroll信号连接到myapp类的show_enroll_face槽函数 connect(enroll,&myenroll::sig_enroll_info,this,&myapp::insertdb); //将enroll对象的sig_enroll_info信号连接到myapp类的insertdb槽函数 } bool myapp::judge(QString usrname, QString usrpass) { //myapp类的judge函数,返回值为bool类型,传入两个QString类型的参数usrname和usrpass qDebug()<<usrname<<usrpass; //输出usrname和usrpass参数的值 //查询全部数据,并且放入list中 QList<QString> list; //创建QList<QString>类型的实例对象list mydb->queryTable(list); //调用mydb对象的queryTable()函数,将查询结果存储到list对象中 int i = 0; //定义一个int类型的变量i并初始化为0 //当存在两个账号的时候,这里循环里面的if必定会进去,错误和正确都会提示,应该在正确之后直接结束判断,而错误提示则应该放在循环结束 for(i = 0 ; i < list.size() ; i=i+2) { //循环遍历list中的数据,每次循环i的值增加2 if(usrname == list[i] || usrpass == list[i+1]) { //如果usrname等于list[i]或usrpass等于list[i+1] this->face->show(); //调用face对象的show()函数,显示聊天窗口 return true; //返回true } } this->tip->loginfail(); //调用tip对象的loginfail()函数,弹出登录失败的提示框 return false; //返回false } void myapp::show_enroll_face() { //myapp类的show_enroll_face函数,无返回值,无参数 this->enroll->show(); //调用enroll对象的show()函数,显示注册窗口 } void myapp::insertdb(QString usrname,QString usrpass) { //myapp类的insertdb函数,无返回值,传入两个QString类型的参数usrname和usrpass qDebug()<<usrname<<usrpass; //输出usrname和usrpass参数的值 info info1; //创建info结构体的实例对象info1 info1.usrname = usrname; //将usrname赋值给info1结构体的usrname成员变量 info1.usrpass = usrpass; //将usrpass赋值给info1结构体的usrpass成员变量 if(mydb->singleInsertData(info1)) { //如果调用mydb对象的singleInsertData()函数插入数据成功 this->tip->insertok(); //调用tip对象的insertok()函数,弹出插入成功的提示框 } }

相关推荐

最新推荐

recommend-type

基于Java实现的明日知道系统.zip

基于Java实现的明日知道系统
recommend-type

NX二次开发uc1653 函数介绍

NX二次开发uc1653 函数介绍,Ufun提供了一系列丰富的 API 函数,可以帮助用户实现自动化、定制化和扩展 NX 软件的功能。无论您是从事机械设计、制造、模具设计、逆向工程、CAE 分析等领域的专业人士,还是希望提高工作效率的普通用户,NX 二次开发 Ufun 都可以帮助您实现更高效的工作流程。函数覆盖了 NX 软件的各个方面,包括但不限于建模、装配、制图、编程、仿真等。这些 API 函数可以帮助用户轻松地实现自动化、定制化和扩展 NX 软件的功能。例如,用户可以通过 Ufun 编写脚本,自动化完成重复性的设计任务,提高设计效率;或者开发定制化的功能,满足特定的业务需求。语法简单易懂,易于学习和使用。用户可以快速上手并开发出符合自己需求的 NX 功能。本资源内容 提供了丰富的中英文帮助文档,可以帮助用户快速了解和使用 Ufun 的功能。用户可以通过资源中的提示,学习如何使用 Ufun 的 API 函数,以及如何实现特定的功能。
recommend-type

zigbee-cluster-library-specification

最新的zigbee-cluster-library-specification说明文档。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

MATLAB柱状图在信号处理中的应用:可视化信号特征和频谱分析

![matlab画柱状图](https://img-blog.csdnimg.cn/3f32348f1c9c4481a6f5931993732f97.png) # 1. MATLAB柱状图概述** MATLAB柱状图是一种图形化工具,用于可视化数据中不同类别或组的分布情况。它通过绘制垂直条形来表示每个类别或组中的数据值。柱状图在信号处理中广泛用于可视化信号特征和进行频谱分析。 柱状图的优点在于其简单易懂,能够直观地展示数据分布。在信号处理中,柱状图可以帮助工程师识别信号中的模式、趋势和异常情况,从而为信号分析和处理提供有价值的见解。 # 2. 柱状图在信号处理中的应用 柱状图在信号处理
recommend-type

HSV转为RGB的计算公式

HSV (Hue, Saturation, Value) 和 RGB (Red, Green, Blue) 是两种表示颜色的方式。下面是将 HSV 转换为 RGB 的计算公式: 1. 将 HSV 中的 S 和 V 值除以 100,得到范围在 0~1 之间的值。 2. 计算色相 H 在 RGB 中的值。如果 H 的范围在 0~60 或者 300~360 之间,则 R = V,G = (H/60)×V,B = 0。如果 H 的范围在 60~120 之间,则 R = ((120-H)/60)×V,G = V,B = 0。如果 H 的范围在 120~180 之间,则 R = 0,G = V,B =
recommend-type

JSBSim Reference Manual

JSBSim参考手册,其中包含JSBSim简介,JSBSim配置文件xml的编写语法,编程手册以及一些应用实例等。其中有部分内容还没有写完,估计有生之年很难看到完整版了,但是内容还是很有参考价值的。
recommend-type

"互动学习:行动中的多样性与论文攻读经历"

多样性她- 事实上SCI NCES你的时间表ECOLEDO C Tora SC和NCESPOUR l’Ingén学习互动,互动学习以行动为中心的强化学习学会互动,互动学习,以行动为中心的强化学习计算机科学博士论文于2021年9月28日在Villeneuve d'Asq公开支持马修·瑟林评审团主席法布里斯·勒菲弗尔阿维尼翁大学教授论文指导奥利维尔·皮耶昆谷歌研究教授:智囊团论文联合主任菲利普·普雷教授,大学。里尔/CRISTAL/因里亚报告员奥利维耶·西格德索邦大学报告员卢多维奇·德诺耶教授,Facebook /索邦大学审查员越南圣迈IMT Atlantic高级讲师邀请弗洛里安·斯特鲁布博士,Deepmind对于那些及时看到自己错误的人...3谢谢你首先,我要感谢我的两位博士生导师Olivier和Philippe。奥利维尔,"站在巨人的肩膀上"这句话对你来说完全有意义了。从科学上讲,你知道在这篇论文的(许多)错误中,你是我可以依
recommend-type

MATLAB柱状图在数据分析中的作用:从可视化到洞察

![MATLAB柱状图在数据分析中的作用:从可视化到洞察](https://img-blog.csdnimg.cn/img_convert/1a36558cefc0339f7836cca7680c0aef.png) # 1. MATLAB柱状图概述** 柱状图是一种广泛用于数据可视化的图表类型,它使用垂直条形来表示数据中不同类别或组别的值。在MATLAB中,柱状图通过`bar`函数创建,该函数接受数据向量或矩阵作为输入,并生成相应的高度条形。 柱状图的优点在于其简单性和易于理解性。它们可以快速有效地传达数据分布和组别之间的比较。此外,MATLAB提供了广泛的定制选项,允许用户调整条形颜色、
recommend-type

已知自动控制原理中通过更高的频率特征来评估切割频率和库存——相位稳定。确定封闭系统的稳定性。求Wcp 和ψ已知W(p)=30•(0.1p+1)•(12.5p+1)/p•(10p+1)•(0.2p+1)•(p+1)

根据相位稳定的定义,我们需要找到一个频率 Wcp,使得相位满足 -ψ = -180°,即 ψ = 180°。此时系统的相位裕度为 0°,系统处于边缘稳定状态。 首先,我们需要将 W(p) 表示成极点和零点的形式。将分母和分子分别因式分解,得到: W(p) = 30 • (0.1p+1) • (12.5p+1) / [p • (10p+1) • (0.2p+1) • (p+1)] = 375p/(p+1) - 3750/(10p+1) + 750p/(0.2p+1) - 3750p/(10p+1) + 150p/(p+1) + 30 因此,系统的极点为 -1、-0.1、-0.2、