本站支持搜索的镜像仓库:Docker Hub、gcr.io、ghcr.io、quay.io、k8s.gcr.io、registry.gcr.io、elastic.co、mcr.microsoft.com
转录服务是用于请求音视频转录的API服务。该服务允许您:
使用转录服务前,您必须至少具备:
SERVICE_NAME(LANGUAGE必须兼容)SERVICES_BROKER的REDIS brokerMONGO_HOST:MONGO_PORT的MongoDB数据库可选地,如需使用说话人分离或标点功能,还需:
LANGUAGE必须兼容)LANGUAGE必须兼容)为使不同服务间共享音频文件,它们必须配置相同的共享卷RESSOURCE_FOLDER。
cd linto-transcription-service && docker build . -t transcription_service
cp .envdefault .env
按照环境变量部分描述填充.env文件
docker 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替换为您的值。
cp .envdefault .env
按照环境变量部分描述填充.env文件
docker-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参数进行过滤。
{ "diarization": [ # 服务类型 { "service_name": "diarization-1", # 服务名称。在转录配置中用作参数以调用此特定服务 "service_type": "diarization", # 服务类型 "service_language": "*", # 支持的语言 "queue_name": "diarization-queue", # 此服务使用的Celery队列 "info": "说话人分离服务", # 服务信息 "instances": [ # 此特定服务的实例 { "host_name": "feb42aacd8ad", # 实例唯一ID "last_alive": 1665996709, # 最后心跳时间 "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": 1665996709, "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时:
{"jobid" : "the-job-id"}
accept: text/plain时:
the-job-id
如果force_sync标志设置为true,请求返回200状态码和转录结果(参见转录结果),使用与/result/{result_id}路由相同的accept选项。
不建议对大文件使用force_sync,因为它会在整个转录期间阻塞工作进程。
此外,还可以上传时间戳文件(与音频文件一起),其中包含要转录的片段时间戳。时间戳文件是文本文件,每行一个片段,可包含可选的说话人ID:
# start stop [speakerid] 0.0 7.05 1 7.05 13.0
转录配置描述请求的转录输入参数和标志。它允许设置:
结构如下:
{ "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。
{ # 任务待处理或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对象结果;{ "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 登录方式配置轩辕镜像加速服务,包含7个详细步骤
在 Linux 系统上配置轩辕镜像源,支持主流发行版
在 Docker Desktop 中配置轩辕镜像加速,适用于桌面系统
在 Docker Compose 中使用轩辕镜像加速,支持容器编排
在 k8s 中配置 containerd 使用轩辕镜像加速
在宝塔面板中配置轩辕镜像加速,提升服务器管理效率
在 Synology 群晖NAS系统中配置轩辕镜像加速
在飞牛fnOS系统中配置轩辕镜像加速
在极空间NAS中配置轩辕镜像加速
在爱快ikuai系统中配置轩辕镜像加速
在绿联NAS系统中配置轩辕镜像加速
在威联通NAS系统中配置轩辕镜像加速
在 Podman 中配置轩辕镜像加速,支持多系统
配置轩辕镜像加速9大主流镜像仓库,包含详细配置步骤
无需登录即可使用轩辕镜像加速服务,更加便捷高效
需要其他帮助?请查看我们的 常见问题 或 官方QQ群: 13763429