Membangun asisten suara dengan Python, bagian 1

Selamat sore. Mungkin, semua orang menonton film tentang manusia besi dan menginginkan asisten suara yang mirip dengan Jarvis. Dalam posting ini, saya akan menunjukkan kepada Anda cara membuat asisten seperti itu dari awal. Program saya akan ditulis dengan python 3 pada sistem operasi windows. Jadi ayo pergi!



Implementasi



Asisten kami akan bekerja sesuai dengan prinsip berikut:



  1. Terus-menerus "mendengarkan" mikrofon
  2. Kenali kata-kata di google
  3. Jalankan perintah, atau tanggapi


1) Sintesis ucapan



Pertama, kita akan menginstal suara Rusia di sistem windows. Untuk melakukan ini, ikuti tautan dan unduh suara di SAPI 5 -> bagian Rusia. Ada 4 suara, Anda bisa memilih mana yang Anda suka. Instal dan lanjutkan.



Kami perlu menyediakan perpustakaan pyttsx3 untuk sintesis ucapan:



pip install pyttsx3


Kemudian Anda dapat menjalankan program pengujian dan memeriksa apakah itu berjalan dengan benar.



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) Pengenalan Pidato



Ada banyak alat pengenalan suara, tetapi semuanya berbayar. Jadi saya mencoba menemukan solusi gratis untuk proyek saya dan menemukannya! Ini adalah pustaka speech_recognition.



pip install SpeechRecognition


Kami juga membutuhkan pustaka PyAudio untuk bekerja dengan mikrofon.



pip install PyAudio


Beberapa orang mengalami masalah saat menginstal PyAudio, jadi Anda harus mengikuti tautan ini dan mengunduh versi PyAudio yang Anda butuhkan. Kemudian masuk ke dalam konsol:



pip instal   


Kemudian Anda menjalankan program pengujian. Tetapi sebelum itu, Anda harus memperbaiki device_index = 1 di dalamnya ke nilai indeks mikrofon Anda. Anda dapat mengetahui indeks mikrofon menggunakan program ini:



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))


Tes pengenalan ucapan:



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()


Jika semuanya baik-baik saja, lanjutkan.



Jika Anda ingin asisten hanya berbicara dengan Anda (tanpa AI), ini dapat dilakukan menggunakan alat DialogFlow gratis dari Google. Setelah Anda masuk, Anda akan melihat layar di mana Anda sudah dapat membuat bot pertama Anda. Klik Buat agen. Kami datang dengan nama untuk bot (nama Agen), pilih bahasa (Bahasa Default) dan klik Buat. Bot telah dibuat!



Untuk menambahkan jawaban baru ke berbagai pertanyaan, Anda perlu membuat maksud baru. Untuk melakukan ini, di bagian maksud, klik Buat maksud. Kami mengisi kolom "Judul" dan frase Pelatihan, lalu jawabannya. Klik Simpan. Itu saja.



Untuk mengontrol bot di python, Anda perlu menulis kode berikut. Dalam program saya, bot menyuarakan semua jawaban.



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()


Sekian untuk hari ini. Di bagian selanjutnya saya akan memberi tahu Anda cara membuat bot pintar, yaitu. sehingga dia tidak hanya bisa menjawab, tapi juga melakukan sesuatu.



All Articles