LinTO-diarization是LinTO的说话人分轨服务。
LinTO-diarization既可作为独立的分轨服务使用,也可部署为微服务。
先决条件
部署
使用方法
许可证
该分轨服务需要Docker已安装并运行。
在任务模式下,分轨服务的唯一入口是发布到Redis消息代理的任务。此外,为避免大型音频通过消息代理传输,分轨服务使用挂载到/opt/audio的共享存储文件夹。
linto-diarization可通过以下方式部署:
1- 第一步:构建镜像
bashgit clone https://github.com/linto-ai/linto-diarization.git cd linto-diarization docker build . -t linto-diarization-pybk:latest -f pybk/Dockerfile
1- 配置.env文件
https://github.com/linto-ai/linto-diarization/blob/master/pybk/.envdefault%E6%8F%90%E4%BE%9B%E4%BA%86.env%E6%96%87%E4%BB%B6%E7%A4%BA%E4%BE%8B%E3%80%82
参数说明:
| 变量名 | 描述 | 示例 |
|---|---|---|
| SERVING_MODE | 指定启动模式 | http |
| CONCURRENCY | HTTP工作进程数* | 1+ |
2- 运行容器
bashdocker run --rm \ -v SHARED_FOLDER:/opt/audio \ -p HOST_SERVING_PORT:80 \ --env-file .env \ linto-diarization:latest
此命令将运行一个容器,提供绑定到主机HOST_SERVING_PORT端口的HTTP API。
参数说明:
| 变量名 | 描述 | 示例 |
|---|---|---|
| HOST_SERVING_PORT | 主机服务端口 | 80 |
*分轨服务会使用所有可用CPU,增加工作进程会共享可用CPU,从而降低并发请求的处理速度
LinTO-diarization可使用Celery部署为微服务。在此模式下,容器会启动Celery工作进程,等待消息代理上的分轨任务。
需要在SERVICES_BROKER地址运行消息代理。
1- 配置.env文件
https://github.com/linto-ai/linto-diarization/blob/master/pybk/.envdefault%E6%8F%90%E4%BE%9B%E4%BA%86.env%E6%96%87%E4%BB%B6%E7%A4%BA%E4%BE%8B%E3%80%82
参数说明:
| 变量名 | 描述 | 示例 |
|---|---|---|
| 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 | 模型的人类可读描述 | 多语言分轨模型 |
| CONCURRENCY | 工作进程数(1个工作进程=1个CPU) | >1 |
2- 配置docker-compose.yml
#docker-compose.yml
yamlversion: '3.7' services: punctuation-service: image: linto-diarization-pybk: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和LANGUAGE生成:diarization_{LANGUAGE}_{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 }
/healthcheck
返回API状态
方法:GET
健康检查通过时返回"1"。
/diarization
分轨API
返回结构化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}, ... ] }
/docs
/docs路由提供OpenAPI/swagger界面。
分轨工作进程接受包含以下参数的请求:
file_path:(字符串)文件在共享文件夹中的位置。/.../SHARED_FOLDER/{file_path}speaker_count:(整数,默认None)固定说话人数量。max_speaker:(整数,默认None)当speaker_count=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、开始时间和结束时间。可使用curl测试HTTP API:
bashcurl -X POST "http://YOUR_SERVICE:PORT/diarization" -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 登录认证访问私有仓库
无需登录使用专属域名
Kubernetes 集群配置 Containerd
K3s 轻量级 Kubernetes 镜像加速
VS Code Dev Containers 配置
Podman 容器引擎配置
HPC 科学计算容器配置
ghcr、Quay、nvcr 等镜像仓库
Harbor Proxy Repository 对接专属域名
Portainer Registries 加速拉取
Nexus3 Docker Proxy 内网缓存
需要其他帮助?请查看我们的 常见问题Docker 镜像访问常见问题解答 或 提交工单
docker search 限制
站内搜不到镜像
离线 save/load
插件要用 plugin install
WSL 拉取慢
安全与 digest
新手拉取配置
镜像合规机制
manifest unknown
no matching manifest(架构)
invalid tar header(解压)
TLS 证书失败
DNS 超时
域名连通性排查
410 Gone 排查
402 与流量用尽
401 认证失败
429 限流
D-Bus 凭证提示
413 与超大单层
来自真实用户的反馈,见证轩辕镜像的优质服务