手机打电话时如何将通话对方的声音在手机上识别成文字

手机打电话时如何将通话对方的声音在手机上识别成文字

--本地AI电话机器人

上一篇:手机打电话时由对方DTMF响应切换多级IVR语音应答(一)

下一篇:手机打电话时由对方DTMF响应切换多级IVR语音应答(二)


  • 一、前言

本篇章的内容采用阿里的FunASR的模型和运算库,采用纯离线的方式(模型库下载完毕并加载后,可以完全关闭Wifi和4G后再识别),进行手机本地的ASR(语音转文字)识别。

由于本次只选用FunASR的离线部分的模型库,App初次加载ASR时,会从服务器单独下载8.15M的armeabi平台的so动态库,以及208M的asr_offline与vad的模型文件。存放与手机本地sdcard中,供App进行加载和使用。

其实这个功能在2023年11月的时候已经在“智能拨号器App”中简单的调试了出来,效果也算勉强能看一看。但真正要达到商用的效果,还是得专项针对性的优化一番。在该App中的识别效果如下:

(由于FunASR的标点符号模型高达1.5G,太大了,此处不加载标点符号的模型)

智能拨号器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识别的主流方向

业界内通常采用“端+云”的模式进行语音识别模块的运算,即:本地ASR通常采用轻量级的语音识别模型,能够处理简单的语音指令(如唤醒词、开灯/关灯等);而对于复杂的语音指令,则将语音信号上传至云端进行处理。

如下图的“车载语音的ASR识别”中,就将车载设备上接收到的语音数据,拆分为“本地ASR”和“云端ASR”两个部分。并将两个识别的结果已经对应的响应结果合并后,通过TTS模块进行语音的应答。

相关的“端+云”架构模式,可以参考下图:

(图片来源:

《车载语音系统(VOS)的架构与技术实现》

车载语音系统(VOS)的架构与技术实现 )

在一个典型的“智能客服系统”的架构中,ASR识别引擎所处的架构大致为如下的位置:

(图片来源:

《基于FreeSWITCH和AI的热门应用场景技术分析报告》

基于FreeSWITCH和AI的热门应用场景技术分析报告 )

  • 三、ASR模型和库文件的加载

在SDK-Demo中,由于ASR识别使用的so动态库和模型库比较大,项目采用“动态加载”的方式,当界面中确实需要开启“通话对方声音转文字”的功能时,才主动从服务器拉取so库和ASR模型并进行加载。如下图所示:

(SDK-Demo的APK才4.3M,armeabi的so库就达8.15M,ASR仅离线模型就高达208M)

当界面中勾选对应的复选框后,App会判断是否之前已下载过该ASR模型库,若未下载则弹出【实时质检(ASR)开关】的提示框,由用户确认并手动下载对应的文件到手机本地SD卡。

用户确认开启后,将依次弹出两个异步的下载进度条框,依次下载【armeabi.zip】和【asr.zip】后并解压到SD卡的本地目录。供App做进一步的加载使用。如下图所示:

  • 四、ASR的麦克风识别

App中,模型和so库下载并解压完毕后,SDK将对其进行动态加载。加载完毕后界面显示【通话语音实时ASR转文字】的区域。

用户可点击区域右侧的【麦克风测试】按钮(点击了之后文字显示就变为“停止录音”),进行手机本地的麦克风语音采集并根据这个语音数据进行ASR识别。识别后会同步将识别结果显示在【通话语音实时ASR转文字】的列表区域。如下图所示:

我们简单的使用汉语,对着麦克风念了几句话,识别结果可以参看图中的列表的内容。

可以看出,准确率还可以,但没有标点符号,并且识别效率太低。说完话之后要4-6秒才会识别出对应的结果。当前现状根本没法用在实时的商用场景。

  • 五、ASR的电话通话识别

上一章讲述的是单上行通道(仅麦克风数据)的识别结果。我们简单的使用SDK-Demo的App,使用移动的手机卡来拨打10086和1008611这两个电话。

看看在App中“通话后播放IVR引导提示语”和“通话声音实时ASR转文字”的功能的识别和展示效果。如下图所示:

目前看来ASR的文字识别效果的准确率还可以。比如图片右侧的【136xxxxx110】号码,它说的话是在IVR中预先录制的“查话费/查流量/查余额”的语音。在识别过程中,ASR模型能够很好的识别我们往通话对方注入的语音,并转为文字进行展示。

通话列表左侧的10086和1008611返回的语音中,从文字内容来看,识别准确度应该还算可以,但有两点问题比较致命:

  1. 语音片段丢失,未被正常全部识别(估计可以通过加大缓冲区间来规避)
  2. 识别时效性太差,如上章所说,说一句话要4-6秒才会识别出结果,黄花菜都凉了。

  • 六、总结

