从第一步开始 教你用Python实现聊天机器人(基础篇)

点击上方关注,All in AI中国

你能顺利在Python应用程序中实现语音识别吗?阅读本教程,了解使用开源Python库实现语音识别的简单方法。

你是否曾经想尝试一个语音识别项目,但发现它太吓人了?

我们来创建一些更复杂的东西,比如完整的音频聊天机器人或者语音助手,怎么样?

组合这类项目的框架代码实际上非常简单,这归功于那些我们可以依赖的开源库。结合这一点,让我们看看如何开始用Python创建一个基本的玩具语音识别应用程序。一旦我们掌握了基础知识,就可以更深入的使用它了。

丑话说在先,我们的Python玩具应用程序没有实际作用,但它会向我们介绍一些概念,这些概念对以后构建更复杂的事物非常有用。在某种程度上来说,如果我们正确地构建这个玩具,修改它来做更复杂的事情将会相对容易。

我们的应用程序在完成后能执行的操作:它会听我们说什么,然后鹦鹉学舌地把它传回给我们,仅此而已。这件事的意义是,我们将学会在应用程序中构建语音识别和音频回放。

导入需要的库

首先,导入几个我们需要的库(来自开源库):

import os

import speech_recognition as sr

from pydub import AudioSegment
from pydub.playback import play
from gtts import gTTS as tts

注释:

  • speech_recognition SpeechRecognition · PyPI——用于执行语音识别的库,支持在线和离线的多个引擎和API。
  • pydub jiaaro/pydub @ GitHub——使用简单易用的高级接口操纵音频。
  • gTTS gTTS · PyPI ——用来连接谷歌翻译文本-语音API的Python库和CLI工具。

识别语音

接下来要做的事情——可能是语音识别应用程序最重要的事情,就是识别语音。

为此,我们首先需要从麦克风捕获传入的音频,然后执行语音识别。这都是通过speech recognition库来处理的。

这是捕捉语音的功能:

def capture():
"""Capture audio"""
rec = sr.Recognizer()

with sr.Microphone() as source:
print('I\'M LISTENING...')
audio = rec.listen(source, phrase_time_limit=5)

try:
text = rec.recognize_google(audio, language='en-US')
return text

except:
speak('Sorry, I could not understand what you said.')
return 0

就这样,语音捕获和识别,还觉得很可怕吗?

注意,一旦这个应用程序开始运行,它将以5秒的间隔进行监听,并逐个处理这5秒间隔。实用吗?不,一点也不。如果我们需要做一些更复杂的事情,可以把它进行调整,也许是听一个激活关键字,或者听我们说话的整个过程,不管长度等等。这仅仅是一个非常简单的开始。

回放语音

那么,我们捕捉到语音之后会做什么呢?我们需要处理它,具体该怎么做呢?

我们正在构建的应用程序将在很大程度上决定“process it”的含义。这次我们的处理将或多或少是一个占位符函数,以便将来做其他事情。目前我们的玩具应用程序将处理捕捉的语音,并将其自动回放给我们(输出到控制台)。

这是我们处理的一个简单函数:

def process_text(name, input):
"""Process what is said"""

speak(name + ', you said: "' + input + '".')
return

让应用程序说话

我们还想让这个应用程序说话,让我们编写一个函数,它使用谷歌文本-语音引擎来实现这个功能。

def speak(text):
"""Say something"""

# Write output to console
print(text)

# Save audio file
speech = tts(text=text, lang='en')
speech_file = 'input.mp3'
speech.save(speech_file)

# Play audio file
sound = AudioSegment.from_mp3(speech_file)
play(sound)
os.remove(speech_file)

首先,我们将传递给函数的内容打印到控制台;然后使用谷歌文本-语音的转换,从文本中创建一个音频文件;再将音频文件保存到磁盘;最后使用pydub库重新打开并播放文件。

这是最难处理的事情。现在我们只需要几行代码来驱动这个过程。

if __name__ == "__main__":

# First get name
speak('What is your name?')
name = capture()
speak('Hello, ' + name + '.')

# Then just keep listening & responding
while 1:
speak('What do you have to say?')
captured_text = capture().lower()

if captured_text == 0:
continue

if 'quit' in str(captured_text):
speak('OK, bye, ' + name + '.')
break

# Process captured text
process_text(name, captured_text)

speak()和capture()函数都用于在提示时获取用户名,然后向他们打招呼。之后进入一个while循环,在捕获语音输入和执行一些非常基本的检查之间的循环,以确保捕获了一些内容,并且用户没有说“退出”来退出。捕获的文本被传递给process_text()函数,该函数响应刚才所说的内容,然后无限重复。

再一次申明:这里没有什么复杂的东西。

将上述所有代码保存到 voice_recognition_test.py 文件中。

现在来看看我们与极简语音识别应用程序的对话。用上面的代码运行它,查看结果如下(当然,同时想象我正在说话,并让别人重复我的话):


$ python voice_recognition_test.py

What is your name?

I'M LISTENING...

Hello, Matthew.

What do you have to say?

I'M LISTENING...

Matthew, you said: "where are you from".

What do you have to say?

I'M LISTENING...

Matthew, you said: "i'd like some pizza".

What do you have to say?

I'M LISTENING...

Matthew, you said: "what is the meaning of life".

What do you have to say?

I'M LISTENING...

OK, bye, Matthew.

Process finished with exit code 0


很酷!如果它真的能做点什么,那就更酷了。那么让我们把注意力转向下一次。

下一次,让我们轻松应对一些更复杂的内容,比如将spaCy集成到代码中,并尝试一些简单的NLP任务,比如口语句子分类、情感分析和命名实体识别。

再下一次,我们可以看看一些更实用的功能,比如制作个人语音助手,这将需要对我们的界面进行一些额外的调整。

但一次做一件事,下期见( ̄▽ ̄)"

By Matthew Mayo

发表评论
留言与评论(共有 0 条评论)
   
验证码:

相关文章

推荐文章

'); })();