用Python构建语音助手,第1部分

下午好。大概每个人都在看关于钢铁侠的电影,并想要一个类似于贾维斯的语音助手。在这篇文章中,我将向您展示如何从头开始制作这样的助手。我的程序将在Windows操作系统上以python 3编写。所以走吧!



实施



我们的助手将按照以下原则工作:



  1. 不断“听”麦克风
  2. 在Google上识别单词
  3. 执行命令或响应


1)语音合成



首先,我们将在Windows系统中安装俄语语音。为此,请点击链接并在SAPI 5->俄语部分中下载声音。有4种声音,您可以选择任何一种。安装并继续。



我们需要提供pyttsx3库进行语音合成:



pip install pyttsx3


然后,您可以运行测试程序并检查其是否正常运行。



import pyttsx3

text = '- '
tts = pyttsx3.init()
rate = tts.getProperty('rate') # 
tts.setProperty('rate', rate-40)

volume = tts.getProperty('volume') # 
tts.setProperty('volume', volume+0.9)

voices = tts.getProperty('voices')

#    
tts.setProperty('voice', 'ru') 

#    
for voice in voices:
    if voice.name == 'Anna':
        tts.setProperty('voice', voice.id)

tts.say(text)
tts.runAndWait()


2)语音识别



有很多语音识别工具,但是它们都是付费的。因此,我尝试为我的项目找到免费的解决方案并找到了它!这是speech_recognition库。



pip install SpeechRecognition


我们还需要PyAudio库与麦克风一起使用。



pip install PyAudio


某些人在安装PyAudio时遇到问题,因此您应该点击此链接并下载所需的PyAudio版本。然后进入控制台:



pip instal   


然后,您运行测试程序。但是在此之前,您必须将其中的device_index = 1改成您的麦克风索引值。您可以使用以下程序找出麦克风索引:



import speech_recognition as sr
for index, name in enumerate(sr.Microphone.list_microphone_names()):
    print("Microphone with name \"{1}\" found for `Microphone(device_index={0})`".format(index, name))


语音识别测试:



import speech_recognition as sr

def record_volume():
    r = sr.Recognizer()
    with sr.Microphone(device_index = 1) as source:
        print('.')
        r.adjust_for_ambient_noise(source, duration=0.5) #  
        print('...')
        audio = r.listen(source)
    print('.')
    try:
        query = r.recognize_google(audio, language = 'ru-RU')
        text = query.lower()
        print(f' : {query.lower()}')
    except:
        print('Error')

while True:
    record_volume()


如果一切正常,请继续。



如果您只想让助手与您交谈(没有AI),则可以使用Google的免费DialogFlow工具来完成。登录后,您会看到一个屏幕,您可以在其中创建您的第一个机器人。单击创建代理。我们为机器人命名(代理名称),选择语言(默认语言),然后单击创建。该机器人已创建!



要为不同的问题添加新的答案,您需要创建一个新的意图。为此,请在“意图”部分中,单击“创建意图”。我们填写“标题”和“培训”短语,然后填写答案。单击保存。就这样。



要在python中控制机器人,您需要编写以下代码。在我的程序中,机器人发出了所有答案。



import apiai, json, re
import pyttsx3
import speech_recognition as sr

tts = pyttsx3.init()
rate = tts.getProperty('rate')
tts.setProperty('rate', rate-40)
volume = tts.getProperty('volume')
tts.setProperty('volume', volume+0.9)
voices = tts.getProperty('voices')
tts.setProperty('voice', 'ru')
for voice in voices:
    if voice.name == 'Anna':
        tts.setProperty('voice', voice.id)

def record_volume():
    r = sr.Recognizer()
    with sr.Microphone(device_index = 1) as source:
        print('.')
        r.adjust_for_ambient_noise(source, duration=1) 
        print('...')
        audio = r.listen(source)
    print('.')
    try:
        query = r.recognize_google(audio, language = 'ru-RU')
        text = query.lower()
        print(f' : {query.lower()}')
        textMessage( text )
    except:
        print(' .')

def talk( text ):
    tts.say( text )
    tts.runAndWait()

def textMessage( text ):
    request = apiai.ApiAI(' ').text_request() #  API  Dialogflow
    request.lang = 'ru' #      
    request.session_id = ' id' # ID   (,    )
    request.query = text #        
    responseJson = json.loads(request.getresponse().read().decode('utf-8'))
    response = responseJson['result']['fulfillment']['speech'] #  JSON   
    #      -  ,   -    
    if response:
        request.audio_output = response
        talk(response)
    else:
        talk('.     .')

while True:
    record_volume()


今天就这些。在下一部分中,我将告诉您如何制作智能机器人。这样他不仅可以回答问题,还可以做点什么。



All Articles