23023浏览
查看: 23023|回复: 0

[M10项目] 行空板AI智能配饰项目:打造沉浸式“小王子互动体验

[复制链接]
本帖最后由 zoey不种土豆 于 2024-10-16 15:00 编辑

1 项目前言

本文介绍了一款基于行空板(UNIHIKER)制作的智能配饰,旨在通过AI角色扮演的方式提供有趣的交互并表达用户的个性。项目中借用了《小王子与玫瑰》中的“小王子”这一角色作为本项目AI角色原型,用户可以选择两种主要的互动模式:

  1. One-agent模式:用户作为小王子唯一的玫瑰,AI小王子会通过理解用户的对话,将生活中的点滴转化为鼓励和夸奖,提供情感支持。
  2. Multi-agents模式:小王子和玫瑰通过温暖且有趣的对话进行故事叙事,展示他们之间的互动。
    本项目将分为两个主要部分:基础模块构建与作品创作部分。第一部分基础模块构建将侧重于技术实现和模块的复用,帮助用户搭建项目的基础结构。第二部分作品创作将展示如何将技术模块组合起来,逐步实现创意灵感。这个项目目前仍在不断探索中,预留了后续拓展和未来计划,以进一步丰富这个智能配饰的功能,使其更有趣。

2 视频展示

在项目正式开始前,为了让大家更直观地了解这个项目,请先观看一段展示视频。


3 材料清单

  1. 行空板 x 1
  2. USB Speaker x 1
  3. 5V充放电电池 x 1
  4. 开关 x 1
  5. USB-TypeC 数据线 x 1
  6. TypeC-TypeC 数据线 x 1
  7. 3D打印模型 x 1
  8. 80mm直径凸透镜 x 1
  9. 电工黑胶带 x 1
  10. M2自攻螺丝 x 2

4 基础模块构建

4.1 在行空板(UNIHIKER)上创建并管理虚拟环境

  • 由于行空板(UNIHIKER)的默认环境是Python 3.7,但在运行某些开源模块时,可能需要配置其他版本的Python环境以避免版本兼容性问题。因此,本项目利用Conda来创建和配置所需的环境。
  • 大致步骤:通过USB连接行空板 > 登陆终端 > 安装Miniforge Conda,并初始化和激活环境 > 创建新虚拟环境。
  • 参考资料包括DFRobot论坛的相关教程:
    How to Install Multiple Python Versions on Unihiker in the Simplest Way? For example , Python 3.10

    4.2 用行空板(UNIHIKER)实现语音输入自动化(Silero)

  • 本项目使用的是Silero模型上实现自然语音交互。这包括自动识别用户何时开始说话、自动进行录音,以及在用户停止说话后自动发送语音数据,广泛应用于智能家居控制、交互式学习和其他需要解放双手操作的场景。
  • 大致步骤:导入必要的库 > Silero VAD设置 > 加载Silero VAD模型 > 初始化音频流 > 音频保存函数 > 主录音循环 > 清理和资源释放。
  • 参考资料:https://github.com/snakers4/silero-vad
  • 完整代码:01_silero_test.py【见文末压缩包】

    4.3 在行空板(UNIHIKER)上本地部署大模型(Ollama)

  • Ollama 是一个轻量级且可扩展的框架,专为在本地计算机上构建和运行大型语言模型(Large Language Models, LLMs)而设计。本项目将在行空板的环境中完成 Ollama 的安装与配置,确保它能够顺利运行并满足特定的应用需求。这一过程包括从下载和安装 Ollama 所需的依赖项到配置本地环境,以及进行必要的调试和测试。通过这些步骤,即可行空板(UNIHIKER)上实现高效的本地部署,为后续的开发和应用提供支持。
  • 以下脚本实现了一个简单的聊天应用,可以通过本地运行的 Ollama 语言模型进行对话。用户输入消息,程序将这些消息发送给模型,并实时显示模型的响应。对话记录保存在 messages 列表中,确保上下文连续传递。
  • 参考资料:https://github.com/ollama/ollama
  • 完整代码:02_2_ollama_test.py【见文末压缩包】

    4.4 在行空板(UNIHIKER)上持续进行语音识别(Silero & Whisper)

  • 行空板(UNIHIKER)上的语音输入自动化,这项技术包括自动检测用户开始说话的时刻、自动进行录音,以及在用户停止说话后自动处理和发送语音数据。本文将在此基础上,进一步利用 Whisper 技术进行语音识别,以实现持续性的语音转文字功能。Whisper 是一种功能强大的语音识别工具,适用于各种语言和任务,能够在多种应用场景中提供高效的语音转文字服务。
  • 通过以下代码,即可观察到:当你对着行空板(UNIHIKER)的麦克风说话,就可以在终端中看到实时语音识别的结果。
  • 参考资料:https://github.com/openai/whisper
  • 完整代码:02_1_silero_whisper.py 【见文末压缩包】

    4.5 行空板(UNIHIKER)本地部署语音播报模块(Edge-tts)

  • Edge-tts 是一个 Python 模块,可以在行空板(UNIHIKER)上实现本地部署的文字转语音(TTS)功能。通过使用 Edge-tts 模块,即可在行空板(UNIHIKER)环境中直接调用 Microsoft Edge 提供的在线文本转语音服务,实现高质量的语音播报。
  • 通过以下代码即可学习如何将文本转换为语音,处理流式音频数据,并通过 Python 进行异步编程和系统命令执行。
  • 参考资料:https://github.com/openai/whisper
  • 完整代码:02_5_edge_tts_stream.py 【见文末压缩包】

    5.作品创作

    5.1 角色设定 & 服务器搭建

    完成上述的基础模块构建后,我们将通过本地部署和云端调用这两种不同的方式来实现AI与用户的语音互动。为了避免对话延迟的问题,采用异步策略进行持续对话记录,以确保小王子的每一句回复都不会遗漏。小王子可以聆听所有的语音输入并逐一回应,为用户提供身边有人对话的陪伴感。

    5.1.1 本地计算版

    我们计划首先将本地模型部署到行空板上,以测试其极限算力。在这里,我们选用Deepseek作为基础模型。以下代码整合了多个功能模块,实现从语音录制到语音播报的完整流程,涵盖语音输入、语音识别、大模型调用、语音播报和异步处理等知识点。

    pic

    1. 语音输入&识别: 利用Silero & Whisper模块实现持续语音识别,捕捉用户的语音输入。
    2. 大模型调用&AI对话生成: 使用Deepseek大模型,通过Prompt Engineering设计提示,引导AI模仿“小王子”的角色进行互动对话。
    3. 语音播报: 使用Edge-tts将AI生成的文字转换为语音,进一步增强用户体验。
    4. 异步处理: 通过asyncio实现多任务并发,确保语音识别和AI对话生成的高效运行。
  • https://github.com/deepseek-ai/DeepSeek-V2
  • 完整代码:【见文末压缩包】

    5.1.2 云端调用版

    实践证明,在本地计算版中发现对话不够流畅的问题,因此这里将原来使用Whisper和Edge-tts的代码改成使用百度的 API,将语音识别与播报换成云端调用。

    1. 获取令牌: 使用 get_baidu_access_token 函数从百度获取访问令牌。
    2. 语音转文本: 使用 baidu_speech_to_text 函数替代Whisper模型来处理音频文件。
    3. 文本转语音: 使用 baidu_text_to_speech 函数替代Edge-tts模型来生成音频文件。


