LinTO-diarization是LinTO的说话人分离服务,具备猜测说话人数的能力,若提供目标说话人的语音样本,还可进行说话人识别。该服务既可作为独立的说话人分离服务使用,也可部署为微服务。
此Docker镜像基于_nvidia/cuda:12.3.2-runtime-ubuntu22.04_构建
分离服务需要Docker环境正常运行。
若需启用GPU功能,还需安装nvidia-container-toolkit。
使用GPU时,每个工作进程消耗的显存约为1GB。
任务模式下,分离服务的唯一入口是发布到Redis消息代理的任务。此外,为避免大型音频文件通过消息代理传输,分离服务使用挂载到/opt/audio的共享存储文件夹。
linto-diarization支持两种部署方式:
1- 第一步:构建或拉取镜像
bashgit clone [***] cd linto-diarization docker build . -t linto-diarization-simple:latest -f simple/Dockerfile
或
bashdocker pull lintoai/linto-diarization-simple
若需启用说话人识别,需运行Qdrant:
bashdocker run \ -p 6333:6333 \ # Qdrant默认端口 -v ./qdrant_storage:/qdrant/storage:z \ qdrant/qdrant
1- 配置.env文件
simple/.envdefault提供了.env文件示例。
环境变量参数:
| 变量名 | 描述 | 示例 |
|---|---|---|
SERVING_MODE | (必填)指定启动模式 | http |
CONCURRENCY | 主工作进程之外的额外工作进程数 | 0 | 1 | 2 | ... |
DEVICE | 嵌入模型使用的设备(默认:若GPU/CUDA可用则使用,否则使用CPU) | cpu | cuda | cuda:0 |
DEVICE_CLUSTERING | 聚类使用的设备(默认与DEVICE相同) | cpu | cuda | cuda:0 |
DEVICE_IDENTIFICATION | 说话人识别(若启用)使用的设备(默认与DEVICE相同) | cpu | cuda | cuda:0 |
NUM_THREADS | CPU运行任务的最大线程数 | 1 | 4 | ... |
CUDA_VISIBLE_DEVICES | 使用GPU/CUDA时的设备索引。多GPU机器建议同时设置CUDA_DEVICE_ORDER=PCI_BUS_ID | 0 | 1 | 2 | ... |
SPEAKER_SAMPLES_FOLDER | (默认:/opt/speaker_samples)目标说话人语音样本文件所在文件夹 | /path/to/folder |
SPEAKER_PRECOMPUTED_FOLDER | (默认:/opt/speaker_precomputed)存储预计算说话人嵌入向量的文件夹 | /path/to/folder |
QDRANT_HOST | Qdrant实例的主机地址 | localhost |
QDRANT_PORT | Qdrant实例的端口号 | 6333 |
QDRANT_COLLECTION | Qdrant中存储嵌入向量的集合名称 | speaker_embeddings |
QDRANT_RECREATE_COLLECTION | 是否重建集合,或使用挂载卷中的现有集合 | true |
2- 运行容器
以下命令启动容器,提供绑定到主机<HOST_SERVING_PORT>端口(如8080)的HTTP API:
bashdocker run --rm \ -v <SHARED_FOLDER>:/opt/audio \ -p <HOST_SERVING_PORT>:80 \ --env-file .env \ linto-diarization-simple:latest
若需启用说话人识别,需提供目标说话人的语音样本:样本可放在以说话人名称命名的独立文件夹中,或命名为说话人名称的独立文件中。然后将样本的父文件夹作为卷挂载到容器的/opt/speaker_samples(或通过SPEAKER_SAMPLES_FOLDER环境变量自定义的文件夹):
bashdocker run ... -v </path/to/speaker/samples/folder>:/opt/speaker_samples
启用说话人识别时,若要使用挂载到Qdrant容器卷中的现有集合,可设置环境变量QDRANT_RECREATE_COLLECTION=false,避免每次启动容器时的初始化时间。
如需启用GPU功能,可添加--gpus all参数;若有多块GPU,可设置CUDA_VISIBLE_DEVICES指定使用的GPU索引。
LinTO-diarization可作为微服务使用Celery部署。这种方式下,容器启动Celery工作进程,等待消息代理上的分离任务。
需在SERVICES_BROKER地址运行消息代理。
1- 配置.env文件
simple/.envdefault提供了.env文件示例。
环境变量参数: 参数与HTTP API相同,新增以下参数:
| 变量名 | 描述 | 示例 |
|---|---|---|
SERVING_MODE | (必填)指定启动模式 | task |
SERVICES_BROKER | 消息代理URI | redis://my_redis_broker:6379 |
BROKER_PASS | 消息代理密码(无密码则留空) | my_password |
QUEUE_NAME | 覆盖生成的队列名称(见下文队列名称) | my_queue |
SERVICE_NAME | 服务名称 | diarization-ml |
LANGUAGE | BCP-47语言代码 | en-US 或 * 或用|分隔的多种语言 |
MODEL_INFO | 模型的人类可读描述 | Multilingual diarization model |
2- 配置docker-compose.yml
#docker-compose.yml
yamlversion: '3.7' services: punctuation-service: image: linto-diarization-simple:latest volumes: - /path/to/shared/folder:/opt/audio env_file: .env deploy: replicas: 1 networks: - your-net networks: your-net: external: true
3- 使用docker compose启动
bashdocker stack deploy --resolve-image always --compose-file docker-compose.yml your_stack
队列名称:
默认服务队列名称为SERVICE_NAME。可通过QUEUE_NAME环境变量覆盖。
服务发现:
作为微服务时,实例会在服务注册中心注册自身信息以供发现。服务信息以JSON对象形式存储在Redis的db0中,键为service:{HOST_NAME}。
注册信息如下:
json{ "service_name": $SERVICE_NAME, "host_name": $HOST_NAME, "service_type": "diarization", "service_language": $LANGUAGE, "queue_name": $QUEUE_NAME, "version": "1.2.0", # 此仓库版本 "info": $MODEL_INFO, "last_alive": 65478213, "concurrency": 1 }
返回API状态
方法:GET
健康检查通过时返回"1"。
说话人分离API。
输入参数:
file:WAV音频文件speaker_count:(整数,可选)说话人数。若为空,分离服务将自动聚类。max_speaker:(整数,可选)说话人数未知时的最大说话人数。speaker_names:(字符串,可选)目标说话人名称列表,用于说话人识别(仅提供说话人样本时可用)。可能值:
响应(application/json)为以下结构的JSON对象:
json{ "speakers": [ {"spk_id": "spk5", "duration": 2.2, "nbr_seg": 1}, ... ], "segments": [ {"seg_id": 1, "spk_id": "spk5", "seg_begin": 0.0, "seg_end": 2.2}, ... ] }
/docs路由提供OpenAPI/swagger接口文档。
分离工作进程接受包含以下参数的请求:
file:(字符串)共享文件夹中的文件相对路径。speaker_count:(整数,默认None)固定说话人数。max_speaker:(整数,默认None)说话人数未知时的最大说话人数。speaker_names:(字符串,默认None)目标说话人名称列表,用于说话人识别(仅提供说话人样本时可用)。可能值:
成功分离后返回以下结构的JSON对象:
json{ "speakers": [ {"spk_id": "spk5", "duration": 2.0, "nbr_seg": 1}, ... ], "segments": [ {"seg_id": 1, "spk_id": "spk5", "seg_begin": 0.0, "seg_end": 2.0}, ... ] }
speakers字段包含说话人数组,每个说话人有总时长和段数。segments字段包含每个音频段,包含段ID、说话人ID、开始时间和结束时间。可使用以下curl命令测试HTTP API:
bashcurl -X POST "[***]" -H "accept: application/json" -H "Content-Type: multipart/form-data" -F "file=@YOUR_FILE.wav;type=audio/x-wav" -F "speaker_count=NUMBER_OF_SPEAKERS"
本项目基于AGPLv3许可证开发(见LICENSE)。
来自真实用户的反馈,见证轩辕镜像的优质服务
免费版仅支持 Docker Hub 加速,不承诺可用性和速度;专业版支持更多镜像源,保证可用性和稳定速度,提供优先客服响应。
免费版仅支持 docker.io;专业版支持 docker.io、gcr.io、ghcr.io、registry.k8s.io、nvcr.io、quay.io、mcr.microsoft.com、docker.elastic.co 等。
当返回 402 Payment Required 错误时,表示流量已耗尽,需要充值流量包以恢复服务。
通常由 Docker 版本过低导致,需要升级到 20.x 或更高版本以支持 V2 协议。
先检查 Docker 版本,版本过低则升级;版本正常则验证镜像信息是否正确。
使用 docker tag 命令为镜像打上新标签,去掉域名前缀,使镜像名称更简洁。
探索更多轩辕镜像的使用方法,找到最适合您系统的配置方式
通过 Docker 登录认证访问私有仓库
在 Linux 系统配置镜像加速服务
在 Docker Desktop 配置镜像加速
Docker Compose 项目配置加速
Kubernetes 集群配置 Containerd
在宝塔面板一键配置镜像加速
Synology 群晖 NAS 配置加速
飞牛 fnOS 系统配置镜像加速
极空间 NAS 系统配置加速服务
爱快 iKuai 路由系统配置加速
绿联 NAS 系统配置镜像加速
QNAP 威联通 NAS 配置加速
Podman 容器引擎配置加速
HPC 科学计算容器配置加速
ghcr、Quay、nvcr 等镜像仓库
无需登录使用专属域名加速
需要其他帮助?请查看我们的 常见问题 或 官方QQ群: 13763429