本地AI电话机器人-将手机电话通话声音通过udp传输到局域网的Python脚本

本地AI电话机器人-将手机电话通话声音通过udp传输到局域网的Python脚本

将手机电话通话声音通过udp传输到局域网的Python脚本

--本地AI电话机器人

  • 一、前言

上一篇:手机转SIP-手机做中继网关-落地线路对接软交换呼叫中心下一篇:刷抖音/看电子书-如何让手机自动上下翻页和左右翻页


前面我们通过两个篇章《手机SIM卡通话中随时插入录音语音片段(Android方案)》《手机SIM卡通话中随时插入录音语音片段(Windows方案)》,阐述了【手机打电话过程中,随机插播预录语音片段】的功能和根据对方手机按下DTMF按键,播放不同IVR应答语音片段给对方手机的能力。

在AI电话沟通时,由于手机性能和算力的局限性,通常AI交互的模型和算法无法部署到手机上。这样的话就需要将拦截到的手机通话的声音数据,通过网络(局域网或互联网)将语音包传输给AI算力服务器。由其对语音进行ASR识别和语义理解,并生成最终的应答TTS语音,反馈回手机注入到电话通话中。

当前市面上主流的实时语音流的传输方式主要有两种:

1)SIP/WebRTC协议及配套的RTP/RTCP语音数据传输。

2)直接将语音数据以udp广播或组播的方式分发给局域网内多个设备。

前面我们花了很多的篇章和研发力量在SIP协议,对接开源的FreeSwitch和VOS与呼叫中心上,(详情可参考文章《蓝牙电话与FreeSwitch服务器和UA坐席的通话》)。

事实上手机电话通话做AI呼叫,本质上跟SIP协议没有太大的依赖关系。手机APP提取到通话声音后,完全可以把这个声音数据直接传给局域网内的AI服务器,或者让手机自己的AI模型来消费和应答这个声音会话。(众所周知,SIP协议无法处理“通话号码带逗号-实现拨通后自动拨出分机号”这样的能力,但你直接传的话就没有这种问题)

本文就是基于这样的场景,使局域网内部署的一台AI服务器,就可以通过udp数据包,同时处理多台Android手机发来的AI呼叫请求,并生成对应TTS语音应答。

由于数据交互全在局域网内进行,因此其【端到端】通话的时延可以得到最大程度的保证(TTL只有1跳或2跳,路由的路径非常短)。这样既能利用AI算力服务器的堆叠密度,又能同时处理和响应多路手机SIM卡的电话通话。实现高效的AI呼叫和成本的压缩。

体验和下载地址:

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

拨号器声音(Python源码):http://120.78.211.195:8060/sdk/dialer_audio_py.zip

当前商用方案是蓝牙电话的方案,需要依赖一个外置的USB蓝牙的配件,插入到手机上,才能拦截到电话通话的声音数据。因此需要额外购买一个USB蓝牙配件。

USB蓝牙配件购买路径(参考):https://item.jd.com/100049950520.html

  • 二、方案的依赖配件

关注过我们博客的朋友都知道:目前拦截手机通话声音的蓝牙电话方案,需要将USB蓝牙的配件插入到手机上,才能在手机APP拦截到电话通话的事件和声音数据。

这个方案最大的好处是:不限制手机,市面上任何品牌型号的Android手机,拿来装上app,插上USB配件后,就能拦截到电话通话语音。普适性非常的广。市面上任何新的手机和二手的手机都支持这样用。依赖的手机配件如下图所示:

买来的USB蓝牙配件,可以直接插在手机上使用。但是因为是公共的标准配件,需要有一个USB转typec的转接头才能插到Android手机上,没有的话可以去京东淘宝拼多多买一个即可,非常的便宜。

  • 三、方案的依赖界面

蓝牙电话方案使用Android手机APP,通过插入手机的USB蓝牙来直接拦截电话通话的声音。因此为了能让它将语音数据和通话事件公开到手机所在的局域网中,需要对【智能拨号器app】进行一个基础的默认设置,如下图所示:

【智能拨号器app】的设置选项卡中,点击右上角齿轮图标,打开【APP应用设置】界面后,将原先默认的“SIP协议栈:连接SIP平台”关闭为“协议栈:手机IVR-AI语音处理”。

APP应用设置中,做了这个默认设置切换了之后,APP拦截到的电话通话声音将不再进行SIP协议的转发,而是在手机APP自身和局域网内,广播寻址找到【远程声音设备】进行电话通话声音数据的播放和输出。

  • 四、Python客户端的命令行菜单

