V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
quietjosen
V2EX  ›  分享创造

使用树莓派 4B + wukong 模块 + OpenAI,做了个智能音箱

  •  
  •   quietjosen ·
    atjason · 239 天前 · 2716 次点击
    这是一个创建于 239 天前的主题,其中的信息可能已经有所发展或是发生改变。

    使用树莓派 4B + wukong 模块 + OpenAI ,做了个智能音箱,简单记录下关键节点。


    智能音箱的大概流程是这样的:

    • 关键词唤醒
    • 听用户说什么并转换为文字
    • 识别文字中的命令并得到答案
    • 将文字转换为音频并播放
    • 将上述流程串起来

    上面是从技术的角度分析。从产品的角度,还要考虑很多事情

    • 产品外观及工业设计
    • 响应速度与使用感受
    • 稳定性
    • 电池、功耗、散热等

    从实现的角度,各个模块都有对应的选择,每个模块取最优解,然后组合出产品,是可以的。只是,这会比较耗时。经过简单的比较,选择 wukong-robot 这一成套解决方案。

    关于硬件的选型。先是用我手上吃灰的 Radxa 安装。不过,由于这个硬件比较老了,官方的 Ubuntu 系统很久远,在安装 wukong-robot 时,遇到一系列兼容性问题。花了很多时间后,决定放弃。

    找朋友借来了树莓派 3B 。果然,树莓派生态很好。就拿安装系统来说,官方出了多平台的工具,很容易安装指定系统。并且,树莓派的系统是安装在 SD 卡上的。这样,更换 SD 卡就可以更换系统,很方便。

    安装 wukong-robot 后,又遇到问题:这块板的 USB 有故障,识别不了 USB 设备。这就难办了,因为麦克风、扬声器是需要 USB 接口的。没办法,又买了树莓派 4B 。

    在新的硬件上,基本跑通了默认系统后,还要有一系列的配置和优化。

    关于后端引擎,最想用的自然是 ChatGPT/OpenAI 。不过,这个东西在国内是无法访问的。试了在板子上搭建梯子,可遇到 SSL 的问题,花了很长时间没解决,并且也不是必现的,只是高概率。

    后来想的办法,就使用 Azure 的 ChatGPT 接口。具体的,使用日本的节点,会相对快点。好处是不用梯子,但总的响应速度,还是不如梯子 + OpenAI 接口。先这样用段时间,再考虑优化速度吧。现在文心一言发布了,可以考虑对接一下。

    关于语音识别,简单比较几个,感觉区别不是太大,最后选了腾讯语音。

    关于语音全成,默认是 Edge 接口,合成的效果不错。不过,实际有时会慢,比如一句短语可能要 2s 以上,这就比较影响体验,最后选了腾讯语音。

    关于麦克风和扬声器,考虑最后的外观,选择了一个 USB 一体的、方形的设备。这样,可以比较容易和树莓派一起放到一个壳子里。

    说到壳子,自己设计了简单的外壳。

    还有其它一些优化,比如:

    • wukong-robot 在识别出命令后,会先调用百度 Unit 进行第一遍处理,目的是识别出一些预定义的功能,比如「大点声」这类的。问题是,这个操作会增加 3s 的延时。显然,为了低频的预处理,给所有请求都加上延时,是不划算的,于是我去掉了。
    • 但调音量的需求确实存在,于是在发送到 OpenAI 进行识别之前,硬编码对命令进行预识别和处理。这是本地的,不消耗时间。wukong-robot 内置的调音量,是硬编码设置默认设备的,这点改成了可以调节指定设备的。
    • 替换录音开始、结束的提示音,减缓大延时带来的差体验。

    最终产品,主要是给娃用的,回答他的十万个为什么。从初步使用体验上看,还是满意的。最大的不足是唤醒不灵敏、可能误唤醒。这点之后考虑用麦克风阵列,取代现在的单麦克风。未来,还会根据实际使用来不断改进。


    后记:其实这件事,我几个月前就想做了,拖拖拉拉做到现在。

    最开始,我是想基于现有的智能音箱做二次开发。最后发现,我还是太年轻。但凡厂商,几乎没有真正开放的。如果很容易让别人二次开发,岂不是给别人嫁衣。

    如果自己完整做一个,需要大块的时间,一直没这个勇气,直到最近才下决心。比如,看到人家稚晖君,半年时间就做出那么高级的机器人,自己半年组装不出一个音箱,真是太汗颜了。

    9 条回复    2023-09-03 09:45:42 +08:00
    macy
        1
    macy  
       239 天前
    可以,我也想给娃做一个,期待教程,我的想法是 asr 模型跑在家里的服务器上,可能会快点,其他的调用 chatgpt
    quietjosen
        2
    quietjosen  
    OP
       239 天前
    @macy asr 不是大问题,短句一般 <2s 。教程不太会写更详细的了,毕竟程序员都不喜欢写文档……
    musi
        3
    musi  
       239 天前
    麦克风阵列比起单麦克风在误唤醒上可能有点提升,但提升不会太大。误唤醒其实现在的智能音箱或多或少都会存在这个问题,厂商的智能音箱除了是麦克风阵列还用了算法降噪,对麦克风消音等对环境音的处理
    quietjosen
        4
    quietjosen  
    OP
       239 天前
    @musi 恩,其实我买了 4 阵列的麦克风,录音效果好一点,但不是特别明显,又退货了…

    现在主要是两个问题:

    - 叫它它不应
    - 不叫它它应,尤其是播放声音时。

    我想到的办法,就是把唤醒词变复杂点,降低误解概率。
    billzhuang
        5
    billzhuang  
       239 天前
    chatgpt 来给娃回答十万个为什么,娃会不会被坑了。
    quietjosen
        6
    quietjosen  
    OP
       239 天前
    @billzhuang 常识性问题还好,比如太阳系有几大行星、世界上最大的 XX 是什么。
    vsyf
        7
    vsyf  
       239 天前 via Android
    像我就不一样了,想做个监控摄像头一年多了代码才写一半🤣
    chancat
        8
    chancat  
       238 天前 via Android
    咸鱼有处理的钉钉 f1 ,有单卖板子的,有整机出售的。可以自己看需求,我们是去年上车的板子,150 包邮两张。rk3399 usb 摄像头,麦克风,原本这个设备就是给远程办公用的
    quietjosen
        9
    quietjosen  
    OP
       237 天前
    @chancat 好的,如果再做一个的话,去了解下。现在这个差不多也能用。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   887 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 21:50 · PVG 05:50 · LAX 14:50 · JFK 17:50
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.