You need to enable JavaScript to run this app.
AI 数据湖服务

AI 数据湖服务

复制全文
音频识别
说话人确认(ERes2Net)
复制全文
说话人确认(ERes2Net)

算子介绍

描述

AudioSpeakerVerificationEres2net 音频说话人验证处理器

核心功能

  • 说话人验证:判断两段音频是否为同一说话人,输出相似度分数
  • 多源音频支持:支持本地文件、URL、对象存储、base64、binary等多种音频输入类型
  • 批量处理:支持批量音频对的高效验证与异常处理

技术特性

  • 基于 ModelScope 框架加载 ERes2Net 说话人验证模型
  • 支持 GPU 多卡推理,自动选择或指定设备
  • 16kHz 采样率音频预处理,兼容多种音频格式

典型应用场景

  • ✅ 语音身份认证 - 说话人一致性验证
  • ✅ 智能客服 - 多通道语音归一化与核查
  • ✅ 语音数据清洗 - 自动化说话人去重

建议

  • 推荐将输入音频统一采样率为16kHz,提升验证准确性
  • 多卡环境下可通过 rank 参数灵活指定 GPU 设备

Daft 调用

算子参数

输入

输入列名

说明

speaker_a_audios

说话人A的音频 支持格式: - 音频文件路径(如 TOS url, S3 url, http(s) url, 本地路径) - 音频二进制数据 - 音频base64编码

speaker_b_audios

说话人B的音频 支持格式同上

输出

每对音频的说话人相似度分数(float),异常样本为 None

参数

如参数没有默认值,则为必填参数

参数名称

类型

默认值

描述

audio_src_type

str

音频格式类型 支持的音频格式类型,包含: - tos/http 地址(audio_url) - base64 编码(audio_base64) - 二进制流(audio_binary) 可选值:["audio_binary", "audio_url", "audio_base64"]

model_path

str

/opt/las/models

模型存储路径 默认值:"/opt/las/models"

model_name

str

iic/speech_eres2net_sv_zh-cn_16k-common

模型名称 默认值:"iic/speech_eres2net_sv_zh-cn_16k-common"

rank

int or None

None

指定使用的GPU设备编号(多卡环境有效) 例如:0表示第一张GPU,1表示第二张GPU。默认值:None(自动选择可用设备) 默认值:None

调用示例

下面的代码展示了如何使用 daft 运行算子确认两个音频中的说话人是否为同一人。

from __future__ import annotations

import logging
import os

import ray

import daft
from daft import col
from daft.las.functions.audio.audio_speaker_verification_eres2net import AudioSpeakerVerificationEres2net
from daft.las.functions.udf import las_udf

if __name__ == "__main__":
    if os.getenv("DAFT_RUNNER", "ray") == "ray":

        def configure_logging():
            logging.basicConfig(
                level=logging.INFO,
                format="%(asctime)s - %(name)s - %(levelname)s - %(message)s",
                datefmt="%Y-%m-%d %H:%M:%S.%s".format(),
            )
            logging.getLogger("tracing.span").setLevel(logging.WARNING)
            logging.getLogger("daft_io.stats").setLevel(logging.WARNING)
            logging.getLogger("DaftStatisticsManager").setLevel(logging.WARNING)
            logging.getLogger("DaftFlotillaScheduler").setLevel(logging.WARNING)
            logging.getLogger("DaftFlotillaDispatcher").setLevel(logging.WARNING)

        import ray

        ray.init(dashboard_host="0.0.0.0", runtime_env={"worker_process_setup_hook": configure_logging})
        daft.context.set_runner_ray()

    daft.set_execution_config(actor_udf_ready_timeout=600)
    daft.set_execution_config(min_cpu_per_task=0)

    tos_dir_url = os.getenv("TOS_DIR_URL", "las-cn-beijing-public-online.tos-cn-beijing.volces.com")
    samples = {
        "speaker_a": [f"https://{tos_dir_url}/public/shared_audio_dataset/参观八达岭长城。.wav"],
        "speaker_b": [f"https://{tos_dir_url}/public/shared_audio_dataset/参观八达岭长城。.wav"],
    }

    model_path = os.getenv("MODEL_PATH", "/opt/las/models")
    model_name = "iic/speech_eres2net_sv_zh-cn_16k-common"
    audio_src_type = "audio_url"
    rank = 0

    df = daft.from_pydict(samples)
    df = df.with_column(
        "speaker_verification_result",
        las_udf(
            AudioSpeakerVerificationEres2net,
            construct_args={
                "audio_src_type": audio_src_type,
                "model_path": model_path,
                "model_name": model_name,
                "rank": rank,
            },
            num_gpus=1,
            batch_size=1,
            concurrency=1,
        )(col("speaker_a"), col("speaker_b")),
    )

    df.show()

    # ╭────────────────────────────────┬────────────────────────────────┬─────────────────────────────╮
    # │ speaker_a                      ┆ speaker_b                      ┆ speaker_verification_result │
    # │ ---                            ┆ ---                            ┆ ---                         │
    # │ Utf8                           ┆ Utf8                           ┆ Float32                     │
    # ╞════════════════════════════════╪════════════════════════════════╪═════════════════════════════╡
    # │ tos://las-cn-beijing-public-o… ┆ tos://las-cn-beijing-public-o… ┆ 1                           │
    # ╰────────────────────────────────┴────────────────────────────────┴─────────────────────────────╯
最近更新时间:2026.01.08 19:15:09
这个页面对您有帮助吗?
有用
有用
无用
无用