lintoai/linto-stt-kaldiLinTO-STT-Kaldi 是一个基于 Kaldi 训练模型的自动语音识别(ASR)API。该镜像可作为独立转录服务部署,也可集成到微服务架构中(通过消息代理连接器),支持离线转录和实时转录两种模式。可通过 LinTO Studio 在浏览器中直接试用该服务。
需将模型文件夹下载并解压至 Docker 容器可访问的目录。支持两种模型类型:
bashgit clone [***] cd linto-stt docker build . -f kaldi/Dockerfile -t linto-stt-kaldi:latest
bashdocker pull lintoai/linto-stt-kaldi
AM_PATH 和 LM_PATH 目录MODEL_PATH 目录创建 .env 文件(可参考 kaldi/.envdefault),配置关键参数。核心参数说明见 配置参数说明 章节。
以 HTTP 接口提供转录服务,支持文件上传和流式转录。
启动命令:
bashdocker run --rm \ -p 8080:80 \ # 宿主端口:容器端口 -v /path/to/am:/opt/AM \ # 声学模型挂载(LinTO模型) -v /path/to/lm:/opt/LM \ # 语言模型挂载(LinTO模型) # -v /path/to/vosk/model:/opt/model \ # Vosk模型挂载(替换上述两行) -v /path/to/recasepunc:/opt/PUNCT \ # 标点模型(可选) --env-file .env \ linto-stt-kaldi:latest
docker-compose 示例:
yamlversion: '3' services: linto-stt: image: linto-stt-kaldi:latest ports: - "8080:80" volumes: - /host/am:/opt/AM - /host/lm:/opt/LM - /host/recasepunc:/opt/PUNCT environment: - SERVICE_MODE=http - MODEL_TYPE=lin - ENABLE_STREAMING=true - CONCURRENCY=4 - PUNCTUATION_MODEL=/opt/PUNCT restart: unless-stopped
通过消息代理接收转录任务,适用于微服务架构。
启动命令:
bashdocker run --rm \ -v /path/to/am:/opt/AM \ -v /path/to/lm:/opt/LM \ -v /path/to/shared/audio:/opt/audio \ # 共享音频文件夹 --env-file .env \ linto-stt-kaldi:latest
专用流式转录服务,仅提供 WebSocket 接口。
启动命令:
bashdocker run --rm \ -p 8080:80 \ -v /path/to/model:/opt/model \ # 模型挂载(LinTO或Vosk) -v /path/to/recasepunc:/opt/PUNCT \ # 标点模型(可选) --env SERVICE_MODE=websocket \ --env MODEL_TYPE=vosk \ --env STREAMING_PORT=80 \ linto-stt-kaldi:latest
| 参数名 | 描述 | 示例值 |
|---|---|---|
SERVICE_MODE | 服务模式:http(HTTP接口)、task(任务队列)、websocket(流式) | http |
MODEL_TYPE | 模型类型:lin(LinTO模型)、vosk(Vosk模型) | vosk |
ENABLE_STREAMING | HTTP模式下是否启用 /streaming WebSocket 接口 | true |
SERVICE_NAME | 任务模式下的队列名称 | my-stt-task-queue |
SERVICE_BROKER | 任务模式下的消息代理URL | redis://broker:6379 |
BROKER_PASS | 消息代理密码 | my-broker-password |
STREAMING_PORT | WebSocket模式下的监听端口 | 80 |
CONCURRENCY | 最大并行请求数 | 4 |
PUNCTUATION_MODEL | recasepunc标点模型路径(容器内路径) | /opt/PUNCT/fr.24000 |
/healthchecktext/plain,返回 1 表示服务正常/transcribeContent-Type: multipart/form-datafile(16bit 16KHz WAV 音频文件)text/plain:纯文本转录结果application/json:带元数据的 JSON,格式如下:
json{ "text": "这是转录文本", "words": [ {"word": "这是", "start": 0.123, "end": 0.456, "conf": 0.92}, {"word": "转录文本", "start": 0.500, "end": 0.890, "conf": 0.88} ], "confidence-score": 0.90 }
/streaming(需 ENABLE_STREAMING=true){"config": {"sample_rate": ***, "language": "zh"}}(language 可选){"eof": 1}{"partial": "这是中间"} 或最终结果 {"text": "这是最终转录文本"}eof/docs任务队列接收的请求需包含以下参数:
file_path:共享文件夹内的音频文件路径(完整路径为 /opt/audio/{file_path})with_metadata:是否返回元数据(时间戳、置信度),true/false成功转录后返回 JSON:
json{ "text": "这是转录文本", "words": [ {"word": "这是", "start": 0.123, "end": 0.456, "conf": 0.92}, ... ], "confidence-score": 0.90 }
bash# 测试转录接口(返回 JSON) curl -X POST "http://localhost:8080/transcribe" \ -H "accept: application/json" \ -H "Content-Type: multipart/form-data" \ -F "file=@test_audio.wav;type=audio/x-wav" # 测试健康检查 curl "http://localhost:8080/healthcheck" # 返回 "1"
本项目基于 AGPLv3 许可证开发(详见 LICENSE 文件)。
manifest unknown 错误
TLS 证书验证失败
DNS 解析超时
410 错误:版本过低
402 错误:流量耗尽
身份认证失败错误
429 限流错误
凭证保存错误
来自真实用户的反馈,见证轩辕镜像的优质服务