✅ 第一步:构建并本地运行语音识别 API 服务
我们要先完成的,是 创建一个可以上传音频并返回识别文本的服务接口,它可以本地测试,并准备好后续 Docker 打包、Dify 调用。

bash
mkdir funasr_service && cd funasr_service
touch app.py funasr_local.py requirements.txt Dockerfile
- 创建并编辑
app.py
python
from fastapi import FastAPI, UploadFile, File
from fastapi.middleware.cors import CORSMiddleware
from funasr_local import infer
import os
app = FastAPI()
# 跨域支持
app.add_middleware(
CORSMiddleware,
allow_origins=["*"], # 生产环境请替换为指定域名
allow_credentials=True,
allow_methods=["*"],
allow_headers=["*"],
)
@app.get("/")
def index():
return {"message": "FunASR Speech Recognition Service is running."}
@app.post("/recognize")
async def recognize_audio(file: UploadFile = File(...)):
tmp_path = f"/tmp/{file.filename}"
with open(tmp_path, "wb") as f:
f.write(await file.read())
try:
text = infer(tmp_path)
except Exception as e:
return {"error": str(e)}
os.remove(tmp_path)
return {"text": text}
if __name__ == "__main__":
import uvicorn
uvicorn.run(app, host="0.0.0.0", port=5077)
- 创建并编辑
funasr_local.py
python
from funasr import AutoModel
# 初始化模型(只加载一次)
model = AutoModel(
model="paraformer-zh",
model_revision="v2.0.9", # 确保是有效版本
disable_update=True, # 禁止自动更新,启动更快
vad_model="fsmn-vad",
vad_model_revision="v2.0.4"
# 去掉 punc_model 参数,避免加载失败
)
def infer(audio_path: str) -> str:
"""
传入音频文件路径,返回识别文本
"""
result = model.generate(input=audio_path)
return result[0]['text']
3. 创建并编辑 requirements.txt
python
fastapi
uvicorn
torch
torchaudio
torchvision
funasr
python-multipart
- 创建Dockerfile
python
# 使用官方 Python 3.10 轻量版镜像
FROM python:3.10-slim
# 设置工作目录
WORKDIR /app
# 复制项目文件到容器
COPY . /app
# 升级 pip 并安装依赖
RUN pip install --upgrade pip && \
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cpu && \
pip install -r requirements.txt
# 暴露端口(根据你的服务端口)
EXPOSE 5077
# 启动命令,替换成你自己的启动脚本
CMD ["python", "app.py"]
5 。构建docker镜像
python
cd D:\funasr_service
docker build -t funasr_service_image .
经过漫长的等待之后
执行命令
python
docker run -d -p 5077:5077 --name funasr_service funasr_service_image
容器成功运行

-
-d:后台运行容器 -
-p 5077:5077:把容器的5077端口映射到主机的5077 -
--name funasr_service:容器名称 -
funasr_service_image:你构建的镜像
可以调用就行

如果因为那些地方不懂 可以直接私信联系博主获取调试好的tar文件 直接使用docker load就好 方便省事但不免费(博主也想加个鸡腿)
