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

[项目] 树莓派+墨水屏+AI:会听话、会看图的语音生图画框

[复制链接]
本帖最后由 云天 于 2026-2-19 12:43 编辑

【项目背景】
       你有没有想过,有一天你的画框不仅能展示静态的画作,还能“听懂”你的描述,甚至“看懂”你拍下的照片,然后立刻画出一幅独一无二的简笔画?更酷的是,它使用的电子墨水屏具有断电后图案长期保存的特性——画作完成后即使拔掉电源,画面依然清晰保留,让这个画框真正成为一个零功耗的永久数字艺术品。
今天我就和大家分享一个基于树莓派、电子墨水屏和AI语音生图的项目,它实现了按住A键录音 → 语音识别 → 文生图 → 墨水屏显示,以及按住B键录音 + 拍照 → 图生图 → 墨水屏显示的双模式功能。整个过程在树莓派上本地运行,隐私安全,交互有趣,而墨水屏的低功耗与断电保存特性,让作品可以随时悬挂展示,无需持续供电。
【项目演示】
  • A键(文生图):按住A键说“一只穿着宇航服的猫”,松开后约30秒,墨水屏上就会显示出一幅黑白简笔画的宇航猫。断电后,这幅猫依然挂在屏幕上。
  • B键(图生图):按住B键说“把桌上的杯子变成卡通风格”,同时摄像头自动拍照,AI会根据照片和你的描述生成新的图像并显示。即使关闭树莓派,新画作也会永久保留。
  • 定时任务:每天上午8点,系统会自动获取北京天气,生成“晴天,22度,简笔画风格”的天气主题画,自动刷新。每天的天气画都会一直保留到第二天被新画覆盖。


【硬件清单】
  • 树莓派Raspberry Pi 4B:作为主控板,性能足以运行整个程序。
  • 电子墨水屏:250×128分辨率的黑白墨水屏,通过SPI接口与树莓派通信;其最大特点是断电后仍能保持图像,无需持续供电维持画面。
  • USB麦克风:免驱,用于捕捉用户的语音指令。
  • USB摄像头:免驱,用于在按下B键时拍摄照片,作为图生图的输入。
  • 按键:电子墨水屏板载两个按键,分别作为A键(连接GPIO21)和B键(连接GPIO20),用于触发功能。
  • MicroSD卡:16GB或更大容量,用于烧录操作系统。

树莓派+墨水屏+AI:会听话、会看图的语音生图画框图7


树莓派+墨水屏+AI:会听话、会看图的语音生图画框图8

【软件架构】
  • 编程语言:Python 3,代码采用模块化设计,各功能独立封装。
  • 核心功能模块

    • 录音模块:基于 sounddevice 实时捕获麦克风输入,结合 numpy 处理音频数据,最终转换为 Base64 编码的 WAV 数据 URI。
    • 语音识别模块:通过 SiliconFlow API 调用 Qwen/Qwen3-Omni-30B-A3B-Instruct 模型,将音频直接转录为文本。
    • 拍照模块:使用 OpenCV(cv2)调用 USB 摄像头拍照,并编码为 JPEG 格式的 Base64 数据 URI。
    • 文生图模块:利用 SiliconFlow API 的 Kwai-Kolors/Kolors 模型,根据文本提示生成图像。
    • 图生图模块:通过 SiliconFlow API 的 Qwen/Qwen-Image-Edit-2509 模型,结合输入图片和文本提示生成新图像。
    • 图像处理模块:借助 Pillow 库对生成图像进行灰度化、尺寸调整、二值化,并转换为墨水屏专用的 1 位 BMP 格式。
    • 墨水屏驱动:使用 DFRobot 官方库 devices.dfrobot_epaper 通过 SPI 接口控制屏幕,实现图像显示。
    • 按键控制:基于 RPi.GPIO 库轮询 A、B 键电平变化,触发对应流程。
    • 定时任务:采用 APScheduler 库,每日固定时间自动执行天气绘画任务。
    • 天气获取:通过 pyowm 库调用 OpenWeatherMap API,获取实时天气数据。

  • 依赖库清单:openai, requests, sounddevice, numpy, Pillow, opencv-python, RPi.GPIO, apscheduler, pyowm, 以及墨水屏专用驱动。
  • 运行环境:树莓派 OS(基于 Debian),Python 虚拟环境管理依赖,所有 AI 请求通过互联网发送至 SiliconFlow 云服务。

【程序代码】
核心代码解析1. 按键录音(按住录,松开停)
这是实现“按住A/B键录音”的关键函数,利用 sounddevice 的流式读取,并在循环中检测按键电平:

树莓派+墨水屏+AI:会听话、会看图的语音生图画框图1
2. 语音识别(SiliconFlow Omni 模型)
将 Base64 音频直接发送给多模态模型,返回纯文本:
树莓派+墨水屏+AI:会听话、会看图的语音生图画框图2
3. 文生图(Kwai-Kolors/Kolors)
标准文生图调用,注意保存图片:
树莓派+墨水屏+AI:会听话、会看图的语音生图画框图3
4. 图生图(Qwen-Image-Edit-2509)
由于 OpenAI SDK 不支持 image 参数,改用 requests 直接调用,并通过 extra_body 传递图片 Data URL:
树莓派+墨水屏+AI:会听话、会看图的语音生图画框图4
5. 墨水屏显示(含比例自适应)
250×128 的屏幕比例特殊,直接拉伸会变形。使用 fit_mode='contain' 保持比例,剩余部分填充白色。而墨水屏的双稳态特性意味着图像显示后无需电力维持,即使树莓派关机,画面也永久可见。
树莓派+墨水屏+AI:会听话、会看图的语音生图画框图5
6. 双按键轮询 + 定时任务
主循环同时检测 A/B 键,并使用 BackgroundScheduler 添加每天8点的天气任务:
树莓派+墨水屏+AI:会听话、会看图的语音生图画框图6


树莓派+墨水屏+AI:会听话、会看图的语音生图画框图10


树莓派+墨水屏+AI:会听话、会看图的语音生图画框图11


树莓派+墨水屏+AI:会听话、会看图的语音生图画框图12

【调试中的坑与解决方案】

坑1:录音超时,PortAudioError: Wait timed out
  • 原因:默认音频设备不是 USB 麦克风。
  • 解决:在 sd.rec 中指定 device=1(通过 sd.query_devices() 查看索引)。

❌ 坑2:Image generation failed: ... unexpected keyword argument 'image'
  • 原因:OpenAI SDK 的 images.generate 不支持 image 参数。
  • 解决:改用 requests 直接调用 API,或将 image 放入 extra_body。

❌ 坑3:墨水屏显示变形
  • 原因:源图像比例与屏幕比例不一致。
  • 解决:在转换时计算 target_ratio,用 contain 模式居中粘贴。

❌ 坑4:按键检测报错 Please set pin numbering mode
  • 原因:某些库(如墨水屏驱动)可能意外清除了 GPIO 模式。
  • 解决:将 GPIO 初始化和清理放在全局,并确保 setmode 在程序最前执行。

       感谢 DF 创客社区提供的交流平台,以及硅基流动(SiliconFlow)提供的免费 API 额度,让创客项目用上工业级 AI 模型变得如此简单。墨水屏技术,让我们的作品可以脱离电源长久展示。

【代码分享】

下载附件树莓派墨水屏.zip






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

本版积分规则

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

硬件清单

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

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

mail