精华内容
下载资源
问答
  • Python语音识别

    2021-02-22 17:35:05
    Python语音识别文本转换为语音   语音识别技术,也被称为自动语音识别,目标是以电脑自动将人类的语音内容转换为相 应的文字和文字转换为语音。 文本转换为语音 使用 pyttsx  使用名为 pyttsx 的 python 包,你...

      语音识别技术,也被称为自动语音识别,目标是以电脑自动将人类的语音内容转换为相应的文字和文字转换为语音。

    文本转换为语音

    • 使用 pyttsx
       使用名为 pyttsx 的 python 包,你可以将文本转换为语音。直接使用 pip 就可以进行安装, 命令如下:
    pip install pyttsx3
    

    下载缓慢推荐您使用第三方通道下载

    pip install -i https://mirrors.aliyun.com/pypi/simple pyttsx3
    

    示例】使用 pyttsx 实现文本转换语音

    import pyttsx3 as pyttsx
    
    # 调用初始化方法,获取讲话对象
    engine = pyttsx.init()
    engine.say('加油!努力吧少年')
    engine.runAndWait()
    
    
    • 使用 SAPI
       在 python 中,你也可以使用 SAPI 来做文本到语音的转换。
      示例】使用 SAPI 实现文本转换语音
    from win32com.client import Dispatch
    
    # 获取讲话对象
    speaker = Dispatch('SAPI.SpVoice')
    
    # 讲话内容
    speaker.Speak('猪哥猪哥,你真了不起')
    speaker.Speak('YL美吗?')
    speaker.Speak('ZS说她美吖')
    
    # 释放对象
    del speaker
    
    • 使用 SpeechLib
       使用 SpeechLib,可以从文本文件中获取输入,再将其转换为语音。先使用 pip 安装, 命令如下:
    pip install comtypes
    

    示例】使用 SpeechLib 实现文本转换语音

    from comtypes.client import CreateObject
    from comtypes.gen import SpeechLib
    
    # 获取语音对象,源头
    engine = CreateObject('SAPI.SpVoice')
    
    # 输出到目标对象的流
    stream = CreateObject('SAPI.SpFileStream')
    
    infile = 'demo.txt'
    outfile = 'demo_audio.wav'
    
    # 获取流写入通道
    stream.open(outfile, SpeechLib.SSFMCreateForWrite)
    
    # 给语音源头添加输出流
    engine.AudioOutputStream = stream
    
    # 读取文本内容
    # 打开文件
    f = open(infile, 'r', encoding='utf-8')
    
    # 读取文本内容
    theText = f.read()
    
    # 关闭流对象
    f.close()
    # 语音对象,读取文本内容
    engine.speak(theText)
    stream.close()
    

    语音转换为文本

    • 使用 PocketSphinx
      PocketSphinx 是一个用于语音转换文本的开源 API。它是一个轻量级的语音识别引擎, 尽管在桌面端也能很好地工作,它还专门为手机和移动设备做过调优。首先使用 pip 命令安装所需模块,命令如下:
    pip install PocketSphinx
    pip install SpeechRecognition
    

    下载地址:https://pypi.org/project/SpeechRecognition/

    下载缓慢推荐您使用第三方通道下载

    pip install -i https://mirrors.aliyun.com/pypi/simple 模块名
    

    示例】使用 PocketSphinx 实现语音转换文本

    import speech_recognition as sr
    
    # 获取语音文件
    audio_file = 'demo_audio.wav'
    
    # 获取识别语音内容的对象
    r = sr.Recognizer()
    
    # 打开语音文件
    with sr.AudioFile(audio_file) as source:
        audio = r.record(source)
    
    # 将语音转化为文本
    # print('文本内容:', r.recognize_sphinx(audio))  # recognize_sphinx() 参数中language='en-US' 默认是英语
    print('文本内容:', r.recognize_sphinx(audio, language='zh-CN'))
    
    

    普通话识别问题

    speech_recognition 默认识别英文,是不支持中文的,需要在Sphinx语音识别工具包里面下载对应的 普通话包 和 语言模型 。

    安装步骤:

    1. 下 载 地 址https://sourceforge.net/projects/cmusphinx/files/Acoustic%20and%20Language%20Models/
      在这里插入图片描述

    2. 点击 Mandarin下载cmusphinx-zh-cn-5.2.tar.gz并解压.

    3. 在python安装目录下找到Lib\site-packages\speech_recognition

    4. 点击进入pocketsphinx-data文件夹,会看到一个en-US文件夹,再新建文件夹zh-CN

    5. 在这个文件夹中添加进入刚刚解压的文件,需要注意:把解压出来的zh_cn.cd_cont_5000文件夹重命名为acoustic-modelzh_cn.lm.bin命名为language-model.lm.binzh_cn.dic中dic改为dict格式。即与en-US文件夹中命名一样。

    参考:https://blog.csdn.net/qq_32643313/article/details/99936268
    致以感谢

    后序

    浅显的学习语音识别,不足之处甚多,深究后,将更新文章。

    感谢跟随老师的代码在未知领域里探索,希望我能走的更高更远

    展开全文
  • python语音识别

    2020-06-05 22:54:16
    一个python编写的将文字转换成语音的程序,可以当广播用。所需要的外接库:baidu-api
  • Python 语音识别

    千次阅读 2018-04-09 13:19:17
    整合了语音识别Python 程序提供了其他技术无法比拟的交互性和可访问性。最重要的是,在 Python 程序中实现语音识别非常简单。通过本指南,你将学到:语音识别的工作原理;PyPI 支持哪些软件包;如何安...

    出品 | 悦动智能(公众号ID:aibbtcom)

    遇到问题请文末留言

    【悦动智能导读】亚马逊 Alexa 的巨大成功已经证明:在不远的将来,实现一定程度上的语音支持将成为日常科技的基本要求。整合了语音识别的 Python 程序提供了其他技术无法比拟的交互性和可访问性。最重要的是,在 Python 程序中实现语音识别非常简单。通过本指南,你将学到:

    • 语音识别的工作原理;
    • PyPI 支持哪些软件包;
    • 如何安装和使用 SpeechRecognition 软件包——一个功能全面且易于使用的 Python 语音识别库。

    ▌语言识别工作原理概述

    语音识别源于 20 世纪 50 年代早期在贝尔实验室所做的研究。早期语音识别系统仅能识别单个讲话者以及只有约十几个单词的词汇量。现代语音识别系统已经取得了很大进步,可以识别多个讲话者,并且拥有识别多种语言的庞大词汇表。

    语音识别的首要部分当然是语音。通过麦克风,语音便从物理声音被转换为电信号,然后通过模数转换器转换为数据。一旦被数字化,就可适用若干种模型,将音频转录为文本。

    大多数现代语音识别系统都依赖于隐马尔可夫模型(HMM)。其工作原理为:语音信号在非常短的时间尺度上(比如 10 毫秒)可被近似为静止过程,即一个其统计特性不随时间变化的过程。

    许多现代语音识别系统会在 HMM 识别之前使用神经网络,通过特征变换和降维的技术来简化语音信号。也可以使用语音活动检测器(VAD)将音频信号减少到可能仅包含语音的部分。

    幸运的是,对于 Python 使用者而言,一些语音识别服务可通过 API 在线使用,且其中大部分也提供了 Python SDK。

    ▌选择 Python 语音识别包

    PyPI中有一些现成的语音识别软件包。其中包括:

    •apiai

    •google-cloud-speech

    •pocketsphinx

    •SpeechRcognition

    •watson-developer-cloud

    •wit

    一些软件包(如 wit 和 apiai )提供了一些超出基本语音识别的内置功能,如识别讲话者意图的自然语言处理功能。其他软件包,如谷歌语音,则专注于语音向文本的转换。

    其中,SpeechRecognition 就因便于使用脱颖而出。

    识别语音需要输入音频,而在 SpeechRecognition 中检索音频输入是非常简单的,它无需构建访问麦克风和从头开始处理音频文件的脚本,只需几分钟即可自动完成检索并运行。

    SpeechRecognition 库可满足几种主流语音 API ,因此灵活性极高。其中 Google Web Speech API 支持硬编码到 SpeechRecognition 库中的默认 API 密钥,无需注册就可使用。SpeechRecognition 以其灵活性和易用性成为编写 Python 程序的最佳选择。

    ▌安装 SpeechRecognation

    SpeechRecognition 兼容 Python2.6 , 2.7 和 3.3+,但若在 Python 2 中使用还需要一些额外的安装步骤。本教程中所有开发版本默认 Python 3.3+。

    读者可使用 pip 命令从终端安装 SpeechRecognition:

    $ pip install SpeechRecognition
    

    安装完成后请打开解释器窗口并输入以下内容来验证安装:

    >>> import speech_recognition as sr
    >>> sr.__version__
    '3.8.1'
    

    注:不要关闭此会话,在后几个步骤中你将要使用它。

    若处理现有的音频文件,只需直接调用 SpeechRecognition ,注意具体的用例的一些依赖关系。同时注意,安装 PyAudio 包来获取麦克风输入。

    ▌识别器类

    SpeechRecognition 的核心就是识别器类。

    Recognizer API 主要目是识别语音,每个 API 都有多种设置和功能来识别音频源的语音,分别是:

    • recognize_google()Google Web Speech API
    • recognize_google_cloud(): Google Cloud Speech - requires installation of the google-cloud-speech package
    • recognize_houndify(): Houndify by SoundHound
    • recognize_ibm()IBM Speech to Text
    • recognize_sphinx(): CMU Sphinx - requires installing PocketSphinx
    • recognize_wit(): Wit.ai

    以上七个中只有 recognition_sphinx()可与CMU Sphinx 引擎脱机工作, 其他六个都需要连接互联网。

    SpeechRecognition 附带 Google Web Speech API 的默认 API 密钥,可直接使用它。其他六个 API 都需要使用 API 密钥或用户名/密码组合进行身份验证,因此本文使用了 Web Speech API。

    现在开始着手实践,在解释器会话中调用 recognise_google()函数。

    >>> r.recognize_google()
    

    屏幕会出现:

    Traceback (most recent call last):
     File "<stdin>", line 1, in <module>
    TypeError: recognize_google() missing 1 required positional argument: 'audio_data'
    

    相信你已经猜到了结果,怎么可能从空文件中识别出数据呢?

    这 7 个 recognize_*()  识别器类都需要输入 audio_data 参数,且每种识别器的 audio_data 都必须是 SpeechRecognition 的 AudioData 类的实例。

    AudioData 实例的创建有两种路径:音频文件或由麦克风录制的音频,先从比较容易上手的音频文件开始。

    ▌音频文件的使用

    首先需要下载音频文件(https://github.com/realpython/python-speech-recognition/tree/master/audio_files),保存到 Python 解释器会话所在的目录中。

    AudioFile 类可以通过音频文件的路径进行初始化,并提供用于读取和处理文件内容的上下文管理器界面。

    支持文件类型

    SpeechRecognition 目前支持的文件类型有:

    • WAV: 必须是 PCM/LPCM 格式
    • FLAC: 必须是初始 FLAC 格式;OGG-FLAC 格式不可用

    若是使用 Linux 系统下的 x-86 ,macOS 或者是 Windows 系统,需要支持 FLAC文件。若在其它系统下运行,需要安装 FLAC 编码器并确保可以访问 flac 命令。

    使用 record() 从文件中获取数据

    在解释器会话框键入以下命令来处理 “harvard.wav” 文件的内容:

    >>> harvard = sr.AudioFile('harvard.wav')
    >>> with harvard as source:
    ...   audio = r.record(source)
    ...
    

    通过上下文管理器打开文件并读取文件内容,并将数据存储在 AudioFile 实例中,然后通过 record()将整个文件中的数据记录到 AudioData 实例中,可通过检查音频类型来确认:

    >>> type(audio)
    <class 'speech_recognition.AudioData'>
    

    现在可以调用 recognition_google()来尝试识别音频中的语音。

    >>> r.recognize_google(audio)
    'the stale smell of old beer lingers it takes heat
    to bring out the odor a cold dip restores health and
    zest a salt pickle taste fine with ham tacos al
    Pastore are my favorite a zestful food is the hot
    cross bun'
    

    以上就完成了第一个音频文件的录制。

    利用偏移量和持续时间获取音频片段

    若只想捕捉文件中部分演讲内容该怎么办?record() 命令中有一个 duration 关键字参数,可使得该命令在指定的秒数后停止记录。

    例如,以下内容仅获取文件前四秒内的语音:

    >>> with harvard as source:
    ...   audio = r.record(source, duration=4)
    ...
    >>> r.recognize_google(audio)
    'the stale smell of old beer lingers'
    

    with块中调用record() 命令时,文件流会向前移动。这意味着若先录制四秒钟,再录制四秒钟,则第一个四秒后将返回第二个四秒钟的音频。

    >>> with harvard as source:
    ...   audio1 = r.record(source, duration=4)
    ...   audio2 = r.record(source, duration=4)
    ...
    >>> r.recognize_google(audio1)
    'the stale smell of old beer lingers'
    >>> r.recognize_google(audio2)
    'it takes heat to bring out the odor a cold dip'
    

    除了指定记录持续时间之外,还可以使用 offset 参数为 record() 命令指定起点,其值表示在开始记录的时间。如:仅获取文件中的第二个短语,可设置 4 秒的偏移量并记录 3 秒的持续时间。

    >>> with harvard as source:
    ...   audio = r.record(source, offset=4, duration=3)
    ...
    >>> recognizer.recognize_google(audio)
    'it takes heat to bring out the odor'
    

    在事先知道文件中语音结构的情况下,offset 和 duration 关键字参数对于分割音频文件非常有用。但使用不准确会导致转录不佳。

    >>> with harvard as source:
    ...   audio = r.record(source, offset=4.7, duration=2.8)
    ...
    >>> recognizer.recognize_google(audio)
    'Mesquite to bring out the odor Aiko'
    

    本程序从第 4.7 秒开始记录,从而使得词组 “it takes heat to bring out the odor” ,中的 “it t” 没有被记录下来,此时 API 只得到 “akes heat” 这个输入,而与之匹配的是 “Mesquite” 这个结果。

    同样的,在获取录音结尾词组 “a cold dip restores health and zest” 时 API 仅仅捕获了 “a co” ,从而被错误匹配为 “Aiko” 。

    噪音也是影响翻译准确度的一大元凶。上面的例子中由于音频文件干净从而运行良好,但在现实中,除非事先对音频文件进行处理,否则不可能得到无噪声音频。

    噪声对语音识别的影响

     

    噪声在现实世界中确实存在,所有录音都有一定程度的噪声,而未经处理的噪音可能会破坏语音识别应用程序的准确性。

    要了解噪声如何影响语音识别,请下载 “jackhammer.wav” (https://github.com/realpython/python-speech-recognition/tree/master/audio_files)文件,并确保将其保存到解释器会话的工作目录中。文件中短语 “the stale smell of old beer lingers” 在是很大钻墙声的背景音中被念出来。

    尝试转录此文件时会发生什么?

    >>> jackhammer = sr.AudioFile('jackhammer.wav')
    >>> with jackhammer as source:
    ...   audio = r.record(source)
    ...
    >>> r.recognize_google(audio)
    'the snail smell of old gear vendors'
    

    那么该如何处理这个问题呢?可以尝试调用 Recognizer 类的adjust_for_ambient_noise()命令。

    >>> with jackhammer as source:
    ...   r.adjust_for_ambient_noise(source)
    ...   audio = r.record(source)
    ...
    >>> r.recognize_google(audio)
    'still smell of old beer vendors'
    

    这样就与准确结果接近多了,但精确度依然存在问题,而且词组开头的 “the” 被丢失了,这是什么原因呢?

    因为使用 adjust_for_ambient_noise()命令时,默认将文件流的第一秒识别为音频的噪声级别,因此在使用 record()获取数据前,文件的第一秒已经被消耗了。

    可使用duration关键字参数来调整adjust_for_ambient_noise()命令的时间分析范围,该参数单位为秒,默认为 1,现将此值降低到 0.5。

    >>> with jackhammer as source:
    ...   r.adjust_for_ambient_noise(source, duration=0.5)
    ...   audio = r.record(source)
    ...
    >>> r.recognize_google(audio)
    'the snail smell like old Beer Mongers'
    

    现在我们就得到了这句话的 “the”,但现在出现了一些新的问题——有时因为信号太吵,无法消除噪音的影响。

    若经常遇到这些问题,则需要对音频进行一些预处理。可以通过音频编辑软件,或将滤镜应用于文件的 Python 包(例如SciPy)中来进行该预处理。处理嘈杂的文件时,可以通过查看实际的 API 响应来提高准确性。大多数 API 返回一个包含多个可能转录的 JSON 字符串,但若不强制要求给出完整响应时,recognition_google()方法始终仅返回最可能的转录字符。

    通过把 recognition_google()中 True 参数改成 show_all 来给出完整响应。

    >>> r.recognize_google(audio, show_all=True)
    {'alternative': [
     {'transcript': 'the snail smell like old Beer Mongers'}, 
     {'transcript': 'the still smell of old beer vendors'}, 
     {'transcript': 'the snail smell like old beer vendors'},
     {'transcript': 'the stale smell of old beer vendors'}, 
     {'transcript': 'the snail smell like old beermongers'}, 
     {'transcript': 'destihl smell of old beer vendors'}, 
     {'transcript': 'the still smell like old beer vendors'}, 
     {'transcript': 'bastille smell of old beer vendors'}, 
     {'transcript': 'the still smell like old beermongers'}, 
     {'transcript': 'the still smell of old beer venders'}, 
     {'transcript': 'the still smelling old beer vendors'}, 
     {'transcript': 'musty smell of old beer vendors'}, 
     {'transcript': 'the still smell of old beer vendor'}
    ], 'final': True}
    

    可以看到,recognition_google()返回了一个关键字为 'alternative' 的列表,指的是所有可能的响应列表。此响应列表结构会因 API 而异且主要用于对结果进行调试。

    ▌麦克风的使用

    若要使用 SpeechRecognizer 访问麦克风则必须安装 PyAudio 软件包,请关闭当前的解释器窗口,进行以下操作:

    安装 PyAudio

    安装 PyAudio 的过程会因操作系统而异。

    Debian Linux

    如果使用的是基于 Debian的Linux(如 Ubuntu ),则可使用 apt 安装 PyAudio

    $ sudo apt-get install python-pyaudio python3-pyaudio

    安装完成后可能仍需要启用 pip install pyaudio ,尤其是在虚拟情况下运行。

    macOS:macOS 用户则首先需要使用 Homebrew 来安装 PortAudio,然后调用 pip 命令来安装 PyAudio。

    $ brew install portaudio
    $ pip install pyaudio
    

    Windows:Windows 用户可直接调用 pip 来安装 PyAudio。

    $ pip install pyaudio
    

    安装测试:安装了 PyAudio 后可从控制台进行安装测试。

    $ python -m speech_recognition
    

    请确保默认麦克风打开并取消静音,若安装正常则应该看到如下所示的内容:

    A moment of silence, please...
    Set minimum energy threshold to 600.4452854381937
    Say something!
    

    请对着麦克风讲话并观察 SpeechRecognition 如何转录你的讲话。

    Microphone 类

    请打开另一个解释器会话,并创建识一个别器类的例子。

    >>> import speech_recognition as sr
    >>> r = sr.Recognizer()
    

    此时将使用默认系统麦克风,而不是使用音频文件作为信号源。读者可通过创建一个Microphone 类的实例来访问它。

    >>> mic = sr.Microphone()
    

    若系统没有默认麦克风(如在 RaspberryPi 上)或想要使用非默认麦克风,则需要通过提供设备索引来指定要使用的麦克风。读者可通过调用 Microphone 类的list_microphone_names()函数来获取麦克风名称列表。

    >>> sr.Microphone.list_microphone_names()
    ['HDA Intel PCH: ALC272 Analog (hw:0,0)',
     'HDA Intel PCH: HDMI 0 (hw:0,3)',
     'sysdefault',
     'front',
     'surround40',
     'surround51',
     'surround71',
     'hdmi',
     'pulse',
     'dmix', 
     'default']
    

    注意:你的输出可能与上例不同。

    list_microphone_names()返回列表中麦克风设备名称的索引。在上面的输出中,如果要使用名为 “front” 的麦克风,该麦克风在列表中索引为 3,则可以创建如下所示的麦克风实例:

    >>> # This is just an example; do not run
    >>> mic = sr.Microphone(device_index=3)
    

    但大多数情况下需要使用系统默认麦克风。

    使用 listen()获取麦克风输入数据

     

    准备好麦克风实例后,读者可以捕获一些输入。

    就像 AudioFile 类一样,Microphone 是一个上下文管理器。可以使用 with 块中 Recognizer 类的 listen()方法捕获麦克风的输入。该方法将音频源作为第一个参数,并自动记录来自源的输入,直到检测到静音时自动停止。

    >>> with mic as source:
    ...   audio = r.listen(source)
    ...
    

    执行 with 块后请尝试在麦克风中说出 “hello” 。请等待解释器再次显示提示,一旦出现 “>>>” 提示返回就可以识别语音。

    >>> r.recognize_google(audio)
    'hello'
    

    如果没有提示再次返回,可能是因为麦克风收到太多的环境噪音,请使用 Ctrl + C 中断这个过程,从而让解释器再次显示提示。

    要处理环境噪声,可调用 Recognizer 类的 adjust_for_ambient_noise()函数,其操作与处理噪音音频文件时一样。由于麦克风输入声音的可预测性不如音频文件,因此任何时间听麦克风输入时都可以使用此过程进行处理。

    >>> with mic as source:
    ...   r.adjust_for_ambient_noise(source)
    ...   audio = r.listen(source)
    ...
    

    运行上面的代码后稍等片刻,尝试在麦克风中说 “hello” 。同样,必须等待解释器提示返回后再尝试识别语音。

    请记住,adjust_for_ambient_noise()默认分析音频源中1秒钟长的音频。若读者认为此时间太长,可用duration参数来调整。

    SpeechRecognition 资料建议 duration 参数不少于0.5秒。某些情况下,你可能会发现,持续时间超过默认的一秒会产生更好的结果。您所需要的最小值取决于麦克风所处的周围环境,不过,这些信息在开发过程中通常是未知的。根据我的经验,一秒钟的默认持续时间对于大多数应用程序已经足够。

    处理难以识别的语音

    尝试将前面的代码示例输入到解释器中,并在麦克风中输入一些无法理解的噪音。你应该得到这样的结果:

    Traceback (most recent call last):
     File "<stdin>", line 1, in <module>
     File "/home/david/real_python/speech_recognition_primer/venv/lib/python3.5/site-packages/speech_recognition/__init__.py", line 858, in recognize_google
      if not isinstance(actual_result, dict) or len(actual_result.get("alternative", [])) == 0: raise UnknownValueError()
    speech_recognition.UnknownValueError
    

    无法被 API 匹配成文字的音频会引发 UnknownValueError 异常,因此要频繁使用 try  和 except 块来解决此类问题。API 会尽全力去把任何声音转成文字,如短咕噜声可能会被识别为 “How”,咳嗽声、鼓掌声以及舌头咔哒声都可能会被转成文字从而引起异常。

    ▌结语

    本教程中,我们一直在识别英语语音,英语是 SpeechRecognition 软件包中每个 recognition _ *()方法的默认语言。但是,识别其他语音也是绝对有可能且很容易完成的。要识别不同语言的语音,请将 recognition _ *()方法的语言关键字参数设置为与所需语言对应的字符串。

    原文链接:http://www.aibbt.com/a/28552.html

    展开全文
  • python语音识别Welcome to The Complete Beginner’s Guide to Speech Recognition in Python. 欢迎使用Python语音识别完整入门指南。 In this post, I will walk you through some great hands-on exercises that ...

    python语音识别

    Welcome to The Complete Beginner’s Guide to Speech Recognition in Python.

    欢迎使用Python语音识别完整入门指南。

    In this post, I will walk you through some great hands-on exercises that will help you to have some understanding of speech recognition and the use of machine learning. Speech recognition helps us to save time by speaking instead of typing. It also gives us the power to communicate with our devices without even writing one line of code. This makes technological devices more accessible and easier to use. Speech recognition is a great example of using machine learning in real life.

    在本文中,我将引导您完成一些动手实践,以帮助您对语音识别和机器学习的使用有所了解。 语音识别可以帮助我们通过说话而不是打字来节省时间。 它还使我们无需编写一行代码即可与我们的设备进行通信。 这使技术设备更易于访问且更易于使用。 语音识别是在现实生活中使用机器学习的一个很好的例子。

    Another nice example of speech recognition: Google Meet web application, did you know that from the settings you can turn on the subtitles? When you turn on subtitles, a program in the back will recognize your speech and convert it to text in real life. It’s really impressive to see how fast it happens. Another cool feature of this Google Meet recognizer is that it also knows who is speaking. In this walkthrough, we will use Google’s Speech API. I can’t wait to show you how to build your own speech recognizer. Let’s get started!

    语音识别的另一个很好的例子:Google Meet Web应用程序,您是否知道可以通过设置打开字幕? 当您打开字幕时,后面的程序将识别您的语音并将其转换为现实生活中的文本。 看到它发生的速度真的很令人印象深刻。 此Google Meet识别器的另一个很酷的功能是它也知道谁在讲话。 在本演练中,我们将使用Google的Speech API。 我迫不及待地向您展示如何构建自己的语音识别器。 让我们开始吧!

    目录 (Table of contents)

    • Speech Recognition Libraries

      语音识别库

    • Recognizer Class

      识别器类别

    • Speech Recognition Functions

      语音识别功能

    • Audio Preprocessing

      音频预处理

    • Bonus (Different Scenarios)

      奖金(不同方案)

    语音识别库 (Speech Recognition Libraries)

    • CMU Sphinx

      CMU狮身人面像
    • Kaldi

      卡尔迪
    • SpeechRecognition

      语音识别
    • wav2letter++

      wav2letter ++

    “CMU Sphinx collects over 20 years of the CMU research. Some advantage of this library: CMUSphinx tools are designed specifically for low-resource platforms, flexible design, and focus on practical application development and not on research.” (

    “ CMU Sphinx收集了20多年的CMU研究成果。 该库的一些优势:CMUSphinx工具专为低资源平台而设计,设计灵活,并且专注于实际应用程序开发而不是研究。” (

    “Kaldi is a toolkit for speech recognition, intended for use by speech recognition researchers and professionals.” (

    “ Kaldi是语音识别工具包,旨在供语音识别研究人员和专业人员使用。” (

    “Speech Recognition is a library for performing speech recognition, with support for several engines and APIs, online and offline.” (

    “语音识别是一个用于执行语音识别的库,支持在线和离线的多个引擎和API。” (

    “wav2letter++ is a fast, open source speech processing toolkit from the Speech team at Facebook AI Research built to facilitate research in end-to-end models for speech recognition.” (

    “ wav2letter ++是Facebook AI Research语音团队提供的一种快速,开源的语音处理工具包,旨在促进语音识别的端到端模型的研究。” (

    From these libraries, we will be working with SpeechRecogntion library because of it’s low barrier to entry and it’s compatibility with much available speech recognition APIs. We can install SpeechRecogntion library by running the following line in our terminal window:

    在这些库中,我们将使用SpeechRecogntion库,因为它的进入门槛低,并且与许多可用的语音识别API兼容。 我们可以通过在终端窗口中运行以下行来安装SpeechRecogntion库:

    pip install SpeechRecognition

    识别器类别 (Recognizer Class)

    SpeechRecognition library has many classes but we will be focusing on a class called Recognizer. This is the class that will help us to convert audio files into text. To access the Recognizer class, first, let’s import the library.

    SpeechRecognition库有很多类,但我们将重点介绍一个名为Recognizer的类。 该类将帮助我们将音频文件转换为文本。 要访问Recognizer类,首先,让我们导入库。

    import speech_recognition as sr

    Now, let’s define a variable and assign an instance of recognizer class by calling it.

    现在,让我们定义一个变量,并通过调用它来分配识别器类的实例。

    recognizer = sr.Recognizer()

    Now, let’s set the energy threshold to 300. You can think of the energy threshold as the loudness of the audio files. The values below the threshold are considered silent, and the values above the threshold are considered speech. This will improve the recognition of the speech when working with the audio file.

    现在,将能量阈值设置为300。您可以将能量阈值视为音频文件的响度。 低于阈值的值被认为是无声的,而高于阈值的值被认为是语音。 使用音频文件时,这将改善语音的识别能力。

    recognizer.energy_threshold = 300

    SpeechRecognition’s documentation recommends 300 as a threshold value which works great with most of the audio files. Also, keep in mind that the energy threshold value will adjust automatically as the recognizer listens to audio files.

    SpeechRecognition的文档建议使用300作为阈值,该阈值适用于大多数音频文件。 另外,请记住,能量阈值将在识别器收听音频文件时自动调整。

    语音识别功能 (Speech Recognition Functions)

    In this step, we will see our recognizer in action but before we get it to work let’s see some cool functions of this instance. Speech Recognition has a built-in function to make it work with many of the APIs out there:

    在这一步中,我们将看到识别器在起作用,但是在使它起作用之前,让我们看一下该实例的一些很酷的功能。 语音识别具有内置功能,使其可以与许多API一起使用:

    • recognize_bing()

      ognize_bing()
    • recognize_google()

      ognize_google()
    • recognize_google_cloud()

      ognize_google_cloud()
    • recognize_wit()

      ognize_wit()

    Bing Recognizer function uses Microsoft’s cognitive services.

    Bing Recognizer功能使用Microsoft的认知服务。

    Google Recognizer function uses Google’s free web search API.

    Google Recognizer功能使用Google的免费网络搜索API。

    Google Cloud Recognizer function uses Google’s cloud speech API.

    Google Cloud Recognizer功能使用Google的云语音API。

    Wit Recognizer function uses the wit.ai platform.

    机智识别器功能使用wit.ai平台。

    We will use the Google Recognizer function, which is recognize_google(). It’s free and doesn’t require an API key to use. There is one drawback about this recognizer, it limits you when you want to work with longer audio files. In my experience, I didn’t have any issues when working with audio files under 5 minutes. I don’t recommend using this recognizer with long audio files. There are different techniques to work with longer audio files, I am planning to cover it in a different post.

    我们将使用Google Recognizer函数,即Recognize_google ()。 它是免费的,不需要使用API​​密钥。 此识别器有一个缺点,当您要使用更长的音频文件时,它会限制您。 根据我的经验,使用5分钟以下的音频文件时没有任何问题。 我不建议将此识别器用于长音频文件。 有多种方法可以处理更长的音频文件,我打算在另一篇文章中介绍。

    (Example)

    import speech_recognition as srrecognizer = sr.Recognizer()recognizer.recognize_google(audio_data="my_audio.wav", language="en-US")
    Image for post
    error message
    错误信息

    音频预处理 (Audio Preprocessing)

    The previous example was just a try without doing any audio preprocessing and as you can it has caused an error. The problem is the data type of our audio file. To avoid this kind of issues, a preprocessing step is necessary. You can think of it like data preprocessing that we usually do before doing data analysis. There is a special class that we will use for this step, which is called AudioFile.

    前面的示例只是尝试而没有进行任何音频预处理,并且您已经造成了错误。 问题是音频文件的数据类型。 为避免此类问题,必须执行预处理步骤。 您可以将其视为我们在进行数据分析之前通常进行的数据预处理。 我们将在此步骤中使用一个特殊的类,称为AudioFile。

    音频文件 (AudioFile)

    import speech_recognition as srrecognizer = sr.Recognizer()audio_file_ = sr.AudioFile("data/my_audio.wav")type(audio_file)
    Image for post

    When we try to pass the audio_file variable inside recognize_google() function it will not accept it. The reason is the function accepts audiodata but our current variable type is audiofile. To convert it to an audio data type, we will use the recognizer class’s built-in method called record.

    当我们尝试在Recognize_google()函数中传递audio_file变量时,它将不会接受它。 原因是该函数接受音频数据,但是我们当前的变量类型是音频文件。 要将其转换为音频数据类型,我们将使用识别器类的内置方法(称为record)。

    记录方式 (Record Method)

    Here is how to use record method:

    这是使用记录方法的方法:

    with audio_file as source:
    audio_file = recognizer.record(source)
    recognizer.recognize_google(audio_data=audio_file)type(audio_file)
    Image for post
    data type updated
    数据类型已更新

    There are two parameters of the record method that we can also use.

    我们也可以使用记录方法的两个参数。

    By default, these both parameters are equal to None. And in default mode, the record method will record the audio data from the beginning of the file until there is no more audio. But we can change this by giving them float values.

    默认情况下,这两个参数均等于“无”。 在默认模式下,record方法将从文件开头开始记录音频数据,直到没有更多音频为止。 但是我们可以通过给它们赋予浮点值来改变它。

    • Duration: let’s say we want only the first 7 seconds of the whole audio file, we have to set the duration parameter to 7.0

      持续时间 :假设我们只需要整个音频文件的前7秒,我们必须将duration参数设置为7.0

    • Offset: it is used to cut off or skip over a specified amount of second at the start of an audio file. Let’s say we don’t want the first 1second of the audio files, we have to set the offset parameter to 1.0

      偏移 :用于在音频文件开始时截断或跳过指定的秒数。 假设我们不希望音频文件的前1秒,我们必须将offset参数设置为1.0

    Duration

    持续时间

    with audio_file_ as source:
    audio_file = recognizer.record(source, duration = 7.0)
    result = recognizer.recognize_google(audio_data=audio_file)
    Image for post
    result
    结果

    Offset

    抵消

    with audio_file_ as source:
    audio_file = recognizer.record(source, offset = 1.0)
    result = recognizer.recognize_google(audio_data=audio_file)
    Image for post
    result
    结果

    奖金(不同方案) (Bonus (Different Scenarios))

    无声音频 (Speechless Audio)

    # Import the silent audio file
    silent_audio_file = sr.AudioFile("silent_audio.wav")# Convert the AudioFile to AudioData
    with silent_audio_file as source:
    silent_audio = recognizer.record(source)# Recognize the AudioData with show_all turned on
    recognizer.recognize_google(silent_audio, show_all=True)

    多名发言人 (Multiple Speakers)

    This process of understanding the different speakers in a single audio file is known as speaker diarization. This is a really cool function to have but unfortunately, it is not available in this library. One solution to do this is to have different audio files for different speakers, go through them using for loop.

    了解单个音频文件中不同说话者的过程称为说话者二值化。 这是一个非常酷的功能,但是不幸的是,该库中没有该功能。 一种解决方案是为不同的扬声器使用不同的音频文件,并使用for循环进行遍历。

    recognizer = sr.Recognizer()# Multiple speakers on different files
    speakers = [sr.AudioFile("speaker_0.wav"), sr.AudioFile("speaker_1.wav"), sr.AudioFile("speaker_2.wav")]# Transcribe each speaker individually
    for i, speaker in enumerate(speakers):
    with speaker as source:
    speaker_audio = recognizer.record(source)

    print(f"Text from speaker {i}:")
    print(recognizer.recognize_google(speaker_audio,language="en-US"))

    背景噪音 (Background Noise)

    To handle the background noise, the recognizer class has a built-in function called adjust_for_ambient_noise function, which also takes a parameter of duration. Using this function the recognizer class listens to the audio for the specified duration seconds from the beginning of the audio and then adjusts the energy threshold value so that the whole audio is more recognizable.

    为了处理背景噪音,识别器类具有一个内置的函数,称为Adjust_for_ambient_noise函数,该函数还带有一个duration参数。 使用此功能,识别器类会在从音频开始的指定持续时间(秒)内收听音频,然后调整能量阈值,以便更容易识别整个音频。

    # Import audio file with background nosie
    noisy_audio_file = sr.AudioFile("noisy_audio.wav")# Adjust for ambient noise and record
    with noisy_audio_file as source:
    recognizer.adjust_for_ambient_noise(source, duration=0.5)
    noisy_audio_file = recognizer.record(source)# Recognize the audio
    recognizer.recognize_google(noisy_audio_file)

    视频示范 (Video Demonstration)

    Just started my journey on YouTube, I am doing video demonstrations in following topics: Machine Learning, Data Science, Artificial Intelligence. Enjoy!

    刚开始我在YouTube上的旅程,我正在以下主题中进行视频演示:机器学习,数据科学,人工智能。 请享用!

    Thank you for reading this post, I hope you enjoyed and learned something new today. Feel free to contact me if you have any questions while implementing the code, will be more than happy to help.

    感谢您阅读这篇文章,希望您今天喜欢并学到一些新东西。 实施代码时如有任何疑问,请随时与我联系 ,我们将竭诚为您服务。

    Follow my blog and Towards Data Science to stay inspired.

    关注 我的博客 迈向数据科学 ,保持灵感。

    相关内容 (Related Content)

    翻译自: https://towardsdatascience.com/speech-recognition-in-python-the-complete-beginners-guide-de1dd7f00726

    python语音识别

    展开全文
  • python 语音识别

    2019-03-28 21:10:52
    https://segmentfault.com/a/1190000013953185?utm_source=tag-newest
    展开全文
  • 主要为大家详细介绍了python语音识别实践之百度语音API,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
  • 今天小编就为大家分享一篇对Python 语音识别框架详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
  • 参考链接: Python语音识别简介 广告关闭 云服务器1核2G首年99年,还有多款热门云产品满足您的上云需求 语音识别技术,也被称为自动语音识别,目标是以电脑自动将人类的语音内容转换为相应的文字。 应用包括...
  • Python 语音识别框架

    千次阅读 2018-10-31 16:51:07
    Python 语音识别框架 wobiji.net from win32com.client import constants import os import win32com.client import pythoncom speaker = win32com.client.Dispatch("SAPI.SPVOICE") class Speech...
  • python 语音识别+训练+语音切割+语音转换的python 供大家学习, 基于加tensorflow2.0.0+kera2.3.1 1.顺序是语音转换 2.语音切割成小块 3.语音训练用那小块 4.最后语音识别
  • python实现百度语音识别api发布时间:2020-09-06 13:52:14来源:脚本之家阅读:93本文实例为大家分享了python实现百度语音识别的具体代码,供大家参考,具体内容如下详细百度语音识别api文档先下载python用SDK,可以...
  • 整合了语音识别Python 程序提供了其他技术无法比拟的交互性和可访问性。最重要的是,在 Python 程序中实现语音识别非常简单。阅读本指南,你就将会了解。你将学到: •语音识别的工作原理; •PyPI 支持哪些...
  • In this tutorial you will learn about python speech recognition. There are plenty of options available for this.... 在本教程中,您将学习python语音识别。 有很多可用的选项。 但是,Go...
  • python语音识别(语音转文字)

    万次阅读 多人点赞 2019-10-10 17:40:44
    调用第三方百度的语音识别api进行语音识别 步骤: 1)安装百度提供的Python库:pip install baidu-aip 2)运行以下代码: from aip import AipSpeech APP_ID = '160' API_KEY = 'f6XVtm' SECRET_KEY = 'zbvyYC' # ...
  • python语音识别所需的PyAudio-0.2.11-cp37-cp37m-win_amd64.whl和SpeechRecognition-3.8.1-py2.py3-none-any.whl打包
  • Python语音识别----百度语音API实现 如何借用百度 API 的语音识别功能,将我们的音频转为文字? 1、登录百度智能云官网 https://cloud.baidu.com/ 2、领取免费额度 3、创建应用 4、注册获取key 5、环境准备 安装库...
  • demo-python语音识别

    2020-12-22 18:27:31
    语音识别 语音识别,将人类的语音内容转换为相应的文字和文字转换为语音。 环境: 操作系统:windows10 Python版本:python3.7 注意:下列代码中出现的python3是因为笔者PC存在两个版本的python,一个用python,一...
  • Python语音识别API总结

    2019-08-29 14:45:38
    目录语音识别相关API梅尔频率倒谱系数(mfcc)声音合成语音识别 语音识别相关API 语音识别关键概念:声音的本质是震动,震动的本质是位移关于时间的函数,波形文件(.wav)中记录了不同采样时刻的位移。 通过傅里叶变换,...
  • Python调用标贝科技语音识别接口,实现语音转文字 环境准备: Python 3 登录 点击产品地址进行登录,支持短信、密码、微信三种方式登录。 创建新应用 登录后进入【首页概览】,各位开发者可以进行创建多个...
  • python语音识别终极指南

    万次阅读 多人点赞 2018-04-05 00:00:00
    译者 | 廉洁编辑 | 明明出品 | ...整合了语音识别Python 程序提供了其他技术无法比拟的交互性和可访问性。最重要的是,在 Python 程序中实现语音识别非常简单。阅读本指南,你就将会了解。你将学到:•语音识别的工
  • 整合了语音识别Python 程序提供了其他技术无法比拟的交互性和可访问性。最重要的是,在 Python 程序中实现语音识别非常简单。阅读本指南,你就将会了解。你将学到: •语音识别的工作原理; •PyPI 支持哪些...
  • python语音识别依赖包

    2020-08-25 14:35:43
    conda install -c contango python_speech_features
  • 利用下面的博客教程实现语音识别: 《这一篇就够了 python语音识别指南终极版》链接:https://blog.csdn.net/j2IaYU7Y/article/details/79878310 首先感谢这篇文章

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 27,878
精华内容 11,151
关键字:

python语音识别

python 订阅