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
+ # speaker init
15
+ mixer .init ()
16
+
17
+ def line_speaker (texts ,lang = 'zh-tw' ):
18
+ with tempfile .NamedTemporaryFile (delete = True ) as fp :
19
+ tts = gTTS (text = texts ,lang = lang )
20
+ tts .save ("{}.mp3" .format (fp .name ))
21
+ mixer .music .load ('{}.mp3' .format (fp .name ))
22
+ mixer .music .play ()
23
+ print (texts )
24
+
25
+ # listener init()
26
+ recognizer = speech_recognition .Recognizer ()
27
+ def listener ():
28
+ result = None
29
+ while (result == None ):
30
+ with speech_recognition .Microphone () as source :
31
+ # recognizer.adjust_for_ambient_noise(source)
32
+ audio = recognizer .listen (source )
33
+ try :
34
+ result = recognizer .recognize_google (audio ,language = 'zh-tw' )
35
+ except :
36
+ continue
37
+ print (result )
38
+ return result
39
+
40
+ def order_manage ():
41
+ data_dict = load_xlsx ()
42
+ menu_dict = process_data_to_menu (data_dict )
43
+ line_speaker ('您好,很高興為您服務,請問要做些甚麼?' )
44
+ while (1 ):
45
+ order_line = listener ()
46
+ # 點餐
47
+ if '餐' in order_line :
48
+ total_order = ''
49
+ line_speaker ('請問要點些什麼呢?' )
50
+ while (1 ):
51
+ order_menu_line = listener ()
52
+ if '和' in order_menu_line or '個' in order_menu_line :
53
+ total_order += order_menu_line + '和'
54
+ elif '餐' in order_menu_line or '點完' in order_menu_line :
55
+ # 點完餐
56
+ break
57
+ else :
58
+ line_speaker ('不好意思,請再說一次。' )
59
+ line_speaker (process_price_with_order (menu_dict , total_order ))
60
+
61
+ # 問時間,幾點了
62
+ elif ('時間' in order_line ) or ('幾點' in order_line ):
63
+ now = datetime .now ()
64
+ res_text = '現在時間是 %d 點 %d 分 %d 秒' % (now .hour , now .minute , now .second )
65
+ line_speaker (res_text )
66
+
67
+ # 離開
68
+ elif '離開' in order_line or '結束' in order_line :
69
+ line_speaker ('很高興為您服務,很期待您下次光顧。' )
70
+ sleep (6 )
71
+ break
72
+
73
+ else :
74
+ line_speaker ('不好意思,請再說一次。' )
75
+
76
+ if __name__ == '__main__' :
77
+ order_manage ()
0 commit comments