声纹检索

更新时间:
复制为 MD 格式

本文介绍了基于云原生数据仓库 AnalyticDB MySQL 版 的声纹识别解决方案和基于网约车司机敏感内容检测的实践案例。该解决方案可面向打车出行、多人会议、线下销售、AI录音笔、语音助手等场景,实现说话人身份的识别和说话内容质检,助力企业高效构建智能化声纹检索系统。

背景

在数字化时代,声音作为一种重要的生物特征标识,在身份认证、安全防控和智能交互等领域发挥着关键作用。声纹识别技术通过提取声音特征并转化为结构化向量,能够高效实现说话人验证与检索。

AnalyticDB for MySQL基于原生向量存储与检索能力,提供端到端的声纹识别解决方案,支持声纹对比、检索、聚类三大核心功能,并可扩展多人语音分离、语音转文本和文本质检等功能,助力您快速构建高精度声纹检索系统。

使用限制

目前声纹检索功能处于邀测中,如需使用,请提交工单联系技术支持开通此功能。

功能介绍

声纹对比

基于内置的声纹模型,提取原始语音中的声纹特征并将其转化为结构化向量。通过计算两段声音向量之间的相似度,判断其是否来自同一说话人,从而实现1:1的声纹身份验证。

image

声纹检索

利用声纹特征向量与高效的索引机制,从已构建的声纹库中快速检索目标说话人。该功能支持1:N的声纹识别场景,适用于大规模声纹库中的高效身份匹配。

image

声纹聚类

采用无监督学习技术,对未标注的语音数据进行分析,根据说话人身份自动完成分类。该功能可有效处理多人语音场景,实现语音数据的智能分组与管理。

image

功能使用

通过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

  • 方法GETPOST

  • 功能:查询已录入的声纹记录。

参数说明

参数

类型

是否必填

说明

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

  • 方法DELETEPOST

  • 功能:删除指定的声纹记录。

参数说明

参数

类型

是否必填

说明

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

模型名,默认 fun-asr。可选模型请参见阿里云百炼 FunASR 模型列表

diarization

bool

是否开启说话人分离,默认 true

speaker_count

int

说话人数量。不填会自动识别说话人数量。

output_type

string

输出格式类型。url 返回结果文件临时链接,json 返回结构化数据,默认 url

lang

string

语言设置。支持的语种请参见阿里云百炼 FunASR 请求参数中的 language_hints。

diarization_mode

string

说话人分离结果的聚合维度,支持 wordsentencespeaker

调用示例

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)、声纹库自动构建、声纹检索及文本内容质检等关键步骤。

方案流程

image
  1. 音频增强:对原始音频进行预处理,降低背景噪声并增强人声。

  2. 语音分离:通过说话人识别技术,将多人对话中的不同说话人语音分离出来,并标注每段语音的归属者。

  3. 语音切分:根据说话人识别结果,将原始音频按说话人分割为独立的语音片段,便于逐段处理和分析。

  4. 声纹识别与语音转文本:对每个音频片段应用声纹识别和语音转文本提取说话内容。

  5. 声纹检索:基于历史声纹库,快速匹配当前语音片段对应的司机身份。

  6. 内容质检:整合说话人身份与语音转文本的结果,利用大语言模型(LLM)对文本内容进行智能分析,检测是否存在违规内容。