本站支持搜索的镜像仓库:Docker Hub、gcr.io、ghcr.io、quay.io、k8s.gcr.io、registry.gcr.io、elastic.co、mcr.microsoft.com
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- 第一步:构建或拉取镜像
git clone [***] cd linto-diarization docker build . -t linto-diarization-simple:latest -f simple/Dockerfile
或
docker pull lintoai/linto-diarization-simple
若需启用说话人识别,需运行Qdrant:
docker 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:
docker 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环境变量自定义的文件夹):
docker 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
version: '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启动
docker stack deploy --resolve-image always --compose-file docker-compose.yml your_stack
队列名称:
默认服务队列名称为SERVICE_NAME。可通过QUEUE_NAME环境变量覆盖。
服务发现:
作为微服务时,实例会在服务注册中心注册自身信息以供发现。服务信息以JSON对象形式存储在Redis的db0中,键为service:{HOST_NAME}。
注册信息如下:
{ "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对象:
{ "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对象:
{ "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:
curl -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 登录方式配置轩辕镜像加速服务,包含7个详细步骤
在 Linux 系统上配置轩辕镜像源,支持主流发行版
在 Docker Desktop 中配置轩辕镜像加速,适用于桌面系统
在 Docker Compose 中使用轩辕镜像加速,支持容器编排
在 k8s 中配置 containerd 使用轩辕镜像加速
在宝塔面板中配置轩辕镜像加速,提升服务器管理效率
在 Synology 群晖NAS系统中配置轩辕镜像加速
在飞牛fnOS系统中配置轩辕镜像加速
在极空间NAS中配置轩辕镜像加速
在爱快ikuai系统中配置轩辕镜像加速
在绿联NAS系统中配置轩辕镜像加速
在威联通NAS系统中配置轩辕镜像加速
在 Podman 中配置轩辕镜像加速,支持多系统
配置轩辕镜像加速9大主流镜像仓库,包含详细配置步骤
无需登录即可使用轩辕镜像加速服务,更加便捷高效
需要其他帮助?请查看我们的 常见问题 或 官方QQ群: 13763429