我们尝试在蓝牙电话SDK中,引入一些跟AI方向相关的算法和能力。本篇章中,我们想突破传统的业内“端+云”的做法,想仅仅依靠端侧的算力(毕竟智能手机处理性能这么强,存储空间又大)来独立完成ASR语音转文字的功能。

目前从实践的结果来看,算法和模型库不给力啊。当前暂时没有发现能够直接移植到手机、且完全不依赖网络,并能够获得比较良好的ASR识别的算法和模型库。

后面有机会的话,还是要深入挖掘这个方向,或者实在不行就随大流,部署一套“云”ASR识别的模型库,看看识别效果、实时性等的差异,进行整体对比。

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

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

相关文章

uniapp-商城-61-后台 新增商品(添加商品到数据库)

完成商品的布局&#xff0c;完成商品的属性添加&#xff0c;最后的目的还是要完成数据添加&#xff0c;将我们前台的数据添加后台的数据库。 1、界面 2、点击提交完成商品添加 点击下方的提交按钮&#xff0c;将数据添加到数据库。 onSubmit 使用该函数---见3 <view cla…

A级、B级弱电机房数据中心建设运营汇报方案

该方案围绕A 级、B 级弱电机房数据中心建设与运营展开,依据《数据中心设计规范》等标准,施工范围涵盖 10 类机房及配套设施,采用专业化施工团队与物资调配体系,强调标签规范、线缆隐藏等细节管理。运营阶段建立三方协同运维模式,针对三级故障制定30 分钟至 1 小时响应机制…

RAG数据处理:PDF/HTML

RAG而言用户输入的数据通常是各种各样文档&#xff0c;本文主要采用langchain实现PDF/HTML文档的处理方法 PDF文档解析 PDF文档很常见格式&#xff0c;但内部结构常常较复杂&#xff1a; 复杂的版式布局多样的元素&#xff08;段落、表格、公式、图片等&#xff09;文本流无…

时源芯微| KY键盘接口静电浪涌防护方案

KY键盘接口静电浪涌防护方案通过集成ESD保护元件、电阻和连接键&#xff0c;形成了一道有效的防护屏障。当键盘接口受到静电放电或其他浪涌冲击时&#xff0c;该方案能够迅速将过电压和过电流引导至地&#xff0c;从而保护后续电路免受损害。 ESD保护元件是方案中的核心部分&a…

Java 原生网络编程(BIO | NIO | Reactor 模式)

1、基本常识 Socket 是应用层与 TCP/IP 协议族通信的中间软件抽象层&#xff0c;是一组接口&#xff0c;使用了门面模式对应用层隐藏了传输层以下的实现细节。TCP 用主机的 IP 地址加上主机端口号作为 TCP 连接的端点&#xff0c;该端点叫做套接字 Socket。 比如三次握手&…

OpenCV透视变换

概念 OpenCV 透视变换是将图像从一个视平面投影到另一个视平面的过程&#xff0c;也叫投影映射 &#xff0c;属于空间立体三维变换。它基于透视原理&#xff0c;通过 33 的变换矩阵作用于图像像素坐标来实现映射转换 &#xff0c;能模拟人眼或相机镜头观看三维空间物体时的透视…

STM32F103定时器1每毫秒中断一次

定时器溢出中断&#xff0c;在程序设计中经常用到。在使用TIM1和TIM8溢出中断时&#xff0c;需要注意“TIM_TimeBaseStructure.TIM_RepetitionCounter0;”&#xff0c;它表示溢出一次&#xff0c;并可以设置中断标志位。 TIM1_Interrupt_Initializtion(1000,72); //当arr1…

数据库——SQL约束窗口函数介绍

4.SQL约束介绍 &#xff08;1&#xff09;主键约束 A、基本内容 基本内容 p r i m a r y primary primary k e y key key约束唯一表示数据库中的每条记录主键必须包含唯一的值&#xff08;UNIQUE&#xff09;主键不能包含NULL值&#xff08;NOT NULL&#xff09;每个表都应…

【typenum】 8 常量文件(consts.rs)

一、源码 这段代码通过类型级编程&#xff08;type-level programming&#xff09;在编译期实现数值计算。以下是常量定义部分&#xff1a; // THIS IS GENERATED CODE #![allow(missing_docs)] use crate::int::{NInt, PInt}; /** Type aliases for many constants.This fil…

第8讲、Multi-Head Attention 的核心机制与实现细节