本文的Python脚本的源代码,即为拨号器的远程声音设备的标准输入输出的源文件,它支持Windows/Linux/MacOS三大平台(用DeepSeek帮我写的,MacOS暂时没有这个电脑来调试,不知道是否能运行和有声音,^V^,但Windows11和Ubuntu18.04肯定能用)。

详细的Windows和Ubuntu操作系统的安装和配置步骤,已在附件下载路径《dialer_audio_py.zip》压缩包中的README.md文件内容中描述的很清楚了。

此处简要的列举一下,执行了【

pip install sounddevice numpy colorama

python main.py

】命令之后,随便输入help或直接按下Enter键,打印的命令行提示内容,如下所示:

# 进去后输入help 按提示逐个输入discover / bind 21ea5105736c3285 绑定后手机app上会弹框出来提示是否接受远程声音设备的绑定-需要手机APP上允许。

# 至此,即可使用 call 10086 / hangup / dtmf 2 等指令,正常在windows11中使用python连接局域网内的智能拨号器app来实时通话啦。

用户可以简单的使用如下指令,来完成一个外呼的手机通话,对手机进行远程操控:

  如常用的拨打10086等待接通后说话   call 10086

  通话中发送DTMF数字               dtmf 2

  拨打完毕后挂断电话                 hangup

  • 五、拨号器声音程序架构

其实有Python脚本的源代码之后,什么架构啊、交互时序和指令内容啊,都是多余的。有啥不懂的直接跳转去看代码即可,反正就六七个py文件而已,非常的简洁易懂。

但这里为了便于理解,还是画蛇添足一次:Python脚本作为【远程声音设备】的程序,主要使用udp+tcp结合的方式来进行工作的。

UDP协议负责进行广播找人、寻址和绑定双方的目标设备,以及电话通话时直接传输上行和下行的全双工的语音数据。UDP占用42700-42703的udp端口。

TCP协议负责建立稳定的连接,保证通话的事件和状态能够准时、完整的在局域网双方设备之间进行数据交换。TCP占用电脑的随机端口和手机的42700端口。

它们之间的逻辑架构,如下图所示:

  • 六、Python程序的传输端口和交互指令

