Seperti yang pernah kamu dengar sebelumnya, Virtual Assistant ialah asisten virtual yang bisa memahami perintah suara yang dikatakan oleh pengguna dan mengeksekusi program sesuai perintah yang diminta mereka.
Misalnya saja kalau kamu ingin mencari tahu lokasi “restoran keluarga terdekat” maka Virtual Assistant akan menampilkan hasil lokasi restoran berdasarkan lokasi terdekat kamu saat ini.
Beberapa contoh Virtual Assistant yang sudah dikenal banyak orang diantaranya Google Voice dari perusahaan Google, Cortana dari Microsoft, dan Siri dari Apple. Ketiganya merupakan barisan terdepan dalam pengembangan Virtual Assistant saat ini.
Untuk kamu yang ingin mulai mencoba membangun Virtual Assistant, tenang saja. Hal ini tidak sulit, kamu hanya perlu memahami bahasa pemrograman Phyton dan bisa langsung membuat Virtual Assistant versi sederhana
Membuat virtual Assistant Sederhana
Pada program ini kamu akan belajar cara membuat versi simpelnya saja. Code yang akan ditampilkan pun hanya sebatas versi default yang bisa kamu edit bebas sesuka hati nanti.
Perintah yang akan dibuat nantinya meliputi :
- Mengatakan ucapan sapa secara acak kepada pengguna, tentu jika si pengguna menggunakan kata sapaan yang sudah diprogram.
- Mengambil data tanggal (Date) untuk si pengguna.
- Mengambil data waktu (Time) untuk si pengguna.
- Mengambil data informasi tentang seseorang untuk si pengguna.
Sebagai contoh, ketika si pengguna mengucapkan “Pukul berapa Saat ini ?”, Virtual Assistant nantinya akan menjawab pertanyaan tersebut.
Oleh karena itu, penting untukmu untuk membuat terlebih dahulu rekaman suara(mp3) yang berisi jawaban dari pertanyaan yang ingin kamu program nanti.
Pertama-tama, kamu perlu menginstall beberapa Package pyadio SpeechRecognition gTTS dan wikipedia .
pip install pyaudio
pip install SpeechRecognition
pip install gTTS
pip install wikipedia
Mengimport Libraries & Packages
Selanjutnya kamu harus mengimport Libraries warnings dan speech_recognition yang akan digunakan untuk menangkap dan mengenali suara pengguna.
Libraries os akan memungkinkan kita untuk berinteraksi dengan Sistem Operasi. Libraries gtts akan membantu mengonversi teks ke ucapan. Libraries wikipedia akan memungkinkan kita mendapatkan informasi tentang seseorang dari Wikipedia.
Libraries datetime akan memungkinkan kita untuk mendapatkan tanggal dan waktu saat ini. Libraries calendar akan memungkinkan kita mendapatkan hari dalam seminggu, dan Libraries random akan digunakan untuk pengacakan :
# Import the libraries
import speech_recognition as sr
import os
from gtts import gTTS
import datetime
import warnings
import calendar
import random
import wikipedia
Kemudian kita akan mengabaikan semua pesan warning apapun yang mungkin muncul ketika mengeksekusi program ini dengan perintah berikut :
# Ignore any warning messages
warnings.filterwarnings(‘ignore’)
Membuat Helpful Function
Helpful Function nantinya digunakan agar tampilan code terlihat lebih rapih dan mengeksekusi perintah tertentu.
Pertama kita membutuhkan fungsi yang dapat menerima audio (perintah suara) dan mengenali ucapan, kemudian mengembalikan ucapan itu sebagai string (teks). Mari kita sebut fungsi ini recordAudio ().
# Record audio and return it as a string
def recordAudio():
# Record the audio
r = sr.Recognizer()
with sr.Microphone() as source:
print(‘Say something!’)
audio = r.listen(source)
# Speech recognition using Google’s Speech Recognition
data = ”
try:
data = r.recognize_google(audio)
print(‘You said: ‘ + data)
except sr.UnknownValueError:
print(‘Google Speech Recognition could not understand’)
except sr.RequestError as e:
print(‘Request error from Google Speech Recognition’) return data
Mari buat sebuah fungsi untuk program untuk merespon kembali ke pengguna dengan suara dan menyebutnya asistenResponse (). Fungsi ini akan mengambil string (teks) dan mengubahnya menjadi audio. Ia juga akan meminta fungsi ini mencetak teks ke layar untuk tujuan pengujian.
# Function to get the virtual assistant response
def assistantResponse(text):
print(text) # Convert the text to speech
myobj = gTTS(text=text, lang=’en’, slow=False)
# Save the converted audio to a file
myobj.save(‘assistant_response.mp3’) # Play the converted file
os.system(‘start assistant_response.mp3’)
Selanjutnya, kita akan membuat fungsi untuk mengambil beberapa teks dan memeriksa apakah kata bangun diberikan dalam teks itu. Untuk program ini saya membuat dua kata bangun “oke komputer” dan “hai komputer”, mirip dengan kata bangun asisten Google “hai Google” dan “oke Google”.
Jika kata bangun terdeteksi dari teks maka fungsi akan mengembalikan True jika tidak maka akan mengembalikan False.
# A function to check for wake word(s)
def wakeWord(text):
WAKE_WORDS = [‘hey computer’, ‘okay computer’]
text = text.lower() # Convert the text to all lower case words # Check to see if the users command/text contains a wake word
for phrase in WAKE_WORDS:
if phrase in text:
return True # If the wake word was not found return false
return False
Membuat fungsi untuk mengembalikan tanggal hari ini sebagai string. Misalnya, ia akan mengembalikan “Hari ini Senin tanggal 21 Oktober” jika hari ini memang Senin 21 Oktober. Mari kita panggil fungsi ini getDate ().
def getDate():
now = datetime.datetime.now()
my_date = datetime.datetime.today()
weekday = calendar.day_name[my_date.weekday()]# e.g. Monday
monthNum = now.month
dayNum = now.day
month_names = [‘January’, ‘February’, ‘March’, ‘April’, ‘May’,
‘June’, ‘July’, ‘August’, ‘September’, ‘October’, ‘November’,
‘December’]
ordinalNumbers = [‘1st’, ‘2nd’, ‘3rd’, ‘4th’, ‘5th’, ‘6th’,
‘7th’, ‘8th’, ‘9th’, ’10th’, ’11th’, ’12th’,
’13th’, ’14th’, ’15th’, ’16th’, ’17th’,
’18th’, ’19th’, ’20th’, ’21st’, ’22nd’,
’23rd’, ’24th’, ’25th’, ’26th’, ’27th’,
’28th’, ’29th’, ’30th’, ’31st’]
return ‘Today is ‘ + weekday + ‘ ‘ + month_names[monthNum – 1] + ‘ the ‘ + ordinalNumbers[dayNum – 1] + ‘.’
Selanjutnya, kita akan membuat fungsi yang menerima teks dan mengembalikan respons salam acak sebagai teks kepada pengguna, jika pengguna mengucapkan masukan salam seperti ‘halo’ atau ‘hai’ misalnya fungsi tersebut akan mengembalikan salam acak seperti ‘apa kabar ‘. Fungsi ini akan disebut greeting ().
# Function to return a random greeting response
def greeting(text):
# Greeting Inputs
GREETING_INPUTS = [‘hi’, ‘hey’, ‘hola’, ‘greetings’, ‘wassup’, ‘hello’] # Greeting Response back to the user
GREETING_RESPONSES = [‘howdy’, ‘whats good’, ‘hello’, ‘hey there’] # If the users input is a greeting, then return random response
for word in text.split():
if word.lower() in GREETING_INPUTS:
return random.choice(GREETING_RESPONSES) + ‘.’ # If no greeting was detected then return an empty string
return ”
Terakhir namun tidak kalah pentingnya kita akan membuat fungsi untuk mendapatkan nama depan dan belakang seseorang dari teks setelah mendeteksi perintah kunci, ‘siapa’.
Setelah kami mendeteksi kata ‘siapa’ diikuti dengan kata ‘adalah’ maka kami akan mengembalikan dua kata berikutnya sebagai satu string (dua kata berikutnya haruslah nama depan orang tersebut diikuti dengan nama belakang orang itu).
Misalnya jika pengguna mengatakan ‘Who is LeBron James?’, Maka fungsi tersebut akan mengambil teks tersebut dan hanya mengembalikan ‘LeBron James’. Kami akan menggunakan fungsi ini nanti untuk mendapatkan ringkasan dua kalimat tentang orang tersebut dari Wikipedia. Fungsi ini akan disebut getPerson ()
# Function to get a person first and last name
def getPerson(text):
wordList = text.split()# Split the text into a list of words for i in range(0, len(wordList)):
if i + 3 <= len(wordList) – 1 and wordList[i].lower() == ‘who’ and wordList[i + 1].lower() == ‘is’:
return wordList[i + 2]+ ‘ ‘ + wordList[i + 3]
Membuat Program Utama
Semua asisten virtual paling populer (Asisten Google, Amazon Alexa, & Apel Siri) terus mendengarkan percakapan kamu dan menunggu untuk menjalankan perintah hanya setelah mendengar kata bangun (Wake Words) seperti ‘Oke Google’, ‘Alexa’, atau ‘Hai Siri’.
Ini berarti kita harus memiliki program yang secara konsisten mendengarkan kata bangun, jadi kita akan membutuhkan putaran terus menerus yang berjalan selamanya untuk merekam audio.
Setelah kata bangun diucapkan, kita akan memeriksa untuk melihat apakah pengguna mengucapkan salam, ‘tanggal’, ‘waktu’, atau ‘siapa’, dan meminta komputer merespons sesuai dengan audio.
while True:
# Record the audio
text = recordAudio()
response = ” #Empty response string
# Checking for the wake word/phrase
if (wakeWord(text) == True):
# Check for greetings by the user
response = response + greeting(text) # Check to see if the user said date
if (‘date’ in text):
get_date = getDate()
response = response + ‘ ‘ + get_date # Check to see if the user said time
if(‘time’ in text):
now = datetime.datetime.now()
meridiem = ”
if now.hour >= 12:
meridiem = ‘p.m’ #Post Meridiem (PM)
hour = now.hour – 12
else:
meridiem = ‘a.m’#Ante Meridiem (AM)
hour = now.hour # Convert minute into a proper string
if now.minute < 10:
minute = ‘0’+str(now.minute)
else:
minute = str(now.minute) response = response + ‘ ‘+ ‘It is ‘+ str(hour)+ ‘:’+minute+’ ‘+meridiem+’ .’
# Check to see if the user said ‘who is’
if (‘who is’ in text):
person = getPerson(text)
wiki = wikipedia.summary(person, sentences=2)
response = response + ‘ ‘ + wiki
# Assistant Audio Response
assistantResponse(response)
Selamat, kita sudah berhasil membuat program Virtual Assistant Sederhana.
Sumber : https://medium.com/@randerson112358/build-a-virtual-assistant-using-python-2b0f78e68b94