手机FunASR识别SIM卡通话占用内存和运行性能分析

--本地AI电话机

上一篇:手机无网离线使用FunASR识别SIM卡语音通话内容

下一篇:手机通话语音离线ASR识别商用和优化方向


  • 一、前

书接上一文《阿里FunASR本地断网离线识别模型简析》,我们其实在2023年底的时候输出过一版基于离线FunASR的ASR转文字方案。当时为了减少模型文件的数量和大小,只引入了【vad_res】、【asr_offline_res】这两个模型文件,想尝试减少Android应用需要加载的文件内容,进而提高加载速度并减少运行内存的占用。但后来实践发现响应太慢了,体验效果不理想,而且识别准确率也不太行。

在这一版本中,我们从从魔搭社区中搜索最新的ONNX模型库,引入【punc_res】、【asr_online_res】这几个能提高ASR识别准确度但体积比较大(运行时比较消耗内存)的模型文件。

初步估计,模型文件本身将从208Mb增长到667Mb,足足增加了460Mb(主要是【punc_res】标点符号库增大了模型文件的大小)。

App运行内存从原先未加载ASR模块的250Mb,加载旧版本ASR后为700Mb,加载新版本ASR后为990Mb,一下子递增了很多。

通常,现在市面上普通的Android手机的运行内存大致为8G/16G/32G,极少部分较少的如乐视酷派金立这种能找到4G内存的。我们试着安装过,识别效率基本相差不大,都是说话后两三秒才能出文字。

本篇章中我们尝试从内存占用和运行性能的角度,分析一下将FunASR的运行动态库以及模型文件,直接加载到Android上进行本地解析是否靠谱。

魔搭社区中FunASR下载参考路径如下:

ModelScope - 模型列表页

体验和下载地址:

智能拨号器App:http://120.78.211.195:8060/Dialer.apk

拨号器SDK示例app:http://120.78.211.195:8060/sdk/SdkDemo.apk

USB蓝牙配件购买路径(参考):https://item.taobao.com/item.htm?_u=pk10l4ccbcd&id=649368472986

  • 二、实时流式+标点模型引入对性能的影响

经初步分析,把FunASR的【vad_res】、【asr_online_res】、【asr_offline_res】、【punc_res】这四件套都给引入App中进行ASR识别,确实能带来体验效果的提升。交互的友好性也能极大的增强。

但总体来说,感觉现阶段的FunASR模型也只能在通话事后根据录音进行质检上发力,在实时语音流上,不太可能像“小爱通话”这种能快速解析出对方说话的内容,然后根据对话上下文形成应答TTS语音做反馈。

性能对比影响大致如下表所示:

仅离线ASR(旧方案)

实时流+标点(新方案)

CPU占用

14%左右

11%-15%之间

内存占用

700-750Mb

980-1100Mb

识别准确率

中等,偶现错别字但不影响理解

高,标点模型会做最终修正

反应速度

2-8s出文字,一口气说的内容越长就需要等待越久。

2s左右出文字,但最终修正同样依赖asr_offline_res模型输出的结果做修正

  • 三、AndroidStudio的Profiler性能分析

由于我们在【拨号器SDK示例app】界面中增加了可以随时挂载和清除ASR识别模块的操作入口,因此可以很容易的在AndroidStudio的Profiler界面中对App运行中CPU占用、内存分配情况、以及耗电情况进行图形化的展示。

App加载so库和ASR模型文件后,App运行的内存由250Mb增大到980Mb。CPU耗用大致为11%-15%之间,如下图所示:

从运算性能上来看,这么点CPU耗用对于音视频领域的应用而言完全不算个事。但内存耗用方面把所有的模型文件都加载到手机内存中,然后依赖手机CPU来进行ASR运算对于手机这小身板而言,算是个不小的负担。

而且我们从最终实践的效果来看,对于那种“新闻联播”式的语音,一说话就巴拉巴拉停不下来的,asr_offline_res模型解析起来会急剧的增大文字的输出时间。

  • 四、总结

