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

发布于:2025-07-06 ⋅ 阅读:(14) ⋅ 点赞:(0)

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

--本地AI电话机

上一篇:手机无网离线使用FunASR识别手机历史通话录音

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


  • 一、前

前面的系列篇章中,我们实现了拦截手机打电话的声音、将FunASR模型部署到手机上识别麦克风声音、对通话录音列表进行ASR文字识别并在录音回放时根据播放位置定位到ASR文本语句等一系列功能。

既然我们可以从麦克风中获取实时语音流进行ASR解析,又支持录音文件中双声道同时ASR识别。那么,我们是否能够对SIM卡通话中的双方沟通的内容做实时的ASR转换呢?

这正是本篇章内容编写的由来,我们依托于蓝牙电话方案实现的拦截和捕获通话的语音数据,在应用中分流到子线程中进行同步的ASR文字识别。并将识别结果输出到悬浮窗的对话列表中,供用户进行实时的内容校对和后续录音回放的内容校对。

体验和下载地址:

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

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

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

  • 二、ASR功能开关

与上一篇章《手机无网离线使用FunASR识别麦克风语音内容》中的入口相同,此处不再赘述。需要特意提醒的是【ASR功能时会尝试从sdcard路径中检测是否存在对应的so库和模型文件,如果之前从未下载过模型文件的,初次下载耗时会比较久】。

如果手机中之前并未下载,初次下载动态库速度很快(约8.1Mb)。但模型文件会下载的很慢(约667Mb),按1Mbps的下载速度,最少需要667/60s=11分钟。

笔者个人建议,如果存在多个手机设备,可以使用电脑将动态库和模型文件的zip压缩包先下载到本地电脑。然后在电脑解压后,使用adb或本地网络传输将文件内容拷贝到每个手机的【/sdcard/ade/】目录。这样可以加快多个手机设备的ASR依赖文件的加载。

  • 三、通话中ASR识别效果

开启ASR识别开关后,在【智能拨号器App】中插入外置USB蓝牙配件,即可正常通过蓝牙拦截SIM卡电话通话的声音。

此时如通过手机对外发起通话,则App打开的悬浮框(左上角显示有ASR字样的图标)会自动展开。并自动将对方通话的语音内容和自己发送给对方的语音内容做ASR文字识别。识别后将文字内容按时间顺序依次在列表中左右排列的展示出来。

如下图所示为手机本机号码(13691724110)呼叫目标对象(10086),通话过程中悬浮窗文字对话列表中展示的效果:

可以看出,跟对话的效果与《手机无网离线使用FunASR识别麦克风语音内容》章节中,使用手机麦克风对话的文字识别效果基本差异不大。识别准确率也基本可以。

  • 四、方案现状与缺陷

在实时通话过程中,目前看来主要有两点缺陷暂时无法克服,对我们规划的【AI通话机器人】的方向有影响,分别为:

1)识别效果还是慢了些,平均1-2秒才能输出说话的内容,如果能缩短这个时间的话,交互会更流畅。

2)最终的文字结果以【vad】、【asr_online】、【asr_offline】、【punc】四个模型合并后的输出为准。当通话对方如示例中的10086这种,输出语音中文字内容比较密集时,ASR解析效率会很缓慢。

这几个问题,有待后续分析和优化排查。

  • 五、总结

本文将FunASR的模型文件和调用入口都放入Android手机中,使手机在无网离线使用的情况下,也能实现对SIM卡电话通话中双方语音沟通内容的ASR解析。

事实上,实现类似“小爱通话”这种解析对方语音并返回TTS自动应答的【AI电话机器人】功能,根本不需要对上行下行两个声道的数据都进行解析(它只要求ASR实时解析的足够快!)。只需要解析通话对端的语音内容即可。本地发出去给对方的声音,是由应用自己TTS生成的内容。理论上不需要再次对它进行解析。

在通话语音质检中,通常分为“实时质检”和“非实时质检”,目前大规模商用的领域基本都仍处于“非实时质检”并且很可能只是抽检的情况下。本文对通话内容做的实时全检的做法,算是比较超前的了。

但是目前看来,将FunASR完全部署到Android手机上,仅利用手机CPU的主频性能,对上行/下行两路语音数据进行ASR文字识别,效果上还是差强人意,有待后续进一步优化和性能提升。