你的树莓派还在吃灰吗?来试试把它改造成语音助手吧! - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
namco1992
V2EX    Python

你的树莓派还在吃灰吗?来试试把它改造成语音助手吧!

  •  
  •   namco1992 2016-08-29 22:41:35 +08:00 23243 次点击
    这是一个创建于 3334 天前的主题,其中的信息可能已经有所发展或是发生改变。

    大家好,我又不要脸地来骗 star 了~

    可能有点标题党的成分,但是我的树莓派已经吃灰很久了。所以这次写了个小程序,花一点微小的成本把树莓派改造成语音助手,何乐而不为呢?其实这个 idea 在去年 Amazon 的 Echo 没出的时候就有了,当时就写了一个,现在是一个重构版本。 Amazon 的 Echo 还是不太符合中国国情,不如试试自己搭建一个丝版的 Echo 吧~

    这次的树莓派语音助手做成了我写的一个小工具 voicetools 的一个示例程序, voicetools 只是一个尽可能方便大家做语音合成和语音识别的一个 wrapper ,让大家一行代码完成语音识别和合成的工作。

    项目地址:https://github.com/namco1992/voicetools

    voicetools 介绍

    语音识别及语音合成

    from voicetools import BaiduVoice # api key 及 secret key 请在百度语音官方网站注册获取 token = BaiduVoice.get_baidu_token('YOUR_VOICE_API_KEY', 'YOUR_VOICE_SECRET') bv = BaiduVoice(token) # 语音识别 results = bv.asr('path/to/your/audio/file') # 返回识别结果列表,可选参数见百度语音文档 # 语音合成 audio = bv.tts('你好') # 返回 MP3 格式二进制数据,可选参数见百度语音文档 

    还集成了两个 AI 类型的 API ,就不占篇幅了,有兴趣可以移步项目地址查看。

    树莓派语音助手介绍

    简介

    该示例程序基于 voicetools ,遵循最简单的 one-in-one-out ,只需要在该示例程序的基础上添加关键词和对应执行的动作,就可以扩展成为个性化的专属助手。 目前示例程序实现的功能有语音提醒今明两天天气预报查询

    特性

    • 使用 redis 作缓存,提升语音助手的反应速度。同样的问题,第二遍不再发生网络请求。
    • 使用图灵机器人 API ,除了预设功能外,所有问题都会有答案。
    • 非常简单的“ receive-process-execute-feedback ”逻辑,易于扩展。
    • 有一个心情阈值,目前是预设在配置文件中的。不一定会对你的命令言听计从。(只是为了好玩)

    需要准备什么?

    • 一块树莓派
    • 一个麦克风
    • 一个扬声器
    • 一个传感器(用于唤醒语音助手,我使用的是声音传感器,当然任何传感器都可以)

    如何运行和扩展?

    扩展只需三步,且只需要关注你要实现的功能即可。请移步项目地址参考实例。

    最后,如果大家有兴趣的话,请给个 star 鼓励一下,非常感谢~

    如果有任何问题,欢迎 PR 和 Issue 。

    58 条回复    2017-06-16 13:22:51 +08:00
    roadna
        1
    roadna  
       2016-08-29 22:44:15 +08:00   1
    我的树莓派还真在吃灰。支持一个。
    namco1992
        2
    namco1992  
    OP
       2016-08-29 22:47:55 +08:00
    @roadna 哈哈,我的已经吃灰一年多了...
    andyhuzhill
        3
    andyhuzhill  
       2016-08-29 23:05:09 +08:00
    我的树莓派已经吃灰 3 年了 现在只在上面跑个 HTTP 代理 FQ
    namco1992
        4
    namco1992  
    OP
       2016-08-29 23:16:32 +08:00
    @andyhuzhill 能用起来就不算吃灰吧~我现在改成语音助手之后,早上起来问下天气,然后记点今天该做的事情。虽然手机都能做,但是语音最大的优点就是 hands-off ,拍拍手就能发指令,不用找手机了。
    manhere
        5
    manhere  
       2016-08-29 23:26:53 +08:00 via iPhone
    麦克风和语音传感器不是重复吗?
    cnkuner
        6
    cnkuner  
       2016-08-29 23:29:20 +08:00 via Android
    被某人破解后 24 小时监听。嗯啊嗯啊卡木昂
    huangtao728
        7
    huangtao728  
       2016-08-29 23:32:36 +08:00 via Android
    比较好奇心情阈值大概是什么效果?
    namco1992
        8
    namco1992  
    OP
       2016-08-29 23:33:02 +08:00
    @manhere 麦克风拿来做唤醒的话很困难,而传感器就比较方便,阈值可调。还有就是,传感器唤醒的话并不限于语音传感器,距离感应、光感应都可以,比如说挥挥手唤醒之类的,可玩性好一点。
    namco1992
        9
    namco1992  
    OP
       2016-08-29 23:34:21 +08:00
    @huangtao728 就只是做着玩的...比如说阈值是 0.6 ,就是有 60%的概率是积极心态回复, 40%是消极回复。但是积极回复和消极回复的文本都是写在配置文件中的,并不是随机。
    namco1992
        10
    namco1992  
    OP
       2016-08-29 23:35:19 +08:00
    @huangtao728 还有就是这个心情阈值只是影响回复的内容,并不会真的拒绝执行指令,当然想要真的拒绝执行指令也不是不可以...
    scnace
        11
    scnace  
       2016-08-29 23:37:01 +08:00 via Android
    吃灰一年的来看看 。。。然后继续吃灰
    namco1992
        12
    namco1992  
    OP
       2016-08-29 23:37:34 +08:00
    @cnkuner 呃,保证连接自己的 wifi 并且保护 wifi 安全风险会小一点吧...
    huangtao728
        13
    huangtao728  
       2016-08-29 23:54:00 +08:00 via Android
    @namco1992
    挺有意思啊,相当于加入了情绪的积累?
    不过我以为是太过频繁发问就消极回复,消极程度递增...
    SkyEcho
        14
    SkyEcho  
       2016-08-30 00:19:44 +08:00
    树莓派这个东西,做语音助手,最主要的问题在于,远距离( 5m )声音采集和降噪。
    http://www.xfyun.cn/services/mic#list_wrap 讯飞的五麦环形阵列
    namco1992
        15
    namco1992  
    OP
       2016-08-30 09:16:31 +08:00
    @a302800411 有条件当然可以上更好的装备,但是我只是想让吃灰的树莓派发挥下余热,花点小成本还 ok 。如果专门为了这个买个麦克风阵列,就有点背离初衷了呢~
    namco1992
        16
    namco1992  
    OP
       2016-08-30 09:21:12 +08:00
    @huangtao728 你的想法也不错啊,但是这个功能只是锦上添花做着玩玩而已,所以暂时还没考虑更复杂的逻辑
    wensonsmith
        17
    wensonsmith  
       2016-08-30 09:30:37 +08:00
    支持! 好项目~
    lan894734188
        18
    lan894734188  
       2016-08-30 09:38:10 +08:00 via Android
    安个 Google now
    ijse
        19
    ijse  
       2016-08-30 09:38:24 +08:00
    之前做过一个,用的是国外一个开源语音识别项目,配置起来很麻烦。。

    最终效果也不太好,麦克风稍离远一点,识别成功率直线下降
    namco1992
        20
    namco1992  
    OP
       2016-08-30 09:42:09 +08:00
    @ijse 是的,我也尝试了很多方法,最后选了百度语音的 API ,并且也没有选用 SDK ,就是为了最大程度上做到开箱即用,不要配置太麻烦,把热情都磨没了。
    然后识别率的话...只能说一分钱一分货,不差钱就可以像上面哥们一样上阵列...
    namco1992
        21
    namco1992  
    OP
       2016-08-30 09:45:31 +08:00
    @lan894734188 去年的时候尝试过 google 的 TTS ,现在貌似也不对外提供服务了。并且由于中国国情,使用起来也不甚方便。至于 google now 还没有尝试过呢~
    Phariel
        22
    Phariel  
       2016-08-30 09:52:40 +08:00 via Android
    淘宝上有卖科大讯飞 TTS 的 Arduino 模块 我买了一个还没用过 太懒了。。。
    anym0us
        23
    anym0us  
       2016-08-30 09:55:33 +08:00
    还能有其他玩法嘛,买来装了个 KALI 然后嘿嘿嘿,
    goreliu
        24
    goreliu  
       2016-08-30 09:58:30 +08:00
    问题是,如果在手机上就可以实现,为什么要常年开着一个树莓派在那耗电。而且天气预报之类还是看比听更直观。语言提醒的话,总不能抱着树莓派各地跑,而手机要方便很多。

    很多和树莓派相关的用法,都存在这个问题。
    namco1992
        25
    namco1992  
    OP
       2016-08-30 10:16:26 +08:00
    @goreliu 呃,我只是实现一个摆在家里的语音助手,并没有打算移动它。你可以参考 Amazon 的 Echo 。至于功能的话,我的初衷是我实现两个小功能抛砖引玉,理论上来说有了语音输入和对应的关键词输出,可以自行实现任何功能搭配起来。
    rainsun
        26
    rainsun  
       2016-08-30 10:35:46 +08:00
    手动 mark
    achaocha
        27
    achaocha  
       2016-08-30 10:50:24 +08:00
    手动 mark
    Flygoat
        28
    Flygoat  
       2016-08-30 10:59:06 +08:00 via iPad
    借楼问一下各位知道 RPI3 有 Aarch64 下 HardFP 的编译器吗?还有 VideoCore IV 的 VC04_services 驱动有 Aarch64 的替代品吗?
    t0byxdd
        29
    t0byxdd  
       2016-08-30 11:00:33 +08:00
    表示树莓派现在就做梯子用。。。
    wujunze
        30
    wujunze  
       2016-08-30 11:03:51 +08:00
    感谢分享 可以试试
    tabris17
        31
    tabris17  
       2016-08-30 12:03:13 +08:00
    声音传感器唤醒树莓派这个怎么弄?
    ksc010
        32
    ksc010  
       2016-08-30 12:30:54 +08:00
    楼主用的 usb 的麦克吗?
    我想适配蓝牙耳机的
    missdeer
        33
    missdeer  
       2016-08-30 14:01:29 +08:00
    其实我想要楼主的麦克风 /扬声器 /传感器 taobao 链接
    namco1992
        34
    namco1992  
    OP
       2016-08-30 14:03:32 +08:00
    @missdeer ::doge:: 这个随便找吧,我也是买的最普通的,那些卖数电模电器件的店都有的
    namco1992
        35
    namco1992  
    OP
       2016-08-30 14:11:39 +08:00
    @tabris17 首先设定好你的传感器信号输入端,我是用的 4 ,然后设置初始电平,如果是初始高电平,亦即检测到下降沿时唤醒树莓派,然后搞一个 loop 持续监测就可以了。代码你可以参考 https://github.com/namco1992/voicetools/blob/master/examples/raspi_assistant/assistant.py
    namco1992
        36
    namco1992  
    OP
       2016-08-30 14:16:01 +08:00
    @ksc010 我是用的 USB 的麦克风,蓝牙的确没有试过,我的是 2 代树莓派,也没买蓝牙适配器。蓝牙的话可能声音的输入输出都需要另外设置。
    tabris17
        37
    tabris17  
       2016-08-30 14:17:38 +08:00
    @namco1992 就是树莓派通过 GPIO 连接传感器,然后树莓派上跑个进程,轮询传感器的数据。也就是说树莓派是一直“醒”着的咯?否则怎么跑进程轮询呢?
    namco1992
        38
    namco1992  
    OP
       2016-08-30 14:32:30 +08:00
    @tabris17 我对“醒”的定义是树莓派接收到声音信号,进入接收语音指令的状态。在没有接收到声音信号时,肯定是需要一个进程来进行下降沿检测,但是我认为这时候并不是“醒”。
    tabris17
        39
    tabris17  
       2016-08-30 14:39:43 +08:00
    @namco1992 原来如此,明白了,谢谢啦
    xuecat
        40
    xuecat  
       2016-08-30 16:27:38 +08:00
    唉,我还是吃灰吧!我估计我配不来。
    namco1992
        41
    namco1992  
    OP
       2016-08-30 16:47:31 +08:00
    @tabris17 不客气~
    namco1992
        42
    namco1992  
    OP
       2016-08-30 16:48:41 +08:00
    @xuecat 哈哈,我觉得我把步骤写得比较详尽了呢,应该不至于太复杂吧。不试试怎么就说做不来呢
    vikeria
        43
    vikeria  
       2016-08-30 22:09:07 +08:00 via iPhone
    吃灰加一,偶尔拿出来跑点东西
    cpp255
        44
    cpp255  
       2016-08-30 22:19:51 +08:00
    吃灰中,之前还当下载用了
    mumuy
        45
    mumuy  
       2016-08-31 08:59:53 +08:00
    3 出来的时候就买了,一直没用
    namco1992
        46
    namco1992  
    OP
       2016-08-31 09:12:55 +08:00
    @mumuy 3 自带了 wifi 和蓝牙,应该还是会方便很多吧
    lavande
        47
    lavande  
       2016-08-31 11:54:18 +08:00
    我之前也有这样的想法,实际上研究了好一阵子,发现有不少开源的代码可以用,然而不知道买什么样的扬声器和麦克风!同求淘宝链接示范。。。。。
    namco1992
        48
    namco1992  
    OP
       2016-08-31 14:17:13 +08:00
    @lavande 麦克风搜“树莓派 麦克风”,扬声器就搜“小音箱 3.5mm ”,或者你想用 USB 接口的也行。主要是我之前买的店家已经下架了,所以你自行挑选就好了,都大同小异。
    ThomasZ
        49
    ThomasZ  
       2016-08-31 14:50:16 +08:00
    看到这个我才想起来我还有一块 pi 。。。。 回来好好研究一下这个
    lavande
        50
    lavande  
       2016-08-31 16:04:42 +08:00
    @namco1992 好嘞,多谢
    mimicom
        51
    mimicom  
       2016-09-02 22:12:33 +08:00
    艾玛. 哈哈. 早就有这个想法, 还注册了讯飞的 api . 还没用.
    mimicom
        52
    mimicom  
       2016-09-02 22:52:06 +08:00
    怎么百度的 sdk 除了安卓就是 ios 的. 没有 linux / windows 平台的啊.
    namco1992
        53
    namco1992  
    OP
       2016-09-03 10:47:29 +08:00
    @mimicom 所以我才用的 API 啊...如果你要用 SDK 的话,还是讯飞的最全最强吧,只是百度的比较接互联网的地气而已。
    lan894734188
        54
    lan894734188  
       2016-09-20 13:30:29 +08:00 via Android
    @namco1992 GCP 有提供 api
    min614130
        55
    min614130  
       2016-10-25 14:39:58 +08:00
    能问个问题吗? record.wav 是做什么用的?需要提前录音放进去吗?报错提示 No such file or directory: 'record.wav'
    namco1992
        56
    namco1992  
    OP
       2016-10-25 15:58:35 +08:00   1
    @min614130 “ record.wav ”是一个缓存文件,存储了你最后一次录音,在后续做语音识别时会用到。

    然后建议你贴出完整的 traceback 信息,不然我也没法判断是哪里出了问题。

    最后你可以把问题提至: https://github.com/namco1992/voicetools/issues
    min614130
        57
    min614130  
       2016-10-26 08:44:12 +08:00
    @namco1992 谢谢,问题解决了
    mrcong
        58
    mrcong  
       2017-06-16 13:22:51 +08:00
    我的树莓派一边吃灰一边跑打印机 airPrint 服务
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2800 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 28ms UTC 14:47 PVG 22:47 LAX 07:47 JFK 10:47
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86