本文中尝试从内存占用和运行性能的角度,分析一下将FunASR的运行动态库以及模型文件,直接加载到Android后在CPU性能、内存耗用方面的使用情况。进而分析Android手机直接使用FunASR模型进行本地解析是否靠谱。

从结果上来看,目前选型的模型库和算法,对SIM卡电话通话事后根据录音进行质检方面效果比较理想。但对于实时语音流,特别是像那种“新闻联播”式的语音,一说话就巴拉巴拉停不下来的,FunASR在实时文字输出上体验效果不佳,总体解析的时延较久。

以上,大致为FunASR模型和算法装载到小小的Android手机上进行无网离线识别的试验效果。我们尝试通过“将大象直接装进房子里”的办法来实现“直接喂香蕉并收集大象做功的力气”这样力大砖飞的用法。

有兴趣的朋友或友商可以自行下载我们的App和ASR模型文件,体验通话和音质效果。

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

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

相关文章

虚幻引擎Unreal Engine5恐怖游戏设计制作教程,从入门到精通从零开始完整项目开发实战详细讲解中英字幕

和大家分享一个以前收集的UE5虚幻引擎恐怖游戏开发教程,这是国外一个大神制作的视频教程,教程从零开始到制作出一款完整的游戏。内容讲解全面,如蓝图基础知识讲解、角色控制、高级交互系统、高级库存系统、物品检查、恐怖环境氛围设计、过场动…

多人协同开发时Git使用命令

拉取仓库代码 # 拉取远程仓库至本地tar_dir路径 git clone gitgithub.com:your-repo.git target_dir # 默认是拉取远程master分支,下面拉取并切换到自己需要开发的分支上 # 假设自己需要开发的分支是/feature/my_branch分支 git checkout -b feature/my_branch orig…

线性表——双向链表

线性表——双向链表1. 双向链表的实现1.1 简单图例1.2 结点的定义1.3 新结点的创建1.4 链表的初始化1.5 结点的插入1.5.1 头部插入(头插)1.5.2 尾部插入(尾插)1.5.3 任意位置(前)插入1.6 结点的删除1.6.1 头…

Java后端技术博客汇总文档

文章目录 前言Java后端汇总链接Java基础知识点数据结构算法(Java实现)算法知识点合集算法刷题算法竞赛AcWing课程蓝桥杯AB组辅导课合集(更新中…) 源码分析redission 数据库SQL ServerMySQLRedis -Canal JUC并发编程JVMNetty日志框…

QT 菜单栏设计使用方法

目录 常用设置函数 多个QAction的单选设置 ​​​​​​​菜单相关类 ​​​​​​​ 系统菜单的生成和响应 使用代码添加系统菜单 使用UI设计器设计系统菜单 使用Qt设计及界面时,常用的两种方式添加菜单,第一使用UI界面添加,第二种 在…

AIGC领域AI艺术,打造个性化艺术作品

AIGC领域AI艺术,打造个性化艺术作品 关键词:AIGC、AI艺术、生成对抗网络、个性化创作、深度学习、艺术风格迁移、创意计算 摘要:本文深入探讨了AIGC(人工智能生成内容)在艺术创作领域的应用,重点分析了如何利用AI技术打造个性化艺术作品。文章从技术原理出发,详细解析了生…

基于Flask+Jinja2的快捷教务系统(后端链接到新版正方教务系统)

快捷教务系统(Easy Educational Administration Management System, EasyEAMS) 项目简介 EasyEAMS 是一个基于 Flask Jinja2 的现代化教务系统 Web 应用。学生可通过网页端登录,在线查询个人信息、成绩、课表、学业生涯、通知、选课等。系…

EDM自动化与出海独立开发实用教程

随着互联网全球化发展,越来越多的独立开发者(Indie Developer)选择将自己的产品推向海外市场。如何高效地获客、激活用户、提升转化率,成为出海过程中必须解决的问题。EDM(电子邮件营销)自动化,…

