Docker系列——从零开始打包FunASR的Http服务

一、项目结构准备

funasr-docker/
├── Dockerfile
├── requirements.txt
├── models/               # 预下载模型目录(可选)
├── config/              # 自定义配置文件
│   └── server_config.py
└── run.sh               # 服务启动脚本

二、核心文件配置

  1. Dockerfile(综合网页5/7/13)
# 基础镜像选择Python 3.8
FROM python:3.8-slim# 设置环境变量
ENV MODEL_CACHE_PATH=/usr/src/app/model_cache
ENV DEBIAN_FRONTEND=noninteractive# 安装系统依赖
RUN apt-get update && \apt-get install -y ffmpeg git && \rm -rf /var/lib/apt/lists/*# 创建工作目录
WORKDIR /usr/src/app# 复制项目文件
COPY requirements.txt .
COPY run.sh .
COPY config/ ./config/# 安装Python依赖
RUN pip install --no-cache-dir -r requirements.txt \&& pip install "modelscope[audio]" -f https://modelscope.oss-cn-beijing.aliyuncs.com/releases/repo.html# 暴露服务端口
EXPOSE 10095# 启动服务
ENTRYPOINT ["/bin/bash", "run.sh"]
  1. requirements.txt(参考网页12/13)
funasr==0.8.4
modelscope==1.11.0
uvicorn==0.23.2
fastapi==0.103.2
python-multipart==0.0.6
  1. run.sh 启动脚本(适配网页13)
#!/bin/bash# 预下载模型(如果未预先打包)
if [ ! -d "$MODEL_CACHE_PATH" ]; thenpython -m funasr.utils.runtime_utils \--model-name damo/speech_paraformer-large_asr_nat-zh-cn-16k-common-vocab8404-online \--export-dir $MODEL_CACHE_PATH
fi# 启动HTTP服务
exec python -m funasr.http_server \--model_path $MODEL_CACHE_PATH \--config_path /usr/src/app/config/server_config.py \--host 0.0.0.0 \--port 10095

三、构建与运行

  1. 镜像构建(网页1/3/7)
docker build -t funasr-http:1.0 .
  1. 容器运行(网页13/14)
docker run -d \-p 10095:10095 \-v ./model_cache:/usr/src/app/model_cache \--name funasr-service \funasr-http:1.0

四、服务验证

  1. 查看运行日志
docker logs -f funasr-service
  1. 发送测试请求(网页14)
curl -X POST "http://localhost:10095/recognition" \-H "Content-Type: multipart/form-data" \-F "audio_file=@test.wav"

五、高级配置建议

  1. 模型预下载优化(网页13)
# server_config.py
runtime_conf = {"vad_model": "damo/speech_fsmn_vad_zh-cn-16k-common-onnx","model": "damo/speech_paraformer-large-vad-punc_asr_nat-zh-cn-16k-common-vocab8404-onnx","punc_model": "damo/punc_ct-transformer_zh-cn-common-vad_realtime-vocab272727-onnx"
}
  1. 多阶段构建优化(网页8)
# 构建阶段
FROM python:3.8 as builder
RUN pip install --user modelscope
COPY models/ /models/
RUN python -m funasr.utils.runtime_utils --model-path /models# 最终镜像
FROM python:3.8-slim
COPY --from=builder /root/.cache/modelscope/hub /usr/src/app/model_cache
...

六、排错指南

  1. 常见问题处理(网页3/7)
    模型下载失败:检查modelscope的版本兼容性,建议锁定特定版本
    端口冲突:确认10095端口未被占用,或修改EXPOSE/PORT参数
    GPU支持:需要nvidia-docker运行时和CUDA基础镜像

该方案综合了FunASR官方部署文档和Docker最佳实践,实现了:
• 预置中文语音识别模型
• HTTP API服务接口
• 模型缓存机制
• 可扩展配置架构

完整实现代码可参考FunASR官方runtime示例:https://github.com/modelscope/FunASR/tree/main/runtime/python/http

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/34023.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

sqldef:一款免费的数据库变更管理工具

应用程序的升级通常伴随着数据库表结构的变更,为了维护各种环境的数据库变更,我们通常需要引入 Liquibase 或者 Flyaway 这样的数据库版本控制工具。不过,这类工具通常需要绑定某种编程语言,例如 Java;这次我们介绍一个…

行为模式---状态模式

概念 状态模式是一种行为模式,用于在内部状态改变的时候改变其行为。它的核心思想就是允许一个对象在其内部状态改变的时候改变它的行为。状态模式通过将对象的状态封装成独立的类,并将其行为委托给当前的状态对象,从而使得对象行为随着状态…

1688按图搜索商品(拍立淘)接口的参数说明【附代码实例】

阿里巴巴中国站按图搜索1688商品(拍立淘) API 返回值说明 item_search_img-按图搜索1688商品(拍立淘) 1688.item_search_img 公共参数 名称类型必须描述keyString是调用key(必须以GET方式拼接在URL中)se…

Linux文件管理练习

1、列出所有账号的账号名 切割显示-cut 作用:cut命令用于按列提取文本内容 格式: cut -d "分隔符" -f列数字 文件名 2、将/etc/passwd中内容按照冒号隔开的第三个字符从大到小排序后输出所有内容 排序显示-sort 作用:sort命令用于对文本内容进行排…

解决PC串流至IPad Pro时由于分辨率不一致导致的黑边问题和鼠标滚轮反转问题

问题背景 今天在做 电脑串流ipad pro 的时候发现了2个问题: 1.ipadpro 接上鼠标后,滚轮上下反转,这个是苹果自己的模拟造成的问题,在设置里选择“触控板与鼠标”。 关闭“自然滚动”,就可以让鼠标滚轮正向滚动。 2. ipadpro 分…

【数据结构初阶第十九节】八大排序系列(下篇)—[详细动态图解+代码解析]

hello,好久不见! 云边有个稻草人-CSDN博客 上篇内容,回顾一下吧【数据结构初阶第十八节】八大排序系列(上篇)—[详细动态图解代码解析]-CSDN博客 今天我们来学习下篇 目录 (2)快速排序 【挖坑法】 —思路 —思路…

使用Open WebUI下载的模型文件(Model)默认存放在哪里?

🏡作者主页:点击! 🤖Ollama部署LLM专栏:点击! ⏰️创作时间:2025年2月21日21点21分 🀄️文章质量:95分 文章目录 使用CMD安装存放位置 默认存放路径 Open WebUI下…

XSS漏洞学习(1)

XSS漏洞学习(1) HTTP协议回顾 HTTP的请求方式 常用 GET 请求从服务器获取资源 HEAD 类似于GET请求,只不过不会返回实体数据,只获取报头 POST 向服务器提交数据 PUT 替换服务器的内容 不常用 DELETE 请求服务器删除指定的…

【统计学相关笔记】抽样基本定理的证明

抽样基本定理的证明 法 1 法 2 什么是 辅助统计量? 法 3

基于Asp.net的物流配送管理系统

作者:计算机学姐 开发技术:SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等,“文末源码”。 专栏推荐:前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏:…

vue-treeselect 【单选/多选】的时候只选择最后一层(绑定的值只绑定最后一层)

欢迎访问我的个人博客 |snows_ls BLOGhttp://snows-l.site 一、单选 1、问题: vue-treeselect 单选的时候只选择最后一层(绑定的值只绑定最后一层) 2、方法 1、只需要加上 :disable-branch-nodes"true" 就行&#xff0…

Python的那些事第四十五篇:继承自Nose的测试框架Nose2

Nose2:继承自Nose的测试框架 摘要 本文深入探讨了Nose2这一继承自Nose的测试框架。在软件开发过程中,测试是确保代码质量和稳定性的重要环节,而测试框架为测试工作的开展提供了有力支持。Nose2作为Nose的继承者,在保留Nose优势的基础上进行了诸多改进和扩展,为Python测试…

LLM后训练:解锁大型语言模型推理能力的关键路径

引言:从语言生成到逻辑推理的跃迁 大型语言模型(LLMs)通过预训练掌握了海量语言模式,但其核心缺陷——幻觉、逻辑断裂、价值观偏差——暴露了单纯预训练的局限性。后训练(Post-Training)作为预训练后的精修…

Rabit

之前发过rabit了,所以这里不再赘述,讲讲原理 在线Rabbit加密 | Rabbit解密- 在线工具 (sojson.com) rabbit加密原理 Rabbit加密算法是一种流密码算法,由Daniel J. Bernstein设计,并被广泛用于多种加密和安全通信应用中。它的设…

coding ability 展开第四幕(滑动指针——巩固篇)超详细!!!!

文章目录 前言水果成篮思路 找到字符串中所有字母异位词思路 串联所有单词的子串思路 最小覆盖子串思路 总结 前言 本专栏上一篇博客,带着大家从认识滑动窗口到慢慢熟悉 相信大家对滑动窗口已经有了大概的认识 其实主要就是抓住——一段连续的区间 今天来学习一些滑…

“消失的中断“

“消失的中断” 1. 前言 在嵌入式开发过程中,中断必不可少。道友们想必也经常因为中断问题头疼不已,今天来说说一个很常见的问题,“消失的中断”。最近项目在使用第三方MCAL的时候,就遇到了I2C中断丢失的问题,排查起…

阿里云魔笔低代码应用开发平台快速搭建教程

AI低代码,大模型时代应用开发新范式 什么是魔笔 介绍什么是魔笔低代码应用开发平台。 魔笔是一款面向全端(Web、H5、全平台小程序、App)场景的模型驱动低代码开发平台,提供一站式的应用全生命周期管理,包括可视化开发…

Obsidian Copilot:打造你的专属 AI 笔记助手

Obsidian Copilot作为一款非常受欢迎的Obsidian插件,不仅极大地提升了用户的笔记管理和信息检索效率,还通过其多样化的AI功能为用户带来了前所未有的便捷体验。本文将详细介绍Obsidian Copilot的核心特点、使用方法及个人体验分享。 核心特点 Obsidian…

聊聊 Redis 的一些有趣的特性(上)

聊聊 Redis 的一些有趣的特性(上) 一、持久化 Redis 是内存数据库,数据全部保存在内存中。如果服务器发生宕机,内存中的数据将会全部丢失。为防止系统崩溃后数据丢失,Redis 提供了持久化功能,可将内存中的…

【结构设计】3D打印创想三维Ender 3 v2

【结构设计】3D打印创想三维Ender 3 v2 文章目录 前言一、Creality Slicer1.2.3打印参数设置二、配件更换1.捆扎绑扎线2.气动接头3D打印机配件插头3.3D打印机配件Ender3pro/V2喷头套件4.读卡器 TF卡5.micro sd卡 三、调平四、参考文章总结 前言 使用工具: 1.创想三…