lintoai/linto-diarization-pybkLinTO-diarization是LinTO的说话人分轨服务。
LinTO-diarization既可作为独立的分轨服务使用,也可部署为微服务。
先决条件
部署
使用方法
许可证
该分轨服务需要Docker已安装并运行。
在任务模式下,分轨服务的唯一入口是发布到Redis消息代理的任务。此外,为避免大型音频通过消息代理传输,分轨服务使用挂载到/opt/audio的共享存储文件夹。
linto-diarization可通过以下方式部署:
1- 第一步:构建镜像
bashgit clone [***] cd linto-diarization docker build . -t linto-diarization-pybk:latest -f pybk/Dockerfile
1- 配置.env文件
pybk/.envdefault提供了.env文件示例。
参数说明:
| 变量名 | 描述 | 示例 |
|---|---|---|
| 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文件
pybk/.envdefault提供了.env文件示例。
参数说明:
| 变量名 | 描述 | 示例 |
|---|---|---|
| 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 }
返回API状态
方法:GET
健康检查通过时返回"1"。
分轨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路由提供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 "[***]" -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)。
manifest unknown 错误
TLS 证书验证失败
DNS 解析超时
410 错误:版本过低
402 错误:流量耗尽
身份认证失败错误
429 限流错误
凭证保存错误
来自真实用户的反馈,见证轩辕镜像的优质服务