如何用Python让你的电脑说话 你成为亿万花花公子的第一步
如果你是像《钢铁侠》这样的电影的粉丝,你可能已经幻想过得到你自己的贾维斯。那么,在这篇文章中,我将告诉你如何开始制作你自己的电脑助手。我们将通过一个小的编程和一些聪明的python包在引擎盖下进行数据科学。
现在,制作像超级智能人工智能这样复杂的东西是很难的,对于我来说,在一篇文章中甚至很可能在一般情况下都很难做到。然而,我们可以做的是把这个问题分解成更小的部分,使问题看起来更容易。这是你在每一个项目中都应该做的事情,这样就不会一下子被其所有的复杂性所困住了。
从我对这个问题的简单思考来看,我相信我们可以把一个超级智能的人工智能助手分成四个主要部分。
文本到语音(以获得回应) 语音转文字(用于询问事情) 一些计算,以了解我们的问题并创建一个响应 将回应变成现实世界中的行动 在今天的文章中,我将专注于计算机助手的文本到语音方面,让我们的计算机与我们交谈。如果一切顺利的话,我将在今后的文章中继续发展,使我们的助手变得更加复杂和有用。
找到一个文本到语音库 现在,用python做这样的事情有一个巨大的好处,那就是我们有大量的库可以使用,以快速完成事情。毕竟,如果我们从头开始开发其中的每一个部分,我们会在这里呆很久,以至于我们永远不会完成任何事情。让我们站在巨人的肩膀上,使用python软件包。
对于文本到语音来说,有几个Python包在人群中脱颖而出。
谷歌文本转语音(gTTs),以及 pyttsx3(我不知道那到底代表什么)。 谷歌文本转语音是一个Python库,用于连接谷歌翻译的文本转语音API。它具有谷歌自己的文本到语音应用程序的性能,但需要互联网连接才能使用。
另一方面,pyttsx3是一个文本到语音的转换库,它寻找预装在你的平台上的文本到语音引擎并使用它们。因此,它可以离线工作。
以下是它在主要操作系统上使用的文本转语音引擎。
Windows上的SAPI5 2. MacOSX上的NSSpeechSynthesizer
3.其他所有平台上的espeak
看看这两个,我不希望我的助手依赖谷歌或在线连接来工作。我更愿意使用pyttsx3,让一切都在我自己的机器上运行。
设置项目 现在,在我们开始运行一切之前,让我们设置我们的项目。
我们将通过文本编辑器和终端来完成一切。如果你不知道这意味着什么,那么我向人们推荐的文本编辑器是vscode,而终端通常内置在你的文本编辑器中(如vscode),或者是你电脑上的一个叫做 "终端 "或 "cmd "的程序。
现在,我想让你打开你的终端,改变目录到你保存项目的地方,例如,用
cd ~/projects
接下来,我们将需要创建一个目录来存储我们的项目。这完全取决于你,但我希望我的助手叫罗伯特。因此,我将创建一个名为 "robert "的新目录,然后用以下方式进入该目录
mkdir robert
cd robert
你可以把这个名字改成你喜欢的样子,比如说Brandy或者Kumar之类的。
接下来,我们需要让python启动并运行。为此,我们将需要安装Python 3。如果你没有安装,请参阅https://www.python.org/,了解安装说明。我们还需要创建一个Python虚拟环境。如果你想了解更多这方面的信息,请看这里,我最近的一篇文章。
假设你已经安装了Python,你可以在终端用以下方法验证
python3 --version
现在你应该能够在你的robert目录下创建你的python虚拟环境了。
python3 -m venv venv
注意,如果你安装的python的版本是python,python3.7或者python3.9或者其他的,那么就使用这个版本。
然后你应该能够用以下方法激活你的虚拟环境。
(在MacOS和Linux上)
source venv/bin/activate 或 (Windows)
venv/Scripts/activate
现在我们需要安装我们需要的软件包。为了做到这一点,我们将创建一个requirements.txt文件。进入你最喜欢的文本编辑器,例如vscode,或者,如果你很冒险的话,vim,打开你的 "robert "文件夹,现在创建这个文件。
对于我们的项目,到目前为止,我们只需要pyttsx3。很简单。让我们现在把它添加到我们的requirements.txt文件中,如下所示
接下来,让我们用pip来安装我们的需求
pip install -r requirements.txt
使用pyttsx3
现在一切都安装好了,让我们开始使用pyttsx3
。为了了解该怎么做,我查看了这里的文档。
然后,你可以通过创建一个名为speech.py的文件并添加以下代码来制作一个漂亮的例子。
import pyttsx3
engine = pyttsx3.init()
voice_num = 2
text_to_say = "Hello World! I am Robert!"
voices = engine.getProperty('voices')
engine.setProperty('voice', voices[voice_num].id)
engine.say(text_to_say)
engine.runAndWait()
我们首先导入pyttsx3以加载其所有的类和变量。然后我们初始化语音引擎,设置一个我们想要的声音,然后是我们想要说的文字。最后我们使用engine.runAndWait()
来说话。
然后我们可以在终端用下面的命令运行这个文件。
python speech.py
玩一玩这个,改变text_to_say
变量。你应该能说出任何你喜欢的东西。
酷!调整声音和速度
现在我们有了一些工作,让我们给我们的助手一些调整。Pyttsx3让我们调整声音和速度。
import pyttsx3
engine = pyttsx3.init()
# change voice
# getting details of current voice
voices = engine.getProperty('voices')
for i in range(len(voices)):
engine.setProperty('voice', voices[i].id)
# say something
engine.say("Pick me, pick me! My voice is number " + str(i))
engine.runAndWait()
在上面的例子中,你可以改变声音_num到一个不同的数字来获得一个新的声音。从我的测试来看,这似乎取决于平台(可能取决于你的平台有SAPI5,NSSpeechSynthesizer或espeak)。
我创建了这个怪物般的文件(当很多机器人的声音用奇怪的口音和你说话时,你就会明白为什么),以帮助你决定什么声音最适合你。一旦你找到了你喜欢的声音号码,把这个号码换成在voice_num变量中找到的号码。
接下来的步骤
恭喜你达到了终点。如果你有任何问题或只是想打招呼,请在下面发表。
如果你想进一步阅读,我建议你查看下面的链接,并在即将到来的文章中获得先机。
https://www.geeksforgeeks.org/python-text-to-speech-by-using-pyttsx3/
https://realpython.com/python-speech-recognition/
对于我的下一篇文章,我将专注于语音转文字,这样我们的助手就可以对我们的命令作出回应?。给我一个关注,以确保你不会错过它。
本文由 mdnice 多平台发布