「日拱一码」017 深度学习常用库——TensorFlow

目录 基础操作 张量操作: tf.constant 用于创建常量张量 tf.Variable 用于创建可训练的变量张量 tf.reshape 可改变张量的形状 tf.concat 可将多个张量沿指定维度拼接 tf.split 则可将张量沿指定维度分割 数学运算: tf.add 张量的加运算 tf.su…

ARM DStream仿真器脚本常用命令

以下是ARM DStream仿真器脚本中常用的命令及其功能分类,结合调试流程和典型应用场景整理: ⚙️ 一、连接与初始化命令 connect 建立与目标设备的连接,需指定接口类型(如JTAG/SWD)和处理器核心。 示例:conne…

vscode 调试unity

lanch.json { “version”: “0.2.0”, “configurations”: [ { “name”: “Attach to Unity”, “type”: “vstuc”, “request”: “attach” } ] }

金融IT入门知识点

银行金融IT核心知识点全解析:架构、技术与实践 一、金融IT的战略地位与行业特性 金融IT作为银行业务的核心支撑体系,其发展水平直接决定了银行服务的效率、安全性与创新能力。截至 2025年,中国银行业线上化业务占比已达97%,手机银…

C++——手撕智能指针、单例模式、线程池、String

智能指针今天我们来学习一下C中的智能指针,如果有人不知道C中的智能指针的概念的话:C智能指针是一种基于RAII(Resource Acquisition Is Initialization,资源获取即初始化)机制的高级内存管理工具,用于自动化…

Mybatis----留言板

基础项目:留言板 截止到目前为止,我们已经学习了 Spring(只学习了DI)、Spring MVC、SpringBoot、Mybatis 这些知识了,已经满足了做简单项目的基本要求了,所以接下来我们就从0到1实现表白墙项目。 需求分析…

Web-API-day3 DOM事件进阶

一、 事件流 1.事件冒泡 const fa document.querySelector(.father)const son document.querySelector(.son)document.addEventListener(click, function () {alert(我是爷爷)})fa.addEventListener(click, function () {alert(我是爸爸)})son.addEventListener(click, fun…

小波增强型KAN网络 + SHAP可解释性分析(Pytorch实现)

效果一览一、传统KAN网络的痛点与突破 1. 传统KAN的局限性 传统Kolmogorov-Arnold网络(KAN)虽在理论上有可靠的多变量函数逼近能力,但存在显著瓶颈: 计算效率低:训练速度慢于MLP,资源消耗大,尤其…

tomcat部署多个端口以及制定路径部署-vue3

vue3项目tomcat部署记录 使用hash路由 字符串拼接的图片地址可以使用import.meta.env.BASE_URL 默认8080 如果部署地址为8080/xc 则设置 vite.config.js中设置base为’/xc/’ outDir设置为xc 打包产物直接拖到webapps目录下 如果另开一个端口 如8081 设置根目录访问 conf/ser…

LeetCode三数之和-js题解

给你一个整数数组 nums ,判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i ! j、i ! k且 j ! k ,同时还满足 nums[i] nums[j] nums[k] 0 。请你返回所有和为 0 且不重复的三元组。 注意:答案中不可以包含重复的三元组。 示例 1&…

Flink SQLServer CDC 环境配置与验证

一、SQL Server 数据库核心配置 1. 启用 CDC 功能(Change Data Capture) SQL Server CDC 依赖数据库级别的 CDC 功能及表级别的捕获配置,需按以下步骤启用: 启用数据库 CDC -- 以管理员身份连接数据库 USE master; GO-- 检查数…

软考(软件设计师)存储管理—设备管理,磁盘调度

I/O软件的核心目标是管理硬件差异、提供统一接口、实现高效可靠的数据传输。 核心目标: 设备无关性: 应用程序无需关心具体硬件细节。错误处理: 处理硬件错误和传输异常。同步/异步传输: 支持阻塞(等待完成&#xff09…