FunASR Android 移动端部署实操指南:3 步在手机上跑通实时语音识别
【免费下载链接】FunASROpen-source speech recognition toolkit for training, inference, streaming ASR, VAD, punctuation, speaker diarization pipelines, and OpenAI-compatible/MCP serving.项目地址: https://gitcode.com/GitHub_Trending/fun/FunASR
想在手机上做实时语音识别?开会记纪要、开车转写、走路记想法,场景很诱人,可让手机本地扛住一个识别大模型,硬件上基本不现实。FunASR 的 Android 移动端部署方案给出了更务实的答案:识别交给服务器,手机只当轻量客户端。FunASR 本身是一套端到端语音识别工具包,配套开源 SOTA 预训练模型,而移动端玩法就是用它官方现成的 Android 示例 App + Docker 服务端,几步就能看到自己说的话变成文字。
先看懂架构:把识别搬到服务器,手机只做轻客户端
这条方案的关键取舍,一开始就值得想清楚:
- 模型不进手机。音频通过 WebSocket 长连接实时上传,识别在服务器侧完成,结果再实时推回。
- 算力花在刀刃上。VAD、ASR、标点、ITN 这些重模块全部跑在服务器 CPU 上,手机对硬件几乎无要求,老机型也能流畅用。
- 交互体验不打折。服务端采用两路协同的流式链路,你能在说话过程中就看到逐字输出的中间结果。
服务端内部是「在线实时 + 离线精修」的 2pass 流水线:FSMN-VAD 先做端点检测,Paraformer 流式模型负责低延迟出字;一旦 VAD 判定一句话结束,非流式 Paraformer 离线精算一遍,CT-Transformer 补标点、ITN 做逆正则化,最后把修正后的文字回推给你。这就是为什么结果既能"边说边出",又能"说完更准"。
拉起识别服务:用 Docker 把实时听写服务跑起来
部署全程三小步,每步都只干一件事。
先装 Docker:没有就直接用官方脚本
服务器上没装 Docker 的话,跟着 安装文档 走,仓库里也附了 一键安装脚本。装好能正常docker run一个 hello-world,这步就算过关。
再拉镜像起容器:模型目录用 -v 挂进来
sudo docker pull \ registry.cn-hangzhou.aliyuncs.com/funasr_repo/funasr:funasr-runtime-sdk-online-cpu-0.1.13 mkdir -p ./funasr-runtime-resources/models sudo docker run -p 10096:10095 -it --privileged=true \ -v $PWD/funasr-runtime-resources/models:/workspace/models \ registry.cn-hangzhou.aliyuncs.com/funasr_repo/funasr:funasr-runtime-sdk-online-cpu-0.1.13-p 10096:10095:把容器内的服务端口映射到宿主机 10096,客户端后面就填这个端口。-v:挂载模型目录,镜像首次启动会自动往/workspace/models下载所需模型,挂出来可以避免下次重建容器重新下。
最后启动 2pass 服务:一条命令带齐全部模型
进入容器执行:
cd FunASR/runtime nohup bash run_server_2pass.sh --download-model-dir /workspace/models > log.txt 2>&1 &脚本已经把 VAD、流式 ASR、离线 ASR、标点、语言模型、ITN 的默认参数都配好了,新手直接跑即可。想换模型、调端口、设热词时,通过参数覆盖即可:
| 参数 | 作用 |
|---|---|
--model-dir/--online-model-dir | 离线 / 流式 ASR 模型,可整体换识别模型 |
--vad-dir/--punc-dir/--itn-dir/--lm-dir | 端点检测、标点、逆正则、语言模型 |
port | 服务端口,默认 10095(容器内) |
hotword | 热词文件路径,配合热词权重文件使用 |
全部参数的含义在 SDK 进阶指南 的「服务端用法详解」里有完整说明。
打开示例 App:三种方式任选一种拿到 Android 客户端
客户端的完整示例代码在 runtime/android/ 目录,可运行的工程在 Android 客户端。拿到 App 有三条路:
- 自己编译:用最新版 Android Studio 打开
AndroidClient工程,直接运行,适合要二次开发的你; - 装现成 APK:直接下载官方提供的 APK 安装包安装;
- 扫码安装:用手机扫客户端文档里的二维码,最省事。
这个 App 刻意做得极简,只有三件事:
- 实时录音识别:按住底部按钮开始识别,松开即结束;
- 服务器地址配置:首次启动必须填 WebSocket 地址;
- 热词设置:菜单里随时可改,和服务端热词配合使用。
识别过程中,文字会实时刷在界面上,边说边出。
跑通联调:从填地址到松手看到结果
第一次完整体验可以按这条路径走,全程不到一分钟:
- 填地址:首次打开 App,把 WebSocket 服务器地址设为
wss://<你的服务器IP>:10096(记住前面映射出来的宿主机端口),菜单栏之后也能随时改; - 按住说话:点住录音按钮,正常语速说几句话,比如"生活就像海洋,只有意志坚强的人,才能到达彼岸";
- 松手看结果:松手后识别文字连同标点出现在界面上,流式中间结果在按住期间就已经逐字蹦出来了。
手机端没反应时,优先看服务端:log.txt里若出现模型加载成功、listen on port之类的日志,说明服务正常;客户端连上时还会打出New open, active connections: 1的记录。
调参数选 SDK:把部署打磨成贴合场景
跑通只是起点,后面这些手段能让识别更贴合你的业务:
- 热词提准:在宿主机
./funasr-runtime-resources/models/hotwords.txt配热词,每行一个、格式为「热词 权重」。官方建议单个热词不超过 10 个字、总量不超过 1k 个、权重取 1~100,兼顾效果和性能。 - 换模型:通过上文启动参数里的
--model-dir系列切换到别的 ASR / 标点模型,例如英文或 SenseVoice 模型,具体可选组合看 SDK 进阶指南。 - 换语言写客户端:不局限于 Android,官方提供 Python、C++、Java、C# 乃至 HTML 网页版客户端示例,文档在 实时听写 SDK 教程 的「客户端用法详解」章节;要更底层对接,可看 WebSocket/gRPC 协议文档。
遇到服务起不来、连不上、不出字之类的问题,先查 故障排查文档,社区 Issue 区也能找到同类案例。
收尾一句话:卡住了就去求助,本地方案可以盯一下
这套"云端识别 + 轻量客户端"的组合,是目前手机上用 FunASR 落地实时语音识别最稳的路径;官方路线图里也在推进更高效的本地部署形态,未来对手机硬件的依赖大概率还会再降,值得持续关注。哪一步卡住了,先翻 runtime/docs/ 下的对应指南,再去社区提问,带上你的log.txt和服务端参数,解决会快很多。
【免费下载链接】FunASROpen-source speech recognition toolkit for training, inference, streaming ASR, VAD, punctuation, speaker diarization pipelines, and OpenAI-compatible/MCP serving.项目地址: https://gitcode.com/GitHub_Trending/fun/FunASR
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考