Skip to content

Commit bacf928

Browse files
authored
Add files via upload
1 parent e56d6b4 commit bacf928

File tree

1 file changed

+125
-0
lines changed

1 file changed

+125
-0
lines changed

script/order_bot.py

Lines changed: 125 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,125 @@
1+
# process order
2+
from process_order import load_xlsx, process_data_to_menu, process_price_with_order
3+
# detect voice
4+
import speech_recognition
5+
# generate voice
6+
from pygame import mixer
7+
import tempfile
8+
from gtts import gTTS
9+
10+
# time
11+
from datetime import datetime
12+
from time import sleep
13+
14+
class Order_Bot:
15+
def __init__(self, mode = 'voice1'):
16+
# speaker init
17+
mixer.init()
18+
# mode: voice1, voice2, text
19+
self.mode = mode
20+
# recognizer init
21+
self.recognizer = speech_recognition.Recognizer()
22+
23+
def line_speaker(self, texts,lang='zh-tw'):
24+
with tempfile.NamedTemporaryFile(delete=True) as fp:
25+
tts = gTTS(text=texts,lang=lang)
26+
tts.save("{}.mp3".format(fp.name))
27+
mixer.music.load('{}.mp3'.format(fp.name))
28+
mixer.music.play()
29+
print(texts)
30+
31+
def listener(self):
32+
if self.mode == 'voice1':
33+
result = None
34+
while(result == None):
35+
with speech_recognition.Microphone() as source:
36+
# recognizer.adjust_for_ambient_noise(source)
37+
audio = self.recognizer.listen(source)
38+
try:
39+
result = self.recognizer.recognize_google(audio,language = 'zh-tw')
40+
except:
41+
continue
42+
print(result)
43+
return result
44+
elif self.mode == 'text':
45+
result = input()
46+
return result
47+
48+
def order_manage(self):
49+
data_dict = load_xlsx(file_name='script/menu.xlsx')
50+
menu_dict = process_data_to_menu(data_dict)
51+
self.line_speaker('您好,很高興為您服務,請問要做些甚麼?')
52+
while(1):
53+
order_line = self.listener()
54+
# 問好
55+
if '你好' in order_line:
56+
self.line_speaker('你好。')
57+
58+
# 有什麼吃的?
59+
elif '吃的' in order_line:
60+
eat_count = 0
61+
self.line_speaker('想吃飯還是麵?')
62+
while(eat_count<2):
63+
order_line = self.listener()
64+
if '飯' in order_line:
65+
self.line_speaker('我們沒有飯')
66+
eat_count+=1
67+
elif '麵' in order_line:
68+
self.line_speaker('我們沒有麵')
69+
eat_count+=1
70+
else:
71+
self.line_speaker('我們沒有這個')
72+
self.line_speaker('我們有水餃')
73+
continue
74+
75+
# 機率論
76+
elif '機率' in order_line:
77+
self.line_speaker('請描述你所要計算的機率問題。講完後請說我說完了')
78+
while(not '完' in order_line):
79+
order_line = self.listener()
80+
self.line_speaker('請問所求為會發生還是不會發生的機率?')
81+
order_line = self.listener()
82+
while(not '會' in order_line):
83+
order_line = self.listener()
84+
if '不會' in order_line:
85+
self.line_speaker('二分之一')
86+
else:
87+
self.line_speaker('二分之一')
88+
89+
# 點餐
90+
elif '餐' in order_line:
91+
total_order = ''
92+
self.line_speaker('請問要點些什麼呢?')
93+
while(1):
94+
order_menu_line = self.listener()
95+
if '和' in order_menu_line or '個' in order_menu_line:
96+
total_order+=order_menu_line+'和'
97+
elif '餐' in order_menu_line or '點完' in order_menu_line:
98+
# 點完餐
99+
break
100+
else:
101+
self.line_speaker('不好意思,請再說一次。')
102+
self.line_speaker(process_price_with_order(menu_dict, total_order))
103+
104+
# 問時間,幾點了
105+
elif ('時間' in order_line) or ('幾點' in order_line):
106+
now = datetime.now()
107+
res_text = '現在時間是 %d 點 %d 分 %d 秒' % (now.hour, now.minute, now.second)
108+
self.line_speaker(res_text)
109+
110+
# 離開
111+
elif '離開' in order_line or '結束' in order_line:
112+
self.line_speaker('很高興為您服務,很期待您下次光顧。')
113+
sleep(6)
114+
break
115+
116+
# not any option upper
117+
else:
118+
self.line_speaker('不好意思,請再說一次。')
119+
120+
def __call__(self):
121+
self.order_manage()
122+
123+
if __name__ == '__main__':
124+
order_bot = Order_Bot('text')
125+
order_bot()

0 commit comments

Comments
 (0)