去年底开始基于ESP32开发DIY的各种AI语音智能助手层出不穷,AI智能玩偶也比较火热。目前市面上也都有比较成熟的开发板集成了各种模块麦克风、OLED、功放、摄像头等几乎是开箱即用,普通开发者买了折腾一通总能搞点什么出来,当然对于批量推出市场的使用这种开发板成本比较高,通常比较少人这么用。
目前市面上很多此类DIY项目都是服务端基于小智的魔改、小智的设备端固件使用官方开源版本。其ESP32固件使用的是C++开发对于不熟悉C++的人来二次开发改造说难度太大。
本文所DIY的语音助手设备端使用的是MicroPython、服务端是Python,对于很多开发者来说MicroPython入门没难度。但其性能、稳定性和C++开发的没法比,对于DIY的小玩具这已经基本够了。下面分别介绍整体架构、设备端流程、服务端流程等。
架构与流程
基于ESP32 (MicroPython) 开发的固件和 Python服务端,最基本的主要组件有:音频采集、VAD检测、ASR识别、大模型、TTS 服务、WebSocket通讯等。下面将给出设备端与服务端的整体架构图以及整个平台的各个阶段完整数据流程,具体如下图所示。
系统架构图
数据流描述
服务端
系统架构图
Python服务端提供WebSocket服务,整个架构基于异步编程模型,层次清晰,模块解耦,具有良好的扩展性和维护性。目前除了大模型没有采用流式输出,其他服务调用均采用流式处理技术,实现了低延迟的实时语音交互体验。
WebSocket服务层作为最上层,负责网络通信和连接管理,在指定端口提供WebSocket服务,支持双向实时通信和消息路由。
业务处理层是核心逻辑层,包含三个关键模块:Connection Handler负责管理每个客户端连接的生命周期;消息处理器实现了文本和二进制消息的解析与路由;异步任务管理器则协调各个AI服务的并发调用。
AI服务集成层整合了四大AI能力:VAD进行语音活动检测;ASR和TTS均采用火山引擎服务,分别负责语音识别和语音合成;LLM使用DeepSeek实现智能对话生成。
外部API服务层统一管理第三方服务调用,包括火山引擎API、DeepSeek API和PyTorch Hub。
流程图
设备端
ESP32-S3硬件层包含INMP441麦克风负责音频采集、MAX98357功放实现音频播放、OLED显示屏提供状态反馈。
驱动层封装了I2S音频接口实现音频数据的读写,异步WebSocket客户端处理网络通信,OLED驱动支持滚动显示功能。
业务层的VoiceRecorder模块管理音频采集流程,使用deque队列缓冲音频数据,消息处理模块负责协议解析和数据路由。
应用层通过异步任务管理器协调各模块运行,主控制逻辑处理系统状态和异常。架构充分考虑了嵌入式系统的资源限制,采用异步编程模型提高了系统效率和响应速度。
架构图
ESP32-S3业务流程分为主流程和异步任务两部分并行执行。主流程从系统启动开始,依次完成硬件初始化、建立WebSocket连接、创建异步任务,然后进入事件循环等待任务完成,最后进行异常处理和资源清理。
异步任务
1、WebSocket处理任务负责维护网络连接、接收服务器消息并分发处理;
2、I2S音频读取任务持续从麦克风采集16kHz音频数据并通过WebSocket实时发送。
两个任务通过共享的数据队列和WebSocket连接进行协作,形成了完整的音频采集-传输-播放循环。整个流程采用异步并发模式,确保音频采集不会被网络操作阻塞,同时支持自动重连机制保证系统稳定性。
流程图
目前面向个人市场推出此类玩具或助手等最大的难点应该是外观设计与销售渠道,技术实现目前都比较成熟,要推To B靠的就是某些特殊渠道关系了。
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |