# 前言
本章介绍如何使用Tensorflow实现简单的声纹识别模型,首先你需要熟悉音频分类,没有了解的可以查看这篇文章[《基于Tensorflow实现声音分类》](https://blog.doiduoyi.com/articles/1587654005620.html) 。基于这个知识基础之上,我们训练一个声纹识别模型,通过这个模型我们可以识别说话的人是谁,可以应用在一些需要音频验证的项目。不同的是本项目使用了ArcFace Loss,ArcFace loss:Additive Angular Margin Loss(加性角度间隔损失函数),对特征向量和权重归一化,对θ加上角度间隔m,角度间隔比余弦间隔在对角度的影响更加直接。
**建议你使用这个版本 [VoiceprintRecognition-Pytorch](https://github.com/yeyupiaoling/VoiceprintRecognition-Pytorch) 或者 [VoiceprintRecognition-PaddlePaddle](https://github.com/yeyupiaoling/VoiceprintRecognition-PaddlePaddle) ,本项目已不维护。**
**欢迎大家扫码入知识星球或者QQ群讨论,知识星球里面提供项目的模型文件和博主其他相关项目的模型文件,也包括其他一些资源。**
<div align="center">
<img src="https://yeyupiaoling.cn/zsxq.png" alt="知识星球" width="400">
<img src="https://yeyupiaoling.cn/qq.png" alt="QQ群" width="400">
</div>
使用环境:
- Python 3.8
- Tensorflow 2.13.0
- Ubuntu 18.04 or Windows 10
# 模型下载
| 数据集 | 类别数量 | threshold | EER | 下载地址 |
|:-------------------------------------------------------------------:|:----:|:---------:|:---:|:--------:|
| [zhvoice](https://aistudio.baidu.com/aistudio/datasetdetail/133922) | 2798 | | | 加入知识星球获取 |
| [CN-Celeb](http://openslr.org/82/) | 2796 | | | 加入知识星球获取 |
| VoxCeleb1&2 | 7205 | | | 加入知识星球获取 |
# 安装环境
1. 安装Tensorflow,如果已经安装过Tensorflow,测无需再次安装。
```shell
pip install tensorflow==2.13.0 -i https://pypi.tuna.tsinghua.edu.cn/simple
```
如果安装麻烦,也可以使用Docker容器,但要提前安装[安装 NVIDIA Container Toolkit](https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/latest/install-guide.html)。
```shell
sudo docker pull tensorflow/tensorflow:2.13.0-gpu
sudo docker run -itd --gpus all --name tensorflow -v $PWD/:/workspace/ tensorflow/tensorflow:2.13.0-gpu
sudo docker exec -it tensorflow /bin/bash
```
2. 安装其他依赖库,命令如下。
```shell
pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
```
2. 如果需要安装pyaudio,请用conda命令安装,pip安装很难成功,命令如下。
```shell
conda install pyaudio
```
# 创建数据
本教程笔者使用的是[zhvoice](https://aistudio.baidu.com/aistudio/datasetdetail/133922) ,这个数据集经过处理,一共有2798个人的训练数据,91个人的评估数据,有80W+条语音数据。如果读者有其他更好的数据集,可以混合在一起使用,但要用python的工具模块aukit处理音频,降噪和去除静音。
首先是创建一个数据列表,数据列表的格式为`<语音文件路径\t语音分类标签>`,创建这个列表主要是方便之后的读取,也是方便读取使用其他的语音数据集,语音分类标签是指说话人的唯一ID,不同的语音数据集,可以通过编写对应的生成数据列表的函数,把这些数据集都写在同一个数据列表中。
在`create_data.py`创建数据列表,在创建数据列表之后,可能有些数据的是错误的,所以我们要检查一下,将错误的数据删除。执行下面程序完成数据准备。
```shell
python create_data.py
```
执行上面的程序之后,会生成以下的数据格式,如果要自定义数据,参考如下数据列表,前面是音频的相对路径,后面的是该音频对应的说话人的标签,就跟分类一样。
```
dataset/zhvoice/zhaishell/S0002/BAC009S0002W0129.mp3 1104
dataset/zhvoice/zhaishell/S0002/BAC009S0002W0130.mp3 1104
dataset/zhvoice/zhaishell/S0002/BAC009S0002W0131.mp3 1104
dataset/zhvoice/zhaishell/S0002/BAC009S0002W0132.mp3 1104
dataset/zhvoice/zhaishell/S0002/BAC009S0002W0133.mp3 1104
dataset/zhvoice/zhaishell/S0002/BAC009S0002W0134.mp3 1104
dataset/zhvoice/zhaishell/S0002/BAC009S0002W0135.mp3 1104
dataset/zhvoice/zhaishell/S0002/BAC009S0002W0136.mp3 1104
dataset/zhvoice/zhaishell/S0002/BAC009S0002W0137.mp3 1104
dataset/zhvoice/zhaishell/S0002/BAC009S0002W0138.mp3 1104
```
# 数据读取
有了上面创建的数据列表和均值标准值,就可以用于训练读取。主要是把语音数据转换短时傅里叶变换的幅度谱,使用librosa可以很方便计算音频的特征,如梅尔频谱的API为`librosa.feature.melspectrogram()`,输出的是numpy值,可以直接用PaddlePaddle训练和预测。跟梅尔频谱同样很重要的梅尔倒谱(MFCCs)更多用于语音识别中,对应的API为`librosa.feature.mfcc()`。在本项目中使用的API分别是`librosa.stft()`和`librosa.magphase()`。在训练时,使用了数据增强,如随机翻转拼接,随机裁剪。经过处理,最终得到一个`257*257`的短时傅里叶变换的幅度谱。
```python
wav, sr_ret = librosa.load(audio_path, sr=sr)
linear = librosa.stft(extended_wav, n_fft=n_fft, win_length=win_length, hop_length=hop_length)
linear_T = linear.T
mag, _ = librosa.magphase(linear_T)
mag_T = mag.T
freq, freq_time = mag_T.shape
spec_mag = mag_T[:, :spec_len]
mean = np.mean(spec_mag, 0, keepdims=True)
std = np.std(spec_mag, 0, keepdims=True)
spec_mag = (spec_mag - mean) / (std + 1e-5)
```
# 训练模型
创建`train.py`开始训练模型,使用的是经过修改过的`resnet34`模型,数据输入层设置为`[None, 1, 257, 257]`,这个大小就是短时傅里叶变换的幅度谱的shape,如果读者使用了其他的语音长度,也需要修改这个值。每训练一轮结束之后,执行一次模型评估,计算模型的准确率,以观察模型的收敛情况。同样的,每一轮训练结束保存一次模型,分别保存了可以恢复训练的模型参数,也可以作为预训练模型参数。还保存预测模型,用于之后预测。
```shell
python train.py
```
训练过程中,会使用tensorboard保存训练日志,通过启动tensorboard可以随时查看训练结果,启动命令`tensorboard --logdir=log --host 0.0.0.0`
<div align="center">
<img src="./docs/images/loss.jpg" alt="loss" width="400">
<img src="./docs/images/accuracy.jpg" alt="准确率" width="400">
</div>
# 评估模型
训练结束之后会保存预测模型,我们用预测模型来预测测试集中的音频特征,然后使用音频特征进行两两对比,阈值从0到1,步长为0.01进行控制,找到最佳的阈值并计算准确率。
```shell
python eval.py
```
输出类似如下:
```shell
----------- Configuration Arguments -----------
input_shape: (1, 257, 257)
list_path: dataset/test_list.txt
model_path: models/infer/model
------------------------------------------------
开始提取全部的音频特征...
100%|█████████████████████████████████████████████████████| 5332/5332 [01:09<00:00, 77.06it/s]
开始两两对比音频特征...
100%|█████████████████████████████████████████████████████| 5332/5332 [01:43<00:00, 51.62it/s]
100%|█████████████████████████████████████████████████████| 100/100 [00:03<00:00, 28.04it/s]
当阈值为0.99
没有合适的资源?快使用搜索试试~ 我知道了~
基于Python+Tensorflow实现声纹识别+源代码+文档说明
共23个文件
py:11个
wav:6个
jpg:2个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
5星 · 超过95%的资源 8 下载量 190 浏览量
2024-01-12
00:39:34
上传
评论 5
收藏 728KB ZIP 举报
温馨提示
基于Python+Tensorflow实现声纹识别+源代码+文档说明 - 不懂运行,下载完可以私聊问,可远程教学 该资源内项目源码是个人的毕设,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! <项目介绍> 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。 --------
资源推荐
资源详情
资源评论
收起资源包目录
VoiceprintRecognition-Tensorflow-develop.zip (23个子文件)
VoiceprintRecognition-Tensorflow-develop
eval.py 3KB
create_data.py 3KB
LICENSE 11KB
audio_db
李达康.wav 156KB
沙瑞金.wav 156KB
infer_recognition.py 3KB
utils
__init__.py 0B
loss.py 1KB
metrics.py 1KB
reader.py 3KB
utility.py 2KB
record.py 1KB
docs
images
loss.jpg 31KB
accuracy.jpg 33KB
audio
b_1.wav 158KB
a_2.wav 69KB
a_1.wav 115KB
b_2.wav 162KB
infer_contrast.py 2KB
requirements.txt 74B
.gitignore 41B
train.py 9KB
README.md 13KB
共 23 条
- 1
机智的程序员zero
- 粉丝: 2459
- 资源: 4741
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 2025计算机网络技术考试题及答案.docx
- 2025驾驶员交通安全知识测试题及答案.docx
- 2025继续教育公需课必修课考试题库附含答案.docx
- 2025家政服务考试题及答案.docx
- 工程造价咨询企业基于绩效的体系设计.doc
- 2018年造价咨询公司绩效提成方案.doc
- 工程造价从业人员绩效考核制度.doc
- 工程造价企业绩效考核细则.doc
- 工程造价咨询项目考核评分制度(试行).doc
- 项目管理有限公司造价咨询薪酬管理办法.doc
- 造价咨询公司绩效提成方法.doc
- 造价咨询公司薪酬管理办法.doc
- 2025驾照C1证考试科目一必考考试题库带答案.docx
- 2025建筑八大员(材料员基础知识)考试题与答案.docx
- 2025检验类之临床医学检验技术(士)真题库附答案.docx
- 咨询公司薪酬管理办法.doc
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
- 1
- 2
前往页