&#x1f914; 为什么要有 Multi-Head Attention&#xff1f; 单个 Attention 机制虽然可以捕捉句子中不同词之间的关系&#xff0c;但它只能关注一种角度或模式。 Multi-Head 的作用是&#xff1a; 多个头 多个视角同时观察序列的不同关系。 例如&#xff1a; 一个头可能专…

百度智能云千帆携手联想,共创MCP生态宇宙

5月7日&#xff0c;2025联想创新科技大会&#xff08;Tech World&#xff09;在上海世博中心举行&#xff0c;本届大会以“让AI成为创新生产力”为主题。会上&#xff0c;联想集团董事长兼CEO杨元庆展示了包括覆盖全场景的超级智能体矩阵&#xff0c;包括个人超级智能体、企业超…

【OpenCV】帧差法、级联分类器、透视变换

一、帧差法&#xff08;移动目标识别&#xff09;&#xff1a; 好处&#xff1a;开销小&#xff0c;不怎么消耗CPU的算力&#xff0c;对硬件要求不高&#xff0c;但只适合固定摄像头 1、优点 计算效率高&#xff0c;硬件要求 响应速度快&#xff0c;实时性强 直接利用连续帧…

数据库迁移的艺术:团队协作中的冲突预防与解决之道

title: 数据库迁移的艺术:团队协作中的冲突预防与解决之道 date: 2025/05/17 00:13:50 updated: 2025/05/17 00:13:50 author: cmdragon excerpt: 在团队协作中,数据库迁移脚本冲突是常见问题。通过Alembic工具,可以有效地管理和解决这些冲突。冲突预防的四原则包括功能分…

Linux常用命令43——bunzip2解压缩bz2文件

在使用Linux或macOS日常开发中&#xff0c;熟悉一些基本的命令有助于提高工作效率&#xff0c;bunzip2可解压缩.bz2格式的压缩文件。bunzip2实际上是bzip2的符号连接&#xff0c;执行bunzip2与bzip2 -d的效果相同。本篇学习记录bunzip2命令的基本使用。 首先查看帮助文档&#…

盲盒:拆开未知的惊喜,收藏生活的仪式感

一、什么是盲盒&#xff1f;—— 一场关于“未知”的浪漫冒险 盲盒&#xff0c;是一种充满神秘感的消费体验&#xff1a; &#x1f381; 盒中藏惊喜——每个盲盒外观相同&#xff0c;但内含随机商品&#xff0c;可能是普通款、稀有款&#xff0c;甚至是“隐藏款”&#xff1b;…

Android 中使用通知(Kotlin 版)

1. 前置条件 Android Studio&#xff1a;确保使用最新版本&#xff08;2023.3.1&#xff09;目标 API&#xff1a;最低 API 21&#xff0c;兼容 Android 8.0&#xff08;渠道&#xff09;和 13&#xff08;权限&#xff09;依赖库&#xff1a;使用 WorkManager 和 Notificatio…

使用大模型预测急性结石性疾病技术方案

目录 1. 数据预处理与特征工程伪代码 - 数据清洗与特征处理数据预处理流程图2. 大模型构建与训练伪代码 - 模型训练模型训练流程图3. 术前预测系统伪代码 - 术前风险评估术前预测流程图4. 术中实时调整系统伪代码 - 术中风险预警术中调整流程图5. 术后护理系统伪代码 - 并发症预…

每日Prompt:生成自拍照

提示词 帮我生成一张图片&#xff1a;图片风格为「人像摄影」&#xff0c;请你画一张及其平凡无奇的iPhone对镜自拍照&#xff0c;主角是穿着JK风格cos服的可爱女孩&#xff0c;在自己精心布置的可按风格的房间内的落地镜前用后置摄像头随手一拍的快照。照片开启了闪光灯&…

动态规划-64.最小路径和-力扣(LetCode)

一、题目解析 从左上角到右下角使得数字总和最小且只能向下或向右移动 二、算法原理 1.状态表示 我们需要求到达[i,j]位置时数字总和的最小值&#xff0c;所以dp[i][j]表示&#xff1a;到达[i,j]位置时&#xff0c;路径数字总和的最小值。 2.状态转移方程 到达[i,j]之前要先…

LeetCode LCR 010 和为 K 的子数组 (Java)

两种解法详解&#xff1a;暴力枚举与前缀和哈希表寻找和为k的子数组 在解决数组中和为k的连续子数组个数的问题时&#xff0c;我们可以采用不同的方法。本文将详细解析两种常见的解法&#xff1a;暴力枚举法和前缀和结合哈希表的方法&#xff0c;分析它们的思路、优缺点及适用…