一、前置环境准备
本方案基于Python+百度免费声纹识别接口开发,所有依赖免费可用,零门槛上手,所有步骤可直接复制执行:
1. 安装Python
直接从官方地址下载对应系统的安装包:https://www.python.org/downloads/,安装过程中必须勾选「Add Python to PATH」选项,这是新手最容易遗漏的步骤,未勾选会导致后续命令无法执行。
2. 安装项目依赖
安装完成后,按下Win+R输入cmd打开命令提示符,直接执行以下命令安装所有依赖,使用清华源解决国内下载慢的问题:
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple flask baidu-aip sqlalchemy
如果执行提示pip不存在,替换为python -m pip install -i https://pypi.tuna.tsinghua.edu.cn/simple flask baidu-aip sqlalchemy即可。
二、申请声纹识别接口密钥
百度智能云声纹识别提供个人开发者免费额度,足够日常使用,申请步骤如下:
- 打开声纹识别产品页:https://cloud.baidu.com/product/speech/speaker
- 注册登录百度账号后,点击「立即开通」,按照提示完成个人实名认证(免费,1分钟完成)
- 进入控制台,点击「创建应用」,填写应用名称,勾选「声纹识别」权限,点击提交
- 创建完成后,在应用列表中即可看到你的
APP_ID、API_KEY、SECRET_KEY,复制保存下来,后续代码配置需要用到。
三、编写核心代码
在电脑任意位置新建一个文件夹,在文件夹内新建一个名为app.py的文本文件,将以下代码完整复制进去,然后替换代码开头的三个密钥为你刚才保存的内容:
```
from flask import Flask, request, render_template_string
from aip import AipSpeech
from sqlalchemy import create_engine, Column, String, Text
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker
替换为你自己申请的百度智能云密钥
APP_ID = '你的APP_ID'
API_KEY = '你的API_KEY'
SECRET_KEY = '你的SECRET_KEY'
app = Flask(__name__)
client = AipSpeech(APP_ID, API_KEY, SECRET_KEY)
初始化本地SQLite数据库存储档案
engine = create_engine('sqlite:///archive.db', echo=False)
Base = declarative_base()
Session = sessionmaker(bind=engine)
session = Session()
档案数据表结构
class Archive(Base):
__tablename__ = 'archives'
user_id = Column(String(50), primary_key=True)
archive_content = Column(Text)
Base.metadata.create_all(engine)
前端操作页面
HTML_PAGE = '''
声纹档案管理
声纹档案管理中心
'''
@app.route('/')
def index():
return render_template_string(HTML_PAGE)
声纹注册接口
@app.route('/register', methods=['POST'])
def register():
user_id = request.form['user_id']
content = request.form['content']
audio_file = request.files['audio']
audio_data = audio_file.read()
res = client.userRegister(audio_data, user_id, 16000)
if res['err_no'] == 0:
archive = Archive(user_id=user_id, archive_content=content)
if session.query(Archive).get(user_id):
session.delete(session.query(Archive).get(user_id))
session.commit()
session.add(archive)
session.commit()
return render_template_string(HTML_PAGE, content='声纹注册成功,你的档案已经加密保存')
return render_template_string(HTML_PAGE, content=f'注册失败,错误信息:{res["err_msg"]}')
声纹验证接口
@app.route('/verify', methods=['POST'])
def verify():
user_id = request.form['user_id']
audio_file = request.files['audio']
audio_data = audio_file.read()
archive = session.query(Archive).get(user_id)
if not archive:
return render_template_string(HTML_PAGE, content='该用户ID未注册,请先完成声纹注册')
res = client.verify(audio_data, user_id, 16000)
if res['err_no'] == 0 and res['result']['score'] >= 60:
return render_template_string(HTML_PAGE, content=archive.archive_content)
elif res['err_no'] == 0:
return render_template_string(HTML_PAGE, content='声纹验证不通过,请重新录制音频验证')
return render_template_string(HTML_PAGE, content=f'验证失败,错误信息:{res["err_msg"]}')
if __name__ == '__main__':
app.run(debug=True)
```
四、启动运行与功能测试
完成代码配置后,打开cmd命令提示符,使用cd 你的app.py所在文件夹路径进入项目文件夹,执行命令:python app.py
看到命令行输出 Running on http://127.0.0.1:5000就说明启动成功,打开浏览器访问这个地址即可使用:
- 注册绑定档案:填写自定义用户ID,输入你要保存的档案内容,上传一段10-15秒的wav格式音频(手机自带录音机可以导出wav格式,录制时保持周围安静,朗读固定内容即可),点击提交,提示成功就完成了。
- 验证查看档案:填写相同的用户ID,上传一段新录制的同内容音频,点击验证,验证通过后就能看到你的档案内容。
五、常见问题解决
- 音频格式不兼容报错:手机导出音频时选择wav格式,如果还是报错,转换为16位单声道16k采样率的wav即可,免费在线转换工具即可完成。
- 验证总是不通过:降低验证阈值,打开app.py,把代码里的
res['result']['score'] >= 60改成50,阈值范围0-100,越低要求越松。
- 接口调用提示额度不足:百度免费额度每天调用500次,个人使用完全足够,如果超出可以第二天再用,或者升级付费额度。
- 启动提示端口被占用:修改代码最后一行的
app.run(debug=True)改为app.run(debug=True, port=5001),换一个端口即可。