百度智能云:https://login.bce.baidu.com/?redirect=https%3A%2F%2Fkeyue.cloud.baidu.com%2Funit%2Fflow
完整代码:【见文末压缩包】

5.2 多AI通信

在以上项目中,我们重现了小王子在星球上的孤独与思念。他每天向地球上的玫瑰发送消息,却无回应。为了缓解他的孤独,我们创建了一个赛博玫瑰,通过Flask服务器让两块行空板(UNIHIKER)实现通信。本次程序的编写涉及2个py文件:小王子和玫瑰。小王子端主要负责接收来自玫瑰端的消息,处理这些消息,并将处理后的结果发送回玫瑰端。它在整个系统中充当了一个客户端的角色,向其他服务发出请求并接收响应。在玫瑰端的代码中,Flask 的相关部分用于创建一个简单的 web 服务器,用于处理接收到的消息并进行相应的操作。



  • 需要将上述2个程序分别保存到2个行空板的  /root/silero-vad-master/ 目录下,并命名为 04_5_deepseek_baidu_flask_prince.py 和 04_6_deepseek_baidu_flask_Rose.py
  • 小王子端代码:04_5_deepseek_baidu_flask_prince.py【见文末压缩包】
  • 玫瑰端代码:04_6_deepseek_baidu_flask_rose.py【见文末压缩包】

    5.3 为AI角色创建可视化面孔

    为了缓解小王子的孤独,已经为他创建一个赛博玫瑰来回应他的消息。接下来,我们将在自建的虚拟环境里,我们使使用GUI并动态切换GIF动画实现生动表情,主要想实现显示单个或多个 GIF 动图,并通过按键切换显示的 GIF,为AI角色创建各自可视化面孔。





  • 完整代码:【见文末压缩包】

    5.4 成品组装&冲突处理

    5.4.1 硬件组装

    完成以上步骤后,我们最终将解决GUI、Flask与原先asyncio异步处理之间的逻辑冲突,并介绍造型设计、制作装配的详细过程。
    Alt text
    以上是我们已经准备好的完整硬件与材料,为了适配项目,需要对现有的材料进行一些简单改造。

    1. 修改电池的电源输出线,改成细的TypeC-TypeC 数据线(工艺:焊接)
    2. 把开关焊接在正极接线上
    3. 为了使整体造型尽可能小巧,我们需要在这里做一个取舍:剪掉行空板的金手指两个角(工艺:手持切割机)

装配顺序:

5.4.2 两块行空板(UNIHIKER)连接

由于现在是2块行空板(UNIHIKER),所以我们用wifi的方式来远程连接。

  1. 确保2块行空板(UNIHIKER)和你的电脑连接到同一个网络
  2. 在行空板上查看ip地址
  3. 在电脑上打开2个终端窗口,一个窗口连接一个行空板
  4. 分别在2个窗口输入以下命令连接到行空板:在这里把10.1.2.3改成行空板的ip地址
    ssh root@10.1.2.3
    密码:dfrobot
  5. 激活chat_agents环境:
    conda activate chat_agents

    5.4.3 运行程序

    • 此处提供修改后的完整代码,GUI、Flask与原先asyncio异步处理之间的逻辑冲突较为细节,后续补充教学。
    • 代码:05_5_2_deepseek_baidu_flask_prince_gif_scale_tutorial
      05_6_deepseek_baidu_flask_rose_gif_tutorial  【见文末压缩包】
    • 将上述程序分别保存到2块行空板的 /root/silero-vad-master/ 目录下,并命名为:prince.py和Rose.py并运行

      6 大功告成




未来展望

  • USB摄像头实现多模态大模型,结合视觉进行互动对话。
  • 个性化与Dify自定义Agent工作流
  • 让人类用户参与两块行空板(UNIHIKER)的互动

完整代码见文末压缩包



Code.zip

38.23 KB, 下载次数: 102

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4

© 2013-2024 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail