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