当前位置: 首页 > news >正文

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

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

--本地AI电话机

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

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


  • 一、前

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

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

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

体验和下载地址:

智能拨号器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

  • 二、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文字识别,效果上还是差强人意,有待后续进一步优化和性能提升。

http://www.dtcms.com/a/267492.html

相关文章:

  • Integer缓冲区
  • 大模型算法面试笔记——Bert
  • 【QT】事件(鼠标、按键、定时器、窗口)
  • Visual Studio 2022 MFC Dialog 添加Toolbar及Tips提示
  • Linux命令大全:按功能分类详解(附表格速查)
  • 故障诊断 | CNN-GRU-Attention故障诊断
  • 模块二:C++核心能力进阶(5篇)第四篇《C++对象模型:虚函数表与继承体系内存布局》
  • PJSIP 中的 TCP 传输配置指南
  • Linux内核深度解析:IPv4策略路由的核心实现与fib_rules.c源码剖析
  • 介绍Flutter
  • 06.自动化测试概念
  • 极简 Docker Compose + Nginx + Certbot 自动化 HTTPS 部署指南
  • 深度学习4(浅层神经网络)
  • Python之--基本知识
  • 马来西亚华韵海外华侨联合会宣布李子昂先生荣升名誉理事
  • HarmonyOS学习2---工程目录UIAbility
  • mysql 图形化界面工具 DataGrip 安装与配置
  • 基于人体骨架动作识别的神经信息处理技术(8 ANUBIS数据集)
  • UI前端与数字孪生结合实践案例分享:智慧水利的水情监测与预警系统
  • 信号与槽的总结
  • spring加载外部properties文件属性时,读取到userName变量值和properties文件的值不一致
  • 每日学习问题记录
  • 四、jenkins自动构建和设置邮箱
  • Matplotlib 安装部署与版本兼容问题解决方案(pyCharm)
  • nginx部署发布Vite项目
  • H3C WA6322 AP版本升级
  • 2 大模型高效参数微调;prompt tunning
  • (LeetCode 每日一题) 1394. 找出数组中的幸运数 (哈希表)
  • Vue前端项目接收webSocket信息
  • uniapp 国密sm2加密