Pytorch-TIMIT说话人识别
先上链接:
码云(包括代码和模型以及测试数据):https://gitee.com/djc_QRICK/timit-pytorch
简化
删掉了很多乱七八糟的东西,剩下的就是非常纯净的代码和模型
整个代码的功能仅仅包括模型的输入和预测,以及预先训练的模型
- 模型采用Sincnet
- 数据集采用TIMIT
- 整体上来说这是个CSI系统也就是闭集的说话人识别
- 适合想做黑白盒攻击的朋友们使用
- 基于pytorch1.6 最好有cuda,没有cuda需要微调代码(影响不大)
效果图
- TIMIT数据集中一共462个人
- 输出的向量是一个462维度的结构,代表了462个人的概率
代码结构解释
文件结构
结构如下:
- DR1是我放着用来存放测试用例的文件,里面包含了两个人说的各种话
- prefile包括了配置文件cfg,以及预训练模的模型pkl
- 还有包括了根据说话人得到index的文件speaker_label.plk以及根据 index得到说话人的文件TIMIT_labels.npy
- 我在Sincnet.py中写了如何通过label获得人名以及更加人名获得label
- 注意虽然文件中的人名是大写,但是plk以及npy文件中的人名是小写
代码如下
#更具人名获得标签 index
#注意:标签里面都是小写的所以输入的时候要把大写的人变成小写
def get_label_by_name(speaker_name,filename='prefile/speaker_label.plk'):
with open(filename,'rb')as f:
data=pickle.load(f)
return data[speaker_name]
#根据标签获得人名,获得的人名也是小写的
def get_name_by_label(label_index,filename="prefile/TIMIT_labels.npy"):
data=np.load(filename,allow_pickle=True).item()
for (k,v) in data.items():
if v==label_index:
return k.split('/')[2]
return None
代码展示
下载好了直接运行Sincnet.py文件就行了