声纹检索
本文介绍了基于云原生数据仓库 AnalyticDB MySQL 版 的声纹识别解决方案和基于网约车司机敏感内容检测的实践案例。该解决方案可面向打车出行、多人会议、线下销售、AI录音笔、语音助手等场景,实现说话人身份的识别和说话内容质检,助力企业高效构建智能化声纹检索系统。
背景
在数字化时代,声音作为一种重要的生物特征标识,在身份认证、安全防控和智能交互等领域发挥着关键作用。声纹识别技术通过提取声音特征并转化为结构化向量,能够高效实现说话人验证与检索。
AnalyticDB for MySQL基于原生向量存储与检索能力,提供端到端的声纹识别解决方案,支持声纹对比、检索、聚类三大核心功能,并可扩展多人语音分离、语音转文本和文本质检等功能,助力您快速构建高精度声纹检索系统。
使用限制
目前声纹检索功能处于邀测中,如需使用,请提交工单联系技术支持开通此功能。
功能介绍
声纹对比
基于内置的声纹模型,提取原始语音中的声纹特征并将其转化为结构化向量。通过计算两段声音向量之间的相似度,判断其是否来自同一说话人,从而实现1:1的声纹身份验证。
声纹检索
利用声纹特征向量与高效的索引机制,从已构建的声纹库中快速检索目标说话人。该功能支持1:N的声纹识别场景,适用于大规模声纹库中的高效身份匹配。
声纹聚类
采用无监督学习技术,对未标注的语音数据进行分析,根据说话人身份自动完成分类。该功能可有效处理多人语音场景,实现语音数据的智能分组与管理。
功能使用
通过API接口调用
音频 Embedding - /audio/embedding
-
方法:
POST -
功能:生成音频的 Embedding 向量。
参数说明:
|
参数 |
类型 |
是否必填 |
说明 |
|
input_audio |
string |
是 |
输入音频 URL。 |
|
oss_ak |
string |
否 |
OSS AccessKey ID。 |
|
oss_sk |
string |
否 |
OSS AccessKey Secret。 |
|
oss_token |
string |
否 |
OSS STS Token。 |
|
start_time |
float |
否 |
开始时间戳。 |
|
end_time |
float |
否 |
结束时间戳。 |
调用示例:
curl -X POST "http://addr:8100/audio/embedding" \
-H "Authorization: Bearer {api-key}" \
-H "Content-Type: application/json" \
-d '{
"input_audio": "https://dashscope.oss-cn-beijing-internal.aliyuncs.com/samples/audio/paraformer/hello_world_female2.wav",
"start_time": 1220,
"end_time": 3200
}'
返回示例:
{
"code": 200,
"message": "success",
"result": [1.861976, 0.151182, -0.888397, ...]
}
声纹录入 - /voice/enroll
-
方法:
POST -
功能:录入新的声纹样本。
参数说明:
|
参数 |
类型 |
是否必填 |
说明 |
|
audio_url |
string |
是 |
输入音频 URL。 |
|
name |
string |
是 |
声纹名称。 |
调用示例:
curl -X POST "http://addr:8100/voice/enroll" \
-H "Authorization: Bearer {api-key}" \
-H "Content-Type: application/json" \
-d '{
"audio_url": "https://dashscope.oss-cn-beijing-internal.aliyuncs.com/samples/audio/paraformer/hello_world_female2.wav",
"name": "test1"
}'
返回示例:
{"code": 200, "message": "Voiceprint enrollment successful", "result": true}
声纹查询 - /voice/query
-
方法:
GET或POST -
功能:查询已录入的声纹记录。
参数说明:
|
参数 |
类型 |
是否必填 |
说明 |
|
name |
string |
否 |
声纹名称。 |
|
id |
integer |
否 |
声纹 ID。 |
调用示例:
curl "http://addr:8100/voice/query" \
-H "Authorization: Bearer {api-key}"
返回示例:
{
"code": 200,
"message": "Found 1 voiceprint records",
"result": [{"id": 1968033551534260224, "name": "test1", "location": null}]
}
声纹删除 - /voice/delete
-
方法:
DELETE或POST -
功能:删除指定的声纹记录。
参数说明:
|
参数 |
类型 |
是否必填 |
说明 |
|
name |
string |
二选一 |
声纹名称。与 id 参数至少填写一个。 |
|
id |
integer |
二选一 |
声纹 ID。与 name 参数至少填写一个。 |
调用示例:
curl -X POST "http://addr:8100/voice/delete" \
-H "Authorization: Bearer {api-key}" \
-H "Content-Type: application/json" \
-d '{
"name": "test1"
}'
返回示例:
{"code": 200, "message": "Voiceprint deletion successful", "result": true}
声纹检索 - /voice/search
-
方法:
POST -
功能:在音频中搜索最匹配的声纹。
参数说明:
|
参数 |
类型 |
是否必填 |
说明 |
|
audio_url |
string |
是 |
待搜索的音频文件 URL。 |
|
names |
array |
否 |
参与搜索的声纹名称列表。 |
|
top_k |
integer |
否 |
返回最相似的前 K 个结果,默认值为 1。 |
调用示例:
curl -X POST "http://addr:8100/voice/search" \
-H "Authorization: Bearer {api-key}" \
-H "Content-Type: application/json" \
-d '{
"audio_url": "https://dashscope.oss-cn-beijing-internal.aliyuncs.com/samples/audio/paraformer/hello_world_female2.wav",
"top_k": 1
}'
返回示例:
{
"code": 200,
"message": "Found 1 matching voiceprints",
"result": [{"name": "test1", "similarity": 0.99999994}]
}
ASR(语音转文本) - /bailian/funasr/asr
-
方法:
POST -
功能:基于阿里云百炼 FunASR 进行语音转文字。
参数说明:
|
参数 |
类型 |
是否必填 |
说明 |
|
source_url |
string |
是 |
音频文件在 OSS 的路径。 |
|
model_name |
string |
否 |
模型名,默认 |
|
diarization |
bool |
否 |
是否开启说话人分离,默认 |
|
speaker_count |
int |
否 |
说话人数量。不填会自动识别说话人数量。 |
|
output_type |
string |
否 |
输出格式类型。 |
|
lang |
string |
否 |
语言设置。支持的语种请参见阿里云百炼 FunASR 请求参数中的 language_hints。 |
|
diarization_mode |
string |
否 |
说话人分离结果的聚合维度,支持 |
调用示例:
curl -X POST "http://addr:8100/bailian/funasr/asr" \
-H "Authorization: Bearer {api-key}" \
-H "Content-Type: application/json" \
-d '{
"source_url": "https://dashscope.oss-cn-beijing-internal.aliyuncs.com/samples/audio/paraformer/hello_world_female2.wav",
"output_type": "json",
"diarization_mode": "sentence",
"model_name": "fun-asr-mtl",
"lang": "zh"
}'
返回示例:
{
"code": 200,
"message": "success",
"result": {
"file_url": "https://dashscope.oss-cn-beijing-internal.aliyuncs.com/samples/audio/paraformer/hello_world_female2.wav",
"properties": {
"audio_format": "pcm_s16le",
"channels": [0],
"original_sampling_rate": 16000,
"original_duration_in_milliseconds": 3834
},
"transcripts": [
{
"channel_id": 0,
"speakers": [
{
"speaker_id": 0,
"sentences": [
{
"sentence_id": 1,
"start_time": 100,
"end_time": 3300,
"text": "hello world,这里是阿里巴巴语音实验室。"
}
]
}
]
}
]
}
}
通过SQL调用
AnalyticDB for MySQL支持通过 AI 函数直接在 SQL 中实现声纹检索相关操作。
ai_audio_embed
生成音频的声纹 Embedding 向量。详细说明请参见 ai_audio_embed。
ai_audio_embed(text)
ai_audio_embed(model_name, text)
ai_audio_embed(model_name, text, options)
ai_audio_transcribe
将音频转录为文本。详细说明请参见 ai_audio_transcribe。
ai_audio_transcribe(url)
ai_audio_transcribe(model_name, url)
ai_audio_transcribe(model_name, url, options)
使用示例
创建声纹库表
CREATE DATABASE ai;
CREATE TABLE IF NOT EXISTS
ai.voiceTest (
id bigint NOT NULL AUTO_INCREMENT,
name varchar NOT NULL,
voiceprint_feature ARRAY<float>(512) ENCODE = 'no' COMPRESSION = 'no',
ANN INDEX idx_voiceprint_feature (voiceprint_feature),
PRIMARY KEY (id)
) INDEX_ALL = 'Y' STORAGE_POLICY = 'HOT' ENGINE = 'XUANWU'
TABLE_PROPERTIES = '{"format":"columnstore"}'
DISTRIBUTE BY HASH (id);
录入声纹
INSERT INTO ai.voiceTest (name, voiceprint_feature)
SELECT '{name}', ai_audio_embed('{audio_file}');
声纹查询
SELECT id, name FROM ai.voiceTest WHERE name = '{name}';
声纹删除
DELETE FROM ai.voiceTest WHERE name = '{name}';
声纹检索
SELECT name, similarity
FROM (
SELECT
name,
cosine_similarity(
voiceprint_feature,
ai_audio_embed('audio_embedding', '{audio_file}',
'{''start_time'':1000, ''end_time'':3000}')
) AS similarity
FROM ai.voiceTest
) t
ORDER BY similarity DESC
LIMIT 3;
应用案例:网约车司机行为安全监控与敏感内容检测
背景
某出行公司希望通过语音识别技术,对网约车内录制的音频进行分析,从多人对话中准确提取司机的语音片段,识别司机语音中是否存在违规内容。
通过AnalyticDB for MySQL提供的声纹识别解决方案,该公司成功构建了一套端到端的全流程系统,涵盖多人语音分离、降噪处理、语音转文本(ASR)、声纹库自动构建、声纹检索及文本内容质检等关键步骤。
方案流程
-
音频增强:对原始音频进行预处理,降低背景噪声并增强人声。
-
语音分离:通过说话人识别技术,将多人对话中的不同说话人语音分离出来,并标注每段语音的归属者。
-
语音切分:根据说话人识别结果,将原始音频按说话人分割为独立的语音片段,便于逐段处理和分析。
-
声纹识别与语音转文本:对每个音频片段应用声纹识别和语音转文本提取说话内容。
-
声纹检索:基于历史声纹库,快速匹配当前语音片段对应的司机身份。
-
内容质检:整合说话人身份与语音转文本的结果,利用大语言模型(LLM)对文本内容进行智能分析,检测是否存在违规内容。