从第一步开始 教你用Python实现聊天机器人(基础篇)
https://m.toutiao.com/is/Js4rgJc/
你能顺利在Python应用程序中实现语音识别吗?阅读本教程,了解使用开源Python库实现语音识别的简单方法。
你是否曾经想尝试一个语音识别项目,但发现它太吓人了?
我们来创建一些更复杂的东西,比如完整的音频聊天机器人或者语音助手,怎么样?
组合这类项目的框架代码实际上非常简单,这归功于那些我们可以依赖的开源库。结合这一点,让我们看看如何开始用Python创建一个基本的玩具语音识别应用程序。一旦我们掌握了基础知识,就可以更深入的使用它了。
丑话说在先,我们的Python玩具应用程序没有实际作用,但它会向我们介绍一些概念,这些概念对以后构建更复杂的事物非常有用。在某种程度上来说,如果我们正确地构建这个玩具,修改它来做更复杂的事情将会相对容易。
我们的应用程序在完成后能执行的操作:它会听我们说什么,然后鹦鹉学舌地把它传回给我们,仅此而已。这件事的意义是,我们将学会在应用程序中构建语音识别和音频回放。
导入需要的库
首先,导入几个我们需要的库(来自开源库):
注释:
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 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库重新打开并播放文件。
这是最难处理的事情。现在我们只需要几行代码来驱动这个过程。
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