手机打电话时如何识别对方按下的DTMF按键的字符-安卓AI电话机器人

手机打电话时如何识别对方按下的DTMF按键的字符

--安卓AI电话机器人

  • 一、前言

前面的篇章中,使用蓝牙电话拦截手机通话的声音,并对数据加工,这个功能出来也有一段时间了。前段时间有试用的用户咨询说:有没有办法在手机上,识别出通话时对方手机按下的DTMF按键?就那种电话打通了之后,语音提示对方“按1查话费、按2查流量、按0转人工”这种功能。之前检索了一下,Android系统截至目前,并未提供此类“DTMF解码器”的解析能力。

我们静下心来思考了一下,觉得这样的经典IVR场景的需求是非常合理的。以前我们都是建议用户直接对接到呼叫中心或CRM,由这种语音平台对通话中的DTMF频率进行解码和识别。但如果不接入呼叫中心呢?我们手机本身是否能够从语音中直接识别出来呢?

这也是本篇章内容编写的由来。用户的需求,就是我们产品演化的方向和动力。在本篇章中,我们从DTMF频率的组成、FFT过滤声音的频率,以及DTMF字符的识别等角度,一起探讨一下:Android手机中,如何通过手机app,识别出通话时对方手机到底有没有按键、按的是哪个dtmf按键

这个课题方向,估计也比较新颖,因为一般也没有人去干这种事(一般情况确实也没有这个需求,打个电话谁会关注对方按什么键呢?又不是打摩斯密码)。但是从一般应用场景来看也确实有这个需求。

  • 二、认识DTMF按键

我们一般使用电话座机或手机,拨打电话时,在振铃阶段或接通后,均可以按下键盘上的数字0-9、*、#等按键,把对应的DTMF按键值发送给对方。通话的对方接收该按键值后进行业务处理和反馈。

通常来说,人耳是无法区分不同的DTMF按键值的,这也是DTMF(双音多频)中传输的频率太高,远超出人耳能分辨的频率所致。按下按键后,通常人耳只能听到“嘟嘟”的按键提示音,具体解析要由对应的数学运算模块对语音进行处理和识别。

本篇是应用文,多余的理论就不在赘述,主要看下面这个图。对语音数据做FFT运算(从时空域转频域),把横坐标和纵坐标的两个频率确定了,DTMF的数字字符就出来了:

详细描述看这个网址:http://en.wikipedia.org/wiki/Dual-tone_multi-frequency_signaling,有空自己去参考。

  • 三、对声音数据做FFT运算

FFT运算算是非常经典和基础的算法了,特别对于音频和视频图像处理领域。本来我们在做之前还在想,要不要将FFT和DTMF字符识别的功能,做成一个纯Java的jar包,供有需要的或感兴趣的同学在Android中试着调用。

但在实践中发现真没必要,直接使用TarsosDSP库就好,反正也就400KB左右,又不大。

具体案例可以参考GitHub上的开源示例代码:

https://github.com/GreyLabsDev/TarsosDSP-Example

下载下来后,将TarsosDSP-Android-2.4.jar文件丢到Android项目的app\libs目录即可。

具体的FFT运算和DTMF识别,可以参考DeepSeek中检索的代码(实际测试确实可用,不得不说,DS真TM好用。^V^),示例内容如下图所示:

  • 四、识别出DTMF字符

这个也没什么技术含量,直接按上面章节的DTMF(双音多频)的频率,进行高频和低频的解析,然后判断后即可正常识别出对方按下的DTMF按键字符。

DeepSeek中检索的内容这里也直接贴出来了,可以直接用。有兴趣的可以参考或自己在里面按关键字来提问获取代码。

有两点需要特意注明一下:

1、声音的DTMF解码处理,最好放到新的子线程当中去执行。这样可以不干扰原有业务的语音播放和识别处理。子线程中大多数时间都不反馈DTMF字符,如果有的话单独另外处理上抛的消息即可。

2、20ms一包的语音数据(每包数据320 字节)的FFT 的分辨率较低。通常需要缓存多包数据(如 40ms 或 80ms)来提高频率检测的准确性。按照一般理论,8k采样率下,采样点数量为205时,FFT运算的精度和识别的效果最好。

  • 五、最终输出结果

子线程中FFT运算后上抛的DTMF按键值,基本上准确率还是比较高的。但由于每次DTMF音的时长较长,需要对识别的按键结果做去除重复的处理。

