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
woshichuanqilz
V2EX  ›  Python

自制一个语音识别的系统如何实现实时不断的监测语音输入?

  •  
  •   woshichuanqilz · 2020-01-30 15:27:22 +08:00 · 3229 次点击
    这是一个创建于 1792 天前的主题,其中的信息可能已经有所发展或是发生改变。

    想在 PC 端做一个语音助手, 尝试过 voicebot, 但是在自定义命令, 命令参数, 命令唤醒 /睡眠等方面, 不是特别的满意。Voicebot,他的命令识别却是相当准确的, 目的就想要一个沃斯堡的这样的语音识别的引擎但是后续的命令如何处理,我自己来自定义。

    考虑到现在语音识别系统已经比较成熟, 所以自己参考网上的一些文章, 用百度的语音接口实现了语音识别。 https://www.bilibili.com/video/av45532338/

    参考了这个链接, 问题在于你必须得在他的指定时间间隔内出入声音, 如果你说过声音的时候,正好是他上传和分析音频文件的时候, 你的语音命令就会折断。

    自己尝试在做的时候很难做到和 voicebot 一样的效果。

    def rec(rate=16000):
        r = sr.Recognizer()
        with sr.Microphone(sample_rate=rate) as source:
            print("please say something")
            audio = r.listen(source, timeout=3, phrase_time_limit=5)
            # audio = r.listen(source) # 使用这样的参数整个程序会挂住不动
        print("recording done")
        with open("recording.wav", "wb") as f:
            f.write(audio.get_wav_data())
    

    所以这一考虑,想要一个可以持续不断的对语音进行分析和识别的一个软件或者代码,

    比如这样一个应用场景, 我先说"打开记事本", 我的程序可以帮我打开记事本, 过了 10 秒钟后,我再说打开"画图软件", 我的程序可以帮我打开画图软件。 也就是说多个命令之间不用主动的唤醒,比如不用说"你好, 小爱"唤醒程序就可以直接识别命令, 识别程序是始终在识别的, 并且在处理音频的时候不会影响接下来语音命令的录入。

    但是我觉得这个功能需要去对音频进行分析, 这方面并不是很熟练。

    所以想请问, 有没有什么现成的轮子或者文章之类的能提供相关的帮助。

    或者更好的是有没有类似的已经做好的开源软件,

    功能就是在不主动唤醒的情况下可以持续检测语音输入, 将我的语音输入返回识别的结果即可。

    python 最好。

    7 条回复    2020-01-31 20:50:10 +08:00
    Miksztowi
        1
    Miksztowi  
       2020-01-30 16:43:53 +08:00
    Revenant
        2
    Revenant  
       2020-01-30 21:12:00 +08:00
    百度的小度已经可以做到连续的语音指令识别
    目前国内的智能音箱貌似只有小度可以做到
    但是没有唤醒词的识别,很容易发生误触,比如我正在用的小爱同学,偶尔就会莫名其妙的响应我的命令了(我根本没有说唤醒词也会响应)
    如果是控制一些比较危险的电器,比如电饭锅或者耗电量比较大的电器比如空调,这种没有唤醒词的控制就比较危险了
    woshichuanqilz
        3
    woshichuanqilz  
    OP
       2020-01-30 23:33:10 +08:00
    @Revenant 我是直接控制电脑程序的, 输入命令会比较频繁, 不是连接电器使用, 就是控制电脑。
    woshichuanqilz
        4
    woshichuanqilz  
    OP
       2020-01-30 23:33:33 +08:00
    @Miksztowi 多谢 这个给我提供方向了。
    explore365
        5
    explore365  
       2020-01-31 10:03:42 +08:00
    VAD
    find456789
        6
    find456789  
       2020-01-31 14:45:51 +08:00
    钢铁侠里的助手吗, 加油, 可以考虑弄个开源项目
    afirefish
        7
    afirefish  
       2020-01-31 20:50:10 +08:00
    之前做过一个类似的语言识别工具。我使用的是检查每一帧音频的平均值,如果多个帧平均值大于某个参数就表示是有效语音。byte 大小在 0-255 之间,比如我在说话的时候检测到连续 30 帧的音频数据平均值都在 100 以上,就开始进行识别。这样做可以简单的避免一些突然的噪声,但是依然无法识别是否为有效的语言指令。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3668 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 00:12 · PVG 08:12 · LAX 16:12 · JFK 19:12
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.