Ý Tưởng:
Tạo ra một trợ lý ảo có thể giao tiếp được với con người bằng những câu hỏi - trả lời đã được lên kịch bản sẵn; Đó là bước đầu để tạo ra một AI Trợ Lý Ảo riêng cho mình.
Yêu Cầu:
- Cài đặt môi trường cũng như sử dụng Python3
- Máy tính có Microphone và Speaker
Diagram:
Diagram Trợ Lý Ảo Đơn Giản Với Python |
Thực Hiện:
Phân tích việc tạo ra một Robot có thể giao tiếp đơn giản với mình ta có thể mỗ xẻ nó được theo những phần như sau:
A. Nghe - Xử lý ngôn ngữ tự nhiên - Natural Language Processing
Nghe là việc máy tính sẽ nghe âm thanh và chuyển nó về dạng text; từ text ta mới có data để tiếp tục quá trình xử lý
Có thể dụng thư viện SpeechRecognition 3.8.1 (tham khảo thêm: )bằng cách cài đặt thêm gói bằng cách chạy lệnh sau trong chương trình CMD với Windows và Terminal với những hệ đều hành khác:
pip install SpeechRecognition
Tiếp theo đó là code giúp ta chuyển được từ âm thanh sang text
import speech_recognition
robot_ear = speech_recognition.Recognizer() # khởi tạo biến cho robot có thể nghe
with speech_recognition.Microphone() as mic: #việc dùng with sẽ có tác dụng bật mic lên cho nói xong rồi sẽ tự động tắt mic
print("Robot: I'm listening..")
audio = robot_ear.listen(mic) # âm thanh sẽ được nghe bởi robot thông qua microphone
print("Robot: ... ")
try:
content = robot_ear.recognize_google(audio) # nội dung có được là bởi robot nghe được cái âm thanh được lấy từ trên
except:
content=""
print("You:" + content)
B. Xử Lý - với While - If - Elif - Else - Đưa Ra Dữ Liệu Mong Muốn
from datetime import date, datetime
robot_brain = "" #não robot ban đầu sẽ rỗng chẳng có gì
if content in "":
robot_brain = "I can't hear you, try again..." # nếu không có nói gì thì sẽ in câu này
elif "hello" in content:
robot_brain = "Hello Sang" # nếu trong câu nói của bạn có bắt được chữ hello thì sẽ ra vầy
elif "today" in content:
today = date.today()
robot_brain = today.strftime("%B %d, %Y") # nếu câu nói của bạn có today thì sẽ trả về thời gian hiện tại
elif "time" in content:
now = datetime.today()
robot_brain = now.strftime("%H hours %M minutes %S seconds") # nếu câu nói của bạn có time thì sẽ trả về giờ phút giây hiện tại
elif "bye" in content:
robot_brain = "Bye Sang" # khi gặp bye thì robot sẽ hiểu bạn muốn dừng..
print("Robot: "+robot_brain) #line1
robot_mouth.say(robot_brain) #line2
robot_mouth.runAndWait() #line3
break # lệnh break sẽ thoát khỏi vòng lặp đồng nghĩa dừng chương trình luôn.. không xử lý khúc sau nữa;
# nên phải chèn line1;line2;line3 lên trước break, cho robot chào tạm biệt rồi mới thoát chương trình
else:
robot_brain = "Yes, Good..."
C. Nói - Biến đổi text thành giọng nói - Text to Speech
Có thể dụng thư viện pyttsx3 2.90 (tham khảo thêm: )bằng cách cài đặt thêm gói bằng cách chạy lệnh sau trong chương trình CMD với Windows và Terminal với những hệ đều hành khác:
pip install pyttsx3
import pyttsx3
robot_mouth = pyttsx3.init() # khởi tạo biến cho robot có thể nói
print("Robot: "+robot_brain)
robot_mouth.say(robot_brain) # robot nhận được cái cần nói
robot_mouth.runAndWait() # robot sẽ nói
D. Code Tổng Thể - Chạy Chương Trình
Việc muốn chương trình chạy liên tục được đến khi ta muốn nó tắt bởi lệnh mong muốn vd: "bye" thì ta dùng thêm cấu trúc while True: và break để dừng...
Tổng hợp code ta được như sau:
import pyttsx3
import speech_recognition
from datetime import date, datetime
robot_ear = speech_recognition.Recognizer() # khởi tạo biến cho robot có thể nghe
robot_mouth = pyttsx3.init() # khởi tạo biến cho robot có thể nói
robot_brain = "" #não robot ban đầu sẽ rỗng chẳng có gì
while True: #chương trình sẽ chạy đến khi break mới dừng
with speech_recognition.Microphone() as mic: #việc dùng with sẽ có tác dụng bật mic lên cho nói xong rồi sẽ tự động tắt mic
print("Robot: I'm listening..")
audio = robot_ear.listen(mic) # âm thanh sẽ được nghe bởi robot thông qua microphone
print("Robot: ... ")
try:
content = robot_ear.recognize_google(audio) # nội dung có được là bởi robot nghe được cái âm thanh được lấy từ trên
except:
content=""
print("You:" + content)
if content in "":
robot_brain = "I can't hear you, try again..." # nếu không có nói gì thì sẽ in câu này
elif "hello" in content:
robot_brain = "Hello Sang" # nếu trong câu nói của bạn có bắt được chữ hello thì sẽ ra vầy
elif "today" in content:
today = date.today()
robot_brain = today.strftime("%B %d, %Y") # nếu câu nói của bạn có today thì sẽ trả về thời gian hiện tại
elif "time" in content:
now = datetime.today()
robot_brain = now.strftime("%H hours %M minutes %S seconds") # nếu câu nói của bạn có time thì sẽ trả về giờ phút giây hiện tại
elif "bye" in content:
robot_brain = "Bye Sang" # khi gặp bye thì robot sẽ hiểu bạn muốn dừng..
print("Robot: "+robot_brain) #line1
robot_mouth.say(robot_brain) #line2
robot_mouth.runAndWait() #line3
break # lệnh break sẽ thoát khỏi vòng lặp đồng nghĩa dừng chương trình luôn.. không xử lý khúc sau nữa;
# nên phải chèn line1;line2;line3 lên trước break, cho robot chào tạm biệt rồi mới thoát chương trình
else:
robot_brain = "Yes, Good..."
print("Robot: "+robot_brain)
robot_mouth.say(robot_brain) # robot nhận được cái cần nói
robot_mouth.runAndWait() # robot sẽ nói
E. Những Lỗi Hay Gặp Phải
1. Module Not Found Error : No module named 'speech_recognition'
Module Not Found Error : No module named 'speech_recognition' |
Đây là lỗi thiếu thư viện bên ngoài mà ta chưa cài đặt, cần cài thêm để có thể hoạt động
Ta cài thêm như sau:
cài đặt gói pip install |
2. Đối với máy Windows ta cần cài thêm hai gói liên quan đến âm thanh:
pip install pipwinpipwin install pyaudio
3. OSError: No Default Input Device Available
Lỗi khi không xác định được thiết bị, đây là Microphone
OSError: No Default Input Device Available |
Tùy vào từng thời điểm và thực tế sẽ có những lỗi cũng như sự thay đổi; ta cứ dùng cấu trúc lỗi gõ trên tìm kiếm google search sẽ có nhé.