手機打電話時如何識別對方按下的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.pswp.cn/web/70796.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/70796.shtml
英文地址,請注明出處:http://en.pswp.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…