在运算性能上,由于本篇针对的是语音通话的上行数据做的处理。运算量非常的小,测试结果表明,Android手机上DTMF软解码功能的引入,对app的运算性能几乎可以忽略不计,放心大胆的用。

  • 六、总结

本篇这个课题,通话时解码对方按下的DTMF按键值这种需求,正常使用手机的人群,偶尔可能会有这个想法一闪而过,但估计一般人也没有这个需求。毕竟我们打电话都是用人耳来接听,但人耳是无法分辨DTMF的“嘟嘟”声的。

这里之所以会出现识别的需求,前提条件是蓝牙电话方案中,已经能将手机SIM卡通话的声音给提取了出来。在这个基础之上,扩展出在手机本地进行DTMF识别来对接本地的IVR或AI电话机器人。

目前看起来,从语音中提取DTMF按键字符,还是非常简单的。在通话语音数据中挂一个子线程,把数据丢进去,等待它识别字符并上抛出来就行。

本篇章的内容,除了对手机声音IVR/AI处理功能比较刚需之外,对于的SIP坐席电话的数据处理,也能起到一定的参考作用。


上一篇:ADB点击实战-做一个自动点广告播放领金币的脚本app

下一篇:Android应用app实现AI电话机器人接打电话

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

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

相关文章

【Go】十八、http 调用服务的编写

http接口框架的搭建 这个http接口框架的搭建参考之前的全量搭建,这里是快速搭建的模式: 直接对已有的http模块进行复制修改,主要修改点在于 proto部分与api、router 部分,剩余的要针对进行修改模块名称。 接口的具体编写 在 a…

WiseFlow本地搭建实录---保姆教程

今天从零开始搭建了Wiseflow的本地环境搭建,目前使用的都是免费的API,我建议大家可以一起尝试一下搭建自己的关键信息的数据库,我是windows的环境,但是其他的应该也差不多,踩了很多坑,希望这篇文章能帮大家…

数的计算(蓝桥云课)

题目描述 输入一个自然数 n (n≤1000)n (n≤1000),我们对此自然数按照如下方法进行处理: 不作任何处理; 在它的左边加上一个自然数,但该自然数不能超过原数的一半; 加上数后,继续按此规则进行处理,直到不能再加自然数为止。 问总共可以产生多少个数。 输入描述 输…

知识库功能测试难点

图表交互功能测试难点 知识库图表类型多,每种图表交互功能不同。像柱状图,可能有点击柱子查看详细数据、鼠标悬停显示数据提示等交互;折线图除了这些,还可能支持缩放查看不同时间段数据。多种交互操作在不同图表间存在差异&#x…

【人工智能】数据挖掘与应用题库(201-300)

1、在LetNet5网络中,卷积核的大小是? 答案:5*5 2、LeNet5网络参数的数量约为? 答案:6万 3、AlexNet与LeNet5相比,使用了哪些机制来改进模型的训练过程? 答案: 数据增广Dropout抑制过拟合ReLU激活函数CUDA加速神经网络训练4、VGGNet使用的卷积核的大小是? 答案:…

web安全渗透测试 APP安全渗透漏洞测试详情

前言 小小白承包了一块20亩的土地,依山傍水,风水不错。听朋友说去年玉米大卖,他也想尝尝甜头,也就种上了玉米。 看着玉米茁壮成长,别提小小白心里多开心,心里盘算着玉米大买后,吃香喝辣的富贵…

CSS处理内容溢出

<!DOCTYPE html> <html lang"zh-cn"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>处理内容溢出</title><style>#d1{wid…

拉丁超立方采样(Latin Hypercube Sampling)技术详解及实现

拉丁超立方采样(Latin Hypercube Sampling)技术详解 拉丁超立方采样(Latin Hypercube Sampling)技术详解1. 引言2. 拉丁超立方采样原理3. 数学公式描述4. Python代码实现代码解析5. 应用场景与优势6. 在化工中的应用6.1 工艺参数优化6.2 不确定性量化与风险评估6.3 实验设计…

docker-compose部署onlyoffice8.3.0并支持ssl,且支持通过nginx代理,关闭JWT配置

编写docker-compose文件 mkdir -p /data/onlyoffice && echo "version: 3services:onlyoffice:container_name: OnlyOfficeimage: onlyoffice/documentserver:8.3.0restart: alwaysports:- 8088:80- 64431:443environment:TZ: Asia/ShanghaiJWT_ENABLED: falsevol…