Python脚本做为拨号器的远程声音设备,交互指令和状态机总体还是比较简单的,交互指令的时序图如下:(它主要分为三个阶段:UDP发现、TCP连接、电话通话

交互执行的详细json格式内容如下:

指令描述

指令json格式内容

UDP设备发现

{ "type": "REQUEST_AUDIO", "sn": "设备GUID或空字符串" }

声音源响应

{ "type": "RESPONSE_AUDIO", "sn": "f87cca772abcf96f", "company": "设备厂商", "ip": "192.168.31.241", "port": 42700 }

Call消息

{ "type": "Call", "number": "13800138000", "call_type": "normal" }

Answer消息

{ "type": "Answer" }

Hangup消息

{ "type": "Hangup" }

DTMF消息

{ "type": "DTMF", "digit": "1", "duration": 100 }

外呼响应

{ "type": "OnCallDialing", "number": "13800138000" }

呼叫振铃事件

{ "type": "OnCallProgress", "number": "13800138000" }

电话被接通

{ "type": "OnCallConnected", "number": "13800138000" }

被拒接

{ "type": "OnCallReject", "reason": "用户拒接" }

主动取消

{ "type": "OnCallCancel", "reason": "用户取消" }

接通后挂断

{ "type": "OnCallHangup", "reason": "正常结束" }

详细的交互指令内容,见上述附件下载路径《dialer_audio_py.zip》压缩包中的README.md文件内容所述,需要的可自行下载后查阅。

  • 七、总结

经本篇章这么一顿操作,我们也算是部分的代码开源了。从文中各个章节的描述上看,其实局域网内的数据交互,是非常的简洁的。事实上也本就该如此,如果不考虑目前AI算力和芯片差异,真正的【端到端】AI通话,就应该是【手机-手机】通话,跟网络(局域网或互联网)没有半毛钱关系。

只是因为当前手机算力不足,没法跑AI的大模型,才引出了将手机通话的语音传递到AI算力服务器上。AI响应完毕后转成TTS语音数据再返回手机做注入而已。

这样就引出了【1个AI算力服务器+多个Android手机】这样复用的高效率组合,这样的场景下,很明显,直接使用UDP或RTP,将语音数据通过一个udp端口发到AI服务器,使AI服务器能够同时处理多路语音的呼叫,是正常的标准做法。

我们通过这种方式,在【拦截手机打电话的声音】基础之上,很容易就能扩充出:通话中【随机插播预录语音片段】、AI外呼、AI来电接听等高级功能。

本文的UDP寻址和电话语音数据的交互方式,对同方向的语音和视频类应用,也具有一定的参考意义。

Read more

FPGA Transformer加速完全指南:从模型优化到硬件实现(附实战案例)

🚀 FPGA Transformer加速完全指南:从模型优化到硬件实现(附实战案例) 📚 目录导航 文章目录 * 🚀 FPGA Transformer加速完全指南:从模型优化到硬件实现(附实战案例) * 📚 目录导航 * 概述 * 第一部分:Transformer基础与FPGA加速价值定位 * 1.1 Transformer架构概览 * 1.1.1 Transformer的基本结构 * 1.1.2 Transformer的关键特性 * 1.1.3 常见的Transformer变体 * 1.2 Transformer推理的挑战 * 1.2.1 计算复杂度分析 * 1.2.2 内存访问瓶颈 * 1.2.3 非线性操作的挑战 * 1.2.4 推理延迟分析 * 1.3

Science子刊超绝idea:注意力机制+强化学习!足式机器人障碍穿越首次达成 100% 成功率

Science子刊超绝idea:注意力机制+强化学习!足式机器人障碍穿越首次达成 100% 成功率

近期,注意力机制+强化学习这个方向迎来了重磅突破。苏黎世联邦理工学院机器人系统实验室在《Science Robotics》(IF=26.1)中提出了一种创新的控制框架: 该框架通过结合强化学习和多头注意力机制,让机器人在面对不同类型地形时,能做到精准判断和灵活适应,从而实现100%障碍穿越成功率! 值得一提的是,当前注意力机制+强化学习这个方向已从方法创新阶段进入了性能优化和应用拓展阶段,而这篇顶刊成果,正是该趋势在机器人控制领域的完美范例!对于想做这个方向的论文er说,属于必看文章! 当然这方向还有不少值得参考的成果,我已经帮大家筛选并整理了11篇高质量的文章,包含顶会顶刊,附代码,先学习一下前人的思路再入手,能高效地找到自己的idea。 全部论文+开源代码需要的同学看文末 ARiADNE: A Reinforcement learning approach using Attention-based Deep Networks for Exploration 关键词:Reinforcement Learning、Attention Mechanism、Autonom

革新性物联网开发平台:低代码技术重构设备互联生态

革新性物联网开发平台:低代码技术重构设备互联生态 【免费下载链接】PandaX🎉🔥PandaX是Go语言开源的企业级物联网平台低代码开发基座,基于go-restful+Vue3.0+TypeScript+vite3+element-Plus的前后端分离开发。支持设备管控,规则链,云组态,可视化大屏,报表设计器,表单设计器,代码生成器等功能。能帮助你快速建立IOT物联网平台等相关业务系统。 项目地址: https://gitcode.com/gh_mirrors/pa/PandaX 在工业4.0与数字化转型的交汇点,你是否正面临设备接入复杂、数据孤岛严重、开发周期冗长的困境?作为一款企业级物联网开发平台,PandaX以低代码开发为核心,整合设备数据可视化与工业物联网解决方案,帮助你快速构建设备远程监控系统与物联网数据中台。这款基于Go语言构建的开源框架,通过前后端分离架构与模块化设计,重新定义了物联网应用的开发模式。 行业痛点与技术瓶颈 当企业尝试部署物联网系统时,通常会遭遇三重挑战:首先是设备协议碎片化,不同厂商的传感器、控制器采用各异的通信标准,导致接入成本居高不下;其

比 OpenClaw 轻 99%!我用 nanobot 搭了个 QQ AI 机器人,还顺手贡献了代码

❝ 4000 行代码,打造你的私人 AI 助手❞ 前言 最近 AI Agent 领域有个项目特别火——「OpenClaw」,它是一个功能强大的 AI 助手框架,能让你拥有一个 7×24 小时在线的智能助理。 但当我 clone 下来准备研究时,发现它有 「43 万行代码」!对于想快速上手或做二次开发的个人开发者来说,这个体量实在太重了。 直到我发现了它的"轻量版"——「nanobot」。 nanobot:99% 的瘦身,核心功能全保留 nanobot 来自香港大学数据科学实验室(HKUDS),它的设计理念很简单: ❝ 用最少的代码,实现 AI Agent 的核心能力❞ 来看一组对比数据: 项目 代码行数 核心功能 OpenClaw 430,