转录服务是用于请求音视频转录的API服务。该服务允许您:
使用转录服务前,您必须至少具备:
SERVICE_NAME(LANGUAGE必须兼容)SERVICES_BROKER的REDIS brokerMONGO_HOST:MONGO_PORT的MongoDB数据库可选地,如需使用说话人分离或标点功能,还需:
LANGUAGE必须兼容)LANGUAGE必须兼容)为使不同服务间共享音频文件,它们必须配置相同的共享卷RESSOURCE_FOLDER。
bashcd linto-transcription-service && docker build . -t transcription_service
bashcp .envdefault .env
按照环境变量部分描述填充.env文件
bashdocker run --rm -it -p $SERVING_PORT:8080 \ -v $YOUR_SHARED_FOLDER:/opt/audio \ --env-file .env \ --name my_transcription_api \ transcription_service \ /bin/bash
将SERVING_PORT和YOUR_SHARED_FOLDER替换为您的值。
bashcp .envdefault .env
按照环境变量部分描述填充.env文件
bashdocker-compose up .
| 环境变量 | 描述 | 示例 |
|---|---|---|
WEBSERVER_HTTP_PORT | Web服务器监听HTTP请求的端口号 | 8080 |
LANGUAGE | 用于文本标准化(数字转文字、标点标准化等)的语言代码(BCP-47代码) | fr-FR |
KEEP_AUDIO | 请求后是否保留音频文件 | 1(是)| 0(否) |
CONCURRENCY | 工作进程数(默认10) | 10 |
SERVICE_NAME | STT服务名称,用于连接到正确的redis通道和mongo集合 | my_stt_service |
SERVICES_BROKER | 消息代理地址 | redis://broker_address:6379 |
BROKER_PASS | 代理密码 | Password |
MONGO_HOST | MongoDB结果存储地址 | my-mongo-service |
MONGO_PORT | MongoDB结果存储端口 | 27017 |
RESOLVE_POLICY | 子服务解析策略(默认ANY)* | ANY | DEFAULT | STRICT |
<SERVICE_TYPE>_DEFAULT | 子任务<SERVICE_TYPE>的默认服务名称 * | punctuation-1 |
*: 参见子服务解析
| 环境变量 | 描述 | 示例 |
|---|---|---|
REGISTRATION_MODE | 通过HTTP启用服务向API网关注册。如果未设置此变量,以下所有变量将被忽略。 | HTTP或未设置 |
PROXIED_SERVICE_BASE_URL | 转录服务的基础URL | [***] |
GATEWAY_SERVICE_BASE_URL | API网关用于新服务注册的路由 | [***] |
GATEWAY_PROXY_PATH | API网关上路由到此服务的基础路径 | /transcribe |
转录服务提供REST API用于提交转录请求。
转录服务围绕两个概念展开:
典型的转录流程如下:
/transcribe提交文件和转录配置。该路由返回201状态码和job_id/job/{job_id}路由跟踪任务进度。任务完成时,将返回201状态码和result_id/results/{result_id}路由获取转录结果,可指定所需格式和选项list-services GET路由用于获取可用的转录子服务。
返回一个JSON对象,包含按服务类型索引的已部署服务列表。列出的服务会根据设置的LANGUAGE参数进行过滤。
json{ "diarization": [ # 服务类型 { "service_name": "diarization-1", # 服务名称。在转录配置中用作参数以调用此特定服务 "service_type": "diarization", # 服务类型 "service_language": "*", # 支持的语言 "queue_name": "diarization-queue", # 此服务使用的Celery队列 "info": "说话人分离服务", # 服务信息 "instances": [ # 此特定服务的实例 { "host_name": "feb42aacd8ad", # 实例唯一ID "last_alive": ***, # 最后心跳时间 "version": "1.2.0", # 服务版本 "concurrency": 1 # 实例并发数 } ] } ], "punctuation": [ { "service_name": "punctuation-1", "service_type": "punctuation", "service_language": "fr-FR", "queue_name": "punctuation-queue", "info": "标点服务", "instances": [ { "host_name": "b0e9e24349a9", "last_alive": ***, "version": "1.2.0", "concurrency": 1 } ] } ] }
子服务解析是允许转录服务使用适当的可选子服务(如说话人分离或标点预测)的机制。当子任务配置中未传递serviceName时应用解析。
有三种解析服务名称的策略:
解析策略在启动时通过RESOLVE_POLICY环境变量声明:ANY | DEFAULT | STRICT(默认ANY)。
默认服务名称必须在启动时声明:<SERVICE_TYPE>_DEFAULT。例如,默认标点子服务为"punctuation-1",则PUNCTUATION_DEFAULT=punctuation1。
语言兼容性
子服务兼容的条件是其子服务的语言与转录服务的语言兼容。
/transcribe路由接受包含音频文件的POST请求。
该路由接受multipart/form-data请求。
响应格式可以是application/json或text/plain,由请求头的accept字段指定。
| 表单参数 | 描述 | 是否必需 |
|---|---|---|
| transcriptionConfig | (可选对象)描述转录参数的转录配置,JSON格式 | 参见转录配置 |
| force_sync | (可选布尔值,默认false)如果为true,则执行同步请求 | true | false | null |
如果请求被接受,响应应为201状态码,包含JSON或文本格式的jobid。
accept: application/json时:
json{"jobid" : "the-job-id"}
accept: text/plain时:
the-job-id
如果force_sync标志设置为true,请求返回200状态码和转录结果(参见转录结果),使用与/result/{result_id}路由相同的accept选项。
不建议对大文件使用force_sync,因为它会在整个转录期间阻塞工作进程。
此外,还可以上传时间戳文件(与音频文件一起),其中包含要转录的片段时间戳。时间戳文件是文本文件,每行一个片段,可包含可选的说话人ID:
txt# start stop [speakerid] 0.0 7.05 1 7.05 13.0
转录配置描述请求的转录输入参数和标志。它允许设置:
结构如下:
json{ "language": "fr-FR", # 转录目标语言(默认:null) "vadConfig": { "enableVad": true, # 启用语音活动检测(默认:true) "methodName": "WebRTC", # VAD方法(默认:WebRTC) "minDuration": 30, # 语音片段最小持续时间(默认:0) "maxDuration": 1200 # 语音片段最大持续时间(默认:1200) }, "diarizationConfig": { "enableDiarization": true, # 是否启用说话人分离(默认:false) "numberOfSpeaker": null, # 如果设置,强制说话人数量 "maxNumberOfSpeaker": 50, # 如果设置且未设置numberOfSpeaker,限制最大说话人数量 "speakerIdentification": null, # 要识别的说话人名称(取决于说话人分离worker的安装) "serviceName": null # 强制服务名称(参见子服务解析) }, "punctuationConfig": { "enablePunctuation": false, # 是否添加标点(默认:false) "serviceName": null # 强制服务名称(参见子服务解析) } }
serviceName可用于指定特定的子服务版本。可用服务可在/list-services查看。
target language可以是""(自动语言检测),或描述语言的常用标签("fr"、"fr-FR"、"French"——参见[**]
注意,此参数的作用与用于文本标准化的环境变量LANGUAGE不同(后者仅限于BCP-47代码)。
要启用说话人识别,可将说话人分离配置的speakerIdentification字段设置为通配符"*"(启用所有说话人)或说话人名称列表(JSON格式,例如:"["John Doe", "Bob"]")。说话人分离worker必须已配置为可匹配所有说话人名称与一组语音样本。
/job/{jobid} GET路由用于获取给定转录任务的状态。
响应格式为application/json。
json{ # 任务待处理或jobid错误:404 {"state": "pending"} # 任务已开始:102 {"state": "started", "progress": {"current": 1, "total": 3, "step": "Transcription (75%)"}} # 任务已完成:201 {"state": "done", "result_id" : "result_id"} # 任务失败:400 {"state": "failed", "reason": "Something went wrong"} }
/results/{result_id} GET路由用于获取与result_id关联的转录结果。
accept请求头指定结果格式:
application/json 返回完整的JSON对象结果;json{ "raw_transcription": "bonjour est-ce que vous allez bien mais oui et vous", # 原始转录文本 "transcription_result": "spk1: Bonjour ! Est-ce que vous allez bien ?\nspk2: Mais oui et vous ?", # 最终转录文本 "language": "fr", # 整体转录语言(请求中指定或音频中检测到的主要语言) "confidence": 0.9, # 整体转录置信度分数 "segments": [ # 单个说话人连续语音的片段 { "raw_segment": "bonjour est-ce que vous allez bien", # 语音片段的原始转录 "segment": "Bonjour ! Est-ce que vous allez bien ?", # 片段的处理后转录(标点、标准化等) "start": 0, # 片段开始时间 "end": 5.26, # 片段结束时间 "duration": 5.26, # 片段持续时间 "language": "fr", # 片段语言(检测到的主要语言或请求中指定) "spk_id": "spk1", # 片段说话人ID "words": [ # 片段词语信息 { "word": "bonjour", # 词语 "start": 0.0, # 词语开始时间 "end": 1.02, # 词语结束时间 "conf": 0.49 # 词语置信度分数 }, { "word": "est-ce", "start": 3.0, "end": 3.84, "conf": 0.63 }, ... ] }, ... ] }
text/plain 返回纯文本格式的最终转录结果spk1: Bonjour ! Est-ce que vous allez bien ? spk2: Mais oui et vous ?
text/vtt 返回WEBVTT字幕格式的转录结果WEBVTT Kind: captions; Language: fr 00:00.000 --> 00:05.260 Bonjour ! Est-ce que vous allez bien ? 00:05.270 --> 00:06.710 Mais oui et vous ?
text/srt 返回SubRip字幕格式的转录结果1 00:00:00,000 --> 00:00:05,260 Bonjour ! Est-ce que vous allez bien ? 2 00:00:05,270 --> 00:00:06,710 Mais oui et vous ?
还可以使用查询字符串指定选项:
originalWord:substituteWord的值,用于在最终转录结果中替换词语/job-log/{jobid} GET路由用于检索任务详情以进行调试。返回原始文本格式的日志。
/docs路由提供Swagger-UI界面,包含API规范(OAS3)。
还允许使用预填充的可修改参数直接测试请求。
来自真实用户的反馈,见证轩辕镜像的优质服务
免费版仅支持 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