Sliding Window Attention(滑动窗口注意力)解析: Pytorch实现并结合全局注意力(Global Attention )

Sliding Window Attention&#xff08;滑动窗口注意力&#xff09;解析 Sliding Window Attention&#xff08;滑动窗口注意力&#xff09; 是 Longformer (来源&#xff1a;https://arxiv.org/pdf/2004.05150)提出的 稀疏注意力机制&#xff0c;旨在解决 标准 Transformer 计算…

【运维】内网服务器借助通过某台可上外网的服务器实现公网访问

背景&#xff1a; 内网服务器无法连接公网,但是办公电脑可以连接内网服务器又可以连接公网。 安装软件 1、frp 2、ccproxy 配置 1、内网服务器 # 内网服务器启动frp服务配置文件参考vi frps.ini# frps.ini [common] bind_port 7000# 备注: bind_port端口可以随意配置。配置完…

flask 是如何分发请求的?

这篇博客会涉及一些 WSGI 的知识&#xff0c;不了解的可以看这篇博客&#xff0c;简单了解一下。 Python 的 WSGI 简单入门 一、请求在 flask 中的处理过程 我们先来看一下 werkzeug.routing 包下 Map 和 Rule 方法的使用&#xff0c;这里给出一个官方的示例&#xff08;我进…

怎么获取免费的 GPU 资源完成大语言模型(LLM)实验

怎么获取免费的 GPU 资源完成大语言模型(LLM)实验 目录 怎么获取免费的 GPU 资源完成大语言模型(LLM)实验在线平台类Google ColabKaggle NotebooksHugging Face Spaces百度飞桨 AI Studio在线平台类 Google Colab 特点:由 Google 提供的基于云端的 Jupyter 笔记本环境,提…

Python开发Django面试题及参考答案

目录 Django 的请求生命周期是怎样的? Django 的 MTV 架构中的各个组件分别是什么? Django 的 URL 路由是如何工作的? Django 的视图函数和视图类有什么区别? Django 的模板系统是如何渲染 HTML 的? Django 的 ORM 是如何工作的? Django 的中间件是什么?它的作用是…

【图像的读写与基本操作】

图像的读写与基本操作 目录 图像的读写与基本操作目标知识点1. 图像的读写 &#xff1a;2. 图像的缩放 &#xff1a;3. 图像的翻转 &#xff1a;4. 图像的裁剪 &#xff1a;5. 颜色空间转换 &#xff1a; 示例代码1. 图像的读写 &#xff1a;2. 图像的缩放 &#xff1a;3. 图像…

《数字图像处理》笔记

文章目录 第一章 绪论1.1 什么是数字图像处理数字图像的概念数字图像的组成数字图像处理的概念 1.4 数字图像处理的基本步骤 第二章 数字图像基础2.2 光和电磁波谱可见光单色光灰度级发光强度光通量亮度 2.3 图像感知和获取将照射能量变换为数字图像的传感器简单的图像形成模型…

网络安全扫描--基础篇

前言 1、了解互联网安全领域中日趋重要的扫描技术 2、了解在不同网络场景下扫描技术手段 3、熟悉linux下系统内核防护策略并能大件一个有效的系统防护体系 4、增强工作安全意识&#xff0c;并能有效的实践于工作场景中 目录 1、熟悉主机扫描工具&#xff08;fping&#xff0c;…

前端防重复请求终极方案:从Loading地狱到精准拦截的架构升级

&#x1f525; 事故现场还原&#xff1a;疯狂点击引发的血案 凌晨1点23分&#xff0c;监控系统突然告警&#xff1a; &#x1f4c9; 服务器CPU飙升至98% &#x1f5c3;️ 数据库出现3000脏数据 &#x1f4a5; 用户端弹出上百个错误弹窗 事故原因&#xff1a;黑产脚本通过0.5秒…

基于Spring Boot的供应商管理系统设计与实现(LW+源码+讲解)

专注于大学生项目实战开发,讲解,毕业答疑辅导&#xff0c;欢迎高校老师/同行前辈交流合作✌。 技术范围&#xff1a;SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容&#xff1a;…

Redis|事务

文章目录 是什么能干嘛Redis 事务 VS 数据库事务怎么玩小总结 是什么 首先回想一下什么是数据库的事务&#xff1f;数据库事务是指作为单个逻辑单元执行的一系列操作&#xff0c;具备以下四个关键特性&#xff08;ACID&#xff09;&#xff1a; 原子性&#xff08;Atomicity&am…