找回密码
 会员注册
查看: 31|回复: 0

第三篇传奇开心果系列Python的文本和语音相互转换库技术点案例示例:pyttsx3实现语音助手经典案例

[复制链接]

2

主题

0

回帖

7

积分

新手上路

积分
7
发表于 2024-9-12 22:01:55 | 显示全部楼层 |阅读模式
传奇开心果短博文系列系列短博文目录Python的文本和语音相互转换库技术点案例示例系列短博文目录一、项目背景和目标二、雏形示例代码三、扩展思路介绍四、与其他库和API集成示例代码五、自定义语音示例代码六、多语言支持示例代码七、语音控制应用程序示例代码八、文本转语音通知示例代码九、语音交互界面示例代码十、实现更复杂交互界面示例代码十一、归纳总结系列短博文目录Python的文本和语音相互转换库技术点案例示例系列短博文目录一、项目背景和目标当今社会人工智能机器学习在我国方兴未艾,语音助手无处不在大显神威。大到歼20战斗机语音辅助操控,中到家用小汽车语音辅助操控,小到智能家居语音操控、小爱同学操控音响设备等,可以说语音助手已经深入工作、生活和社会的各个方面。pyttsx是一个Python库,用于实现文本到语音的转换。它提供了一个使用简单的API,可以很方便地让你的Python程序实现生成语音输出的语音助手。二、雏形示例代码下面是一个简单的语音助手示例代码:安装pyttsx库:pipinstallpyttsx1导入pyttsx:importpyttsx1创建pyttsx的引擎对象:engine=pyttsx.init()1设置语音助手的属性(可选):engine.setProperty('rate',150)#设置语速(默认为200)engine.setProperty('volume',0.8)#设置音量(范围为0.0到1.0)12将文本转换为语音并播放:engine.say("你好,我是语音助手")engine.runAndWait()12这段代码会将文本“你好,我是语音助手”转换为语音并播放出来。如果你想将文本保存为音频文件,可以使用save_to_file方法:engine.save_to_file("你好,我是语音助手","output.mp3")engine.runAndWait()12这段代码会将文本“你好,我是语音助手”转换为语音,并保存为名为“output.mp3”的音频文件。这只是一个简单的示例,pyttsx还提供了其他功能,如设置语言、获取可用的语音引擎等。你可以查看pyttsx的官方文档以获取更多详细信息和示例代码:https://pyttsx.readthedocs.io/三、扩展思路介绍当你熟悉了基本的pyttsx库的用法后,你可以进一步扩展你的语音助手的功能。以下是一些扩展思路:与其他库和API集成:将pyttsx与其他库和API结合使用,以增强语音助手的功能。例如,你可以使用speech_recognition库来实现语音识别,将用户的语音输入转换为文本,并使用pyttsx将回应转换为语音输出。自定义语音:使用pyttsx的setProperty方法来调整语音助手的属性,例如语速、音量和音调,以使语音更加自然和适合用户的喜好。多语言支持:pyttsx支持多种语言和语音引擎。你可以通过设置pyttsx的setProperty方法来切换语言,从而实现多语言支持的语音助手。语音控制应用程序:结合其他库和框架,你可以创建一个可以通过语音控制的应用程序。例如,你可以使用pyttsx和pyautogui库来实现语音控制鼠标和键盘,从而实现语音导航和操作。文本转语音通知:使用pyttsx将文本转换为语音,以实现通知功能。你可以将系统的提醒、日程安排、新闻等文本内容转换为语音,并通过语音播放给用户。语音交互界面:创建一个交互式的语音界面,让用户可以通过语音与你的应用程序进行交互。你可以使用pyttsx结合其他库和框架,例如pyaudio和speech_recognition,来实现语音输入和输出的交互式界面。这些是一些扩展思路,你可以根据你的需求和兴趣进一步探索和扩展你的语音助手的功能。记得查阅相关文档和示例代码,以更好地理解和使用相关库和API。四、与其他库和API集成示例代码当将pyttsx与speech_recognition库结合使用时,你可以实现一个能够接收语音输入并以语音回应的语音助手。以下是一个示例代码:importspeech_recognitionassrimportpyttsx3#创建语音识别器对象recognizer=sr.Recognizer()#创建语音合成引擎对象engine=pyttsx3.init()#定义语音助手的回应函数defrespond(text):print("助手:",text)engine.say(text)engine.runAndWait()#语音助手的主循环whileTrue:try:#使用麦克风录音withsr.Microphone()assource:print("请说话:")audio=recognizer.listen(source)#识别语音输入text=recognizer.recognize_google(audio,language="zh-CN")print("用户:",text)#根据用户输入作出回应if"你好"intext:respond("你好!我是语音助手。")elif"再见"intext:respond("再见!祝你有美好的一天!")breakelse:respond("抱歉,我不理解你的意思。")exceptsr.UnknownValueError:print("抱歉,无法识别你的语音。")exceptsr.RequestError:print("抱歉,无法连接到语音识别服务。")12345678910111213141516171819202122232425262728293031323334353637383940这段代码使用speech_recognition库来监听麦克风输入,并使用Google语音识别服务将语音转换为文本。然后,根据用户的输入作出相应的回应,使用pyttsx将回应转换为语音输出。在这个示例中,语音助手会回应"你好!我是语音助手。"当用户说"你好"时,回应"再见!祝你有美好的一天!“当用户说"再见"时,然后退出程序。对于其他用户输入,语音助手会回应"抱歉,我不理解你的意思。”请确保已安装speech_recognition和pyttsx3库,并根据需要调整语音助手的回应逻辑。你还可以根据需要添加其他功能,例如语音控制、多语言支持等。五、自定义语音示例代码当使用pyttsx3的setProperty方法来自定义语音属性时,你可以调整语音助手的语速、音量和音调等属性,以使语音更加自然和符合用户的喜好。以下是一个示例代码:importpyttsx3#创建语音合成引擎对象engine=pyttsx3.init()#获取当前语音属性rate=engine.getProperty('rate')#语速volume=engine.getProperty('volume')#音量pitch=engine.getProperty('pitch')#音调#设置新的语音属性engine.setProperty('rate',150)#设置语速为150engine.setProperty('volume',0.8)#设置音量为0.8engine.setProperty('pitch',1.2)#设置音调为1.2#定义语音助手的回应函数defrespond(text):print("助手:",text)engine.say(text)engine.runAndWait()#测试自定义语音属性respond("你好!我是语音助手。")#恢复默认语音属性engine.setProperty('rate',rate)#恢复默认语速engine.setProperty('volume',volume)#恢复默认音量engine.setProperty('pitch',pitch)#恢复默认音调#测试恢复默认语音属性respond("你好!我是语音助手。")12345678910111213141516171819202122232425262728293031在这个示例中,我们首先创建了一个pyttsx3的语音合成引擎对象。然后,通过getProperty方法获取当前的语音属性,包括语速、音量和音调。接下来,使用setProperty方法设置新的语音属性,例如将语速设置为150,音量设置为0.8,音调设置为1.2。然后,定义了一个回应函数respond,该函数会打印回应文本并使用语音合成引擎进行语音输出。在示例中,我们先测试了使用自定义语音属性的回应,然后恢复了默认的语音属性,并再次进行了回应测试。你可以根据需要调整语音属性的值,以使语音更加自然和适合用户的喜好。请注意,具体的语音属性值可能因系统和语音引擎而异。你可以尝试不同的值来找到最适合的设置。六、多语言支持示例代码pyttsx3支持多种语言和语音引擎,你可以通过设置setProperty方法来切换语言,从而实现多语言支持的语音助手。以下是一个示例代码:importpyttsx3#创建语音合成引擎对象engine=pyttsx3.init()#获取当前语音属性voices=engine.getProperty('voices')#打印可用的语音列表print("可用的语音列表:")forvoiceinvoices:print("名称:",voice.name)print("ID:",voice.id)print("语言:",voice.languages)print("性别:",voice.gender)print("")#设置新的语音属性(切换语言)engine.setProperty('voice',voices[1].id)#设置语音为第二个可用语音#定义语音助手的回应函数defrespond(text):print("助手:",text)engine.say(text)engine.runAndWait()#测试多语言支持respond("Hello!Iamamultilingualvoiceassistant.")respond("你好!我是一个多语言语音助手。")#恢复默认语音属性(切换回默认语言)engine.setProperty('voice',voices[0].id)#设置语音为第一个可用语音#测试恢复默认语音属性respond("Hello!Iamamultilingualvoiceassistant.")respond("你好!我是一个多语言语音助手。")123456789101112131415161718192021222324252627282930313233343536在这个示例中,我们首先创建了一个pyttsx3的语音合成引擎对象,并使用getProperty方法获取当前可用的语音列表。然后,我们打印了每个语音的名称、ID、语言和性别等信息。接下来,使用setProperty方法将语音属性设置为第二个可用语音,以切换语言。你可以根据需要选择其他可用的语音。然后,定义了一个回应函数respond,该函数会打印回应文本并使用语音合成引擎进行语音输出。在示例中,我们先测试了使用第二个可用语音的回应,然后恢复了默认的语音属性,再次进行了回应测试。你可以根据需要选择合适的语音,以实现多语言支持的语音助手。请注意,可用的语音和语言取决于你的系统和安装的语音引擎。七、语音控制应用程序示例代码要创建一个可以通过语音控制的应用程序,你可以结合使用pyttsx3和其他库和框架来实现不同的功能。下面是一个示例代码,演示了如何使用pyttsx3和pyautogui库来实现语音控制鼠标和键盘:importpyttsx3importspeech_recognitionassrimportpyautogui#创建语音合成引擎对象engine=pyttsx3.init()#创建语音识别器对象recognizer=sr.Recognizer()#定义语音助手的回应函数defrespond(text):print("助手:",text)engine.say(text)engine.runAndWait()#定义语音控制函数defvoice_control():withsr.Microphone()assource:print("请说话...")audio=recognizer.listen(source)try:#使用语音识别器将语音转换为文本text=recognizer.recognize_google(audio,language='zh-CN')print("你说:",text)#根据识别到的文本执行相应的操作if"向上"intext:pyautogui.move(0,-100,duration=0.5)#向上移动鼠标elif"向下"intext:pyautogui.move(0,100,duration=0.5)#向下移动鼠标elif"向左"intext:pyautogui.move(-100,0,duration=0.5)#向左移动鼠标elif"向右"intext:pyautogui.move(100,0,duration=0.5)#向右移动鼠标elif"点击"intext:pyautogui.click()#点击鼠标左键elif"退出"intext:respond("再见!")returnelse:respond("抱歉,我无法理解你的指令。")exceptsr.UnknownValueError:respond("抱歉,无法识别你说的话。")exceptsr.RequestError:respond("抱歉,无法连接到语音识别服务。")#继续监听语音输入voice_control()#启动语音控制respond("你好!我是语音助手。请告诉我你想要做什么。")voice_control()12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455在这个示例中,我们首先创建了一个pyttsx3的语音合成引擎对象和一个speech_recognition的语音识别器对象。然后,定义了一个回应函数respond,该函数会打印回应文本并使用语音合成引擎进行语音输出。接下来,定义了一个语音控制函数voice_control,该函数使用语音识别器监听麦克风输入,并将语音转换为文本。根据识别到的文本,执行相应的操作,例如移动鼠标、点击鼠标等。在示例中,我们定义了一些简单的指令,如“向上”、“向下”、“向左”、“向右”、“点击”等。你可以根据需要扩展指令和相应的操作。最后,启动语音控制,语音助手会打招呼并等待你的指令。你可以说出相应的指令,语音助手会执行对应的操作。请注意,此示例仅演示了如何结合pyttsx3和pyautogui库实现语音控制鼠标和键盘的功能。根据你的需求,你可以结合其他库和框架来实现更复杂的语音控制应用程序。八、文本转语音通知示例代码pyttsx3库可以将文本转换为语音,实现通知功能。下面是一个示例代码,演示了如何使用pyttsx3将文本内容转换为语音并进行播放:importpyttsx3#创建语音合成引擎对象engine=pyttsx3.init()#定义文本转语音函数deftext_to_speech(text):engine.say(text)engine.runAndWait()#定义通知函数defnotify(message):print("通知:",message)text_to_speech(message)#示例用法notify("这是一条通知消息。")notify("你的日程安排已更新。")notify("以下是今天的新闻摘要:")notify("这是一条很长的通知消息,可以包含多个句子和段落。")#关闭语音合成引擎engine.stop()1234567891011121314151617181920212223在这个示例中,我们首先创建了一个pyttsx3的语音合成引擎对象。然后,定义了一个文本转语音函数text_to_speech,该函数使用语音合成引擎将文本转换为语音并进行播放。接下来,定义了一个通知函数notify,该函数接受一个文本消息作为参数,并打印通知消息并通过语音播放。在示例中,我们使用notify函数演示了几个通知消息的例子。你可以根据需要调用notify函数,将不同的文本内容转换为语音进行通知。最后,我们通过调用engine.stop()来关闭语音合成引擎。请注意,使用pyttsx3进行文本转语音时,可以根据需要设置语音的属性,如语速、音量等。你可以使用engine.setProperty方法来设置这些属性。例如,engine.setProperty('rate',150)可以设置语速为150字符每分钟。九、语音交互界面示例代码要创建一个交互式的语音界面,可以结合使用pyttsx3、pyaudio和speech_recognition等库来实现语音输入和输出的功能。下面是一个示例代码,演示了如何创建一个简单的语音交互界面:importpyttsx3importspeech_recognitionassr#创建语音合成引擎对象engine=pyttsx3.init()#创建语音识别器对象recognizer=sr.Recognizer()#定义语音助手的回应函数defrespond(text):print("助手:",text)engine.say(text)engine.runAndWait()#定义语音交互函数defvoice_interaction():withsr.Microphone()assource:print("请说话...")audio=recognizer.listen(source)try:#使用语音识别器将语音转换为文本text=recognizer.recognize_google(audio,language='zh-CN')print("你说:",text)#根据用户输入的文本进行相应的回应if"你好"intext:respond("你好!有什么我可以帮助你的吗?")elif"时间"intext:#这里可以调用其他库或函数获取当前时间并进行回应respond("现在是晚上8点。")elif"退出"intext:respond("再见!")returnelse:respond("抱歉,我无法理解你的指令。")exceptsr.UnknownValueError:respond("抱歉,无法识别你说的话。")exceptsr.RequestError:respond("抱歉,无法连接到语音识别服务。")#继续语音交互voice_interaction()#启动语音交互respond("你好!我是语音助手。有什么我可以帮助你的吗?")voice_interaction()12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849在这个示例中,我们首先创建了一个pyttsx3的语音合成引擎对象和一个speech_recognition的语音识别器对象。然后,定义了一个回应函数respond,该函数会打印回应文本并使用语音合成引擎进行语音输出。接下来,定义了一个语音交互函数voice_interaction,该函数使用语音识别器监听麦克风输入,并将语音转换为文本。根据用户输入的文本,执行相应的回应。在示例中,我们定义了一些简单的指令,如“你好”和“时间”。根据用户的指令,语音助手会进行相应的回应。你可以根据需要扩展指令和相应的操作。最后,启动语音交互,语音助手会打招呼并等待用户的指令。你可以通过语音与语音助手进行交互。请注意,这个示例代码只是一个简单的交互式语音界面的演示。你可以根据自己的需求和应用场景,扩展和定制这个代码,结合其他库和框架实现更复杂的语音交互功能。十、实现更复杂交互界面示例代码当扩展和定制语音交互功能时,你可以根据自己的需求和应用场景,结合其他库和框架来实现更复杂的功能。以下是一个示例代码,展示了如何使用pyttsx3、speech_recognition和wikipedia库来创建一个语音交互的维基百科助手:importpyttsx3importspeech_recognitionassrimportwikipedia#创建语音合成引擎对象engine=pyttsx3.init()#创建语音识别器对象recognizer=sr.Recognizer()#定义语音助手的回应函数defrespond(text):print("助手:",text)engine.say(text)engine.runAndWait()#定义语音交互函数defvoice_interaction():withsr.Microphone()assource:print("请说话...")audio=recognizer.listen(source)try:#使用语音识别器将语音转换为文本text=recognizer.recognize_google(audio,language='zh-CN')print("你说:",text)#根据用户输入的文本进行相应的回应if"你好"intext:respond("你好!有什么我可以帮助你的吗?")elif"维基百科"intext:query=text.replace("维基百科","").strip()try:#使用维基百科库获取相关信息summary=wikipedia.summary(query,sentences=2)respond(summary)exceptwikipedia.exceptions.DisambiguationErrorase:respond("请提供更具体的查询内容。")exceptwikipedia.exceptions.PageErrorase:respond("抱歉,找不到相关信息。")elif"退出"intext:respond("再见!")returnelse:respond("抱歉,我无法理解你的指令。")exceptsr.UnknownValueError:respond("抱歉,无法识别你说的话。")exceptsr.RequestError:respond("抱歉,无法连接到语音识别服务。")#继续语音交互voice_interaction()#启动语音交互respond("你好!我是维基百科助手。有什么我可以帮助你的吗?")voice_interaction()123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657在这个示例中,我们引入了wikipedia库,以便通过维基百科获取相关信息。当用户输入包含“维基百科”的指令时,我们使用wikipedia.summary函数来获取相关信息的摘要,并将其作为回应进行语音输出。你可以根据自己的需求和应用场景,扩展和定制这个代码。例如,你可以使用其他库来获取天气信息、新闻摘要等,并根据用户的指令进行相应的回应。请注意,使用维基百科库时,可能会遇到一些异常情况,如歧义性错误或页面错误。在示例中,我们使用了try-except块来处理这些异常情况,并作出相应的回应。希望这个示例代码能够帮助你扩展和定制语音交互功能!十一、归纳总结当使用pyttsx3库实现语音助手时,以下是一些关键的知识点:安装pyttsx3库:可以使用pip命令来安装pyttsx3库,例如pipinstallpyttsx3。初始化语音合成引擎:使用pyttsx3.init()函数来创建一个语音合成引擎对象。可以通过调用该对象的方法来进行语音合成。设置语音合成属性:可以使用engine.setProperty(property,value)方法来设置语音合成的属性。例如,可以设置语速、音量等属性。语音合成和播放:使用engine.say(text)方法将文本转换为语音。然后,使用engine.runAndWait()方法来播放语音。支持多种语音引擎:pyttsx3支持多种语音合成引擎,如SAPI5、nsss、espeak等。可以通过pyttsx3.init(driverName)指定要使用的语音引擎。获取可用的语音引擎列表:可以使用pyttsx3.init()函数的engine.getProperty('voices')方法来获取可用的语音引擎列表。可以根据需要选择合适的语音引擎。设置语音引擎:可以使用engine.setProperty('voice',voice_id)方法来设置要使用的语音引擎。可以将voice_id设置为语音引擎列表中的一个元素。控制语音合成的事件和回调:pyttsx3提供了一些事件和回调函数,可以用于控制语音合成的过程。例如,可以使用engine.connect('started',callback_function)方法来注册一个回调函数,在语音合成开始时触发。异步语音合成:pyttsx3支持异步语音合成,可以使用engine.startLoop()和engine.endLoop()方法来控制异步合成的循环。关闭语音合成引擎:在程序结束时,可以使用engine.stop()和engine.shutdown()方法来关闭语音合成引擎。这些是使用pyttsx3库实现语音助手时的一些重要知识点。通过了解和掌握这些知识点,你可以更好地使用pyttsx3库来实现语音合成的功能。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 会员注册

本版积分规则

QQ|手机版|心飞设计-版权所有:微度网络信息技术服务中心 ( 鲁ICP备17032091号-12 )|网站地图

GMT+8, 2024-12-25 13:03 , Processed in 0.331142 second(s), 25 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表