Chủ Nhật, 1 tháng 11, 2020

Ý 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

Trợ lý ảo đơn giản với Python

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


Hoặc bạn có thể download source code của chương trình tại đây: 

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 pipwin
pipwin 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é.

==================================================================================

 
background image