W8:
authordxy15521469561 <1731678236@qq.com>
Mon, 24 Jun 2024 09:02:17 +0000 (17:02 +0800)
committerdxy15521469561 <1731678236@qq.com>
Mon, 24 Jun 2024 09:02:17 +0000 (17:02 +0800)
AI应用优化
M36_K01:
界面优化

2.sdk-ZY/project/K01/new.bat
2.sdk/project/W8/sdk/services/microPython/ports/quectel/core/ai.py
2.sdk/project/W8/sdk/services/microPython/ports/quectel/core/appWechat.py
2.sdk/project/W8/sdk/services/microPython/ports/quectel/core/ui_setting.py
2.sdk/project/W8/sdk/services/microPython/ports/quectel/core/ui_video.py

index 4182b93..27d7bf8 100644 (file)
@@ -13,7 +13,7 @@ if errorlevel 0 (
 )
 :STEP1
 
-..\..\Helios_SDK\tools\ASR_1606\win32\mklfs.exe -c usr -b 4096 -r 4096 -p 4096 -s 675840 -i .\images\customer_fs.bin
+..\..\Helios_SDK\tools\ASR_1606\win32\mklfs.exe -c usr -b 4096 -r 4096 -p 4096 -s 757760 -i .\images\customer_fs.bin
 if errorlevel 1 (
     echo "customer_fs.bin生成失败 请检查usr目录是否大于316K!!!!!!!!!!!!!!!"
     goto exit
index 688cb02..d551870 100644 (file)
@@ -434,20 +434,20 @@ al_listen_screen_icon1.set_src("E:/static/AI/AI_LISTEN_GIF001.png")
 
 al_listen_screen_icon1.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
 
-al_listen_screen_icon = lv.img(AI_listen_screen)
-al_listen_screen_icon.set_size(230,58)
-al_listen_screen_icon.set_pos((240-230)//2,210)
-al_listen_screen_icon.set_src("E:/static/AI/ai_confirm_bt.png")
-al_listen_screen_icon.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+# al_listen_screen_icon = lv.img(AI_listen_screen)
+# al_listen_screen_icon.set_size(230,58)
+# al_listen_screen_icon.set_pos((240-230)//2,210)
+# al_listen_screen_icon.set_src("E:/static/AI/ai_confirm_bt.png")
+# al_listen_screen_icon.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
 
 al_listen_screen_icon_bt = lv.label(AI_listen_screen)
 al_listen_screen_icon_bt.set_text(" ")
 al_listen_screen_icon_bt.set_size(240, 190)
 al_listen_screen_icon_bt.set_pos(0,92)
 
-al_listen_screen_title4 = lv.label(al_listen_screen_icon)
-al_listen_screen_title4.set_pos(0, 18)
-al_listen_screen_title4.set_size(230, 58)
+al_listen_screen_title4 = lv.label(AI_listen_screen)
+al_listen_screen_title4.set_pos(0, 220)
+al_listen_screen_title4.set_size(240, 58)
 al_listen_screen_title4.set_text("正在聆听...")
 al_listen_screen_title4.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
 al_listen_screen_title4.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
@@ -660,6 +660,7 @@ class AIScreen(Screen):#AI_GUI
         self.AI_client_tts_tra_flag = 0
         self.AI_client_tts_full_sentence_flag = 0 #完整的句子标识
         self.tts_time_count = 0
+        self.tts_time_outcount = 0
         self.timer_out_count = 0
         self.img_show_count = 0
         self.img_show_count_tmp = 0
@@ -686,8 +687,8 @@ class AIScreen(Screen):#AI_GUI
 
         al_no_sim_popup_screen_icon1.add_event_cb(lambda e: EventMesh.callback_wrapper(self.button_cb(e,2)), lv.EVENT.SHORT_CLICKED, None) #无网络按钮
 
-        al_listen_screen_icon_bt.add_event_cb(lambda e: EventMesh.callback_wrapper(self.button_cb(e,3)), lv.EVENT.SHORT_CLICKED, None) #说话完成按钮
-        al_listen_screen_icon.add_event_cb(lambda e: EventMesh.callback_wrapper(self.button_cb(e,3)), lv.EVENT.SHORT_CLICKED, None) #说话完成按钮
+        # al_listen_screen_icon_bt.add_event_cb(lambda e: EventMesh.callback_wrapper(self.button_cb(e,3)), lv.EVENT.SHORT_CLICKED, None) #说话完成按钮
+        # al_listen_screen_icon.add_event_cb(lambda e: EventMesh.callback_wrapper(self.button_cb(e,3)), lv.EVENT.SHORT_CLICKED, None) #说话完成按钮
 
         al_think_screen_icon1_bt.add_event_cb(lambda e: EventMesh.callback_wrapper(self.button_cb(e,4)), lv.EVENT.SHORT_CLICKED, None) #思考界面取消按钮
         al_think_screen_icon1.add_event_cb(lambda e: EventMesh.callback_wrapper(self.button_cb(e,4)), lv.EVENT.SHORT_CLICKED, None) #思考界面取消按钮
@@ -752,7 +753,8 @@ class AIScreen(Screen):#AI_GUI
         self.AI_label_str = ""
         self.AI_label_answer = ""
         self.tts_time_count = 0
-
+        self.tts_time_outcount = 0
+        
     def talk_end_cancel_cb(self,e):#对话结束已经播放音频取消继续对话按钮
         self.Close()
         self.AI_label_answer = ""
@@ -990,9 +992,11 @@ class AIScreen(Screen):#AI_GUI
     def audio_cb(self,event):
         if event == 0:
             self.audio_play_state =1
-            print('audio-play start.')
+            EventMesh.publish("set_audio_state", 1)
+            print('audio-play start. ai')
         elif event == 7:
             self.audio_play_state = 0
+            EventMesh.publish("set_audio_state", 0)
             # if self.AI_audio_queue.size() > 0:
             #     data = self.AI_audio_queue.get()
             #     print("audio_queue:data:{}".format(len(data)))
@@ -1028,7 +1032,7 @@ class AIScreen(Screen):#AI_GUI
             AI_not_listen_text_screen.add_flag(lv.obj.FLAG.HIDDEN) #
             AI_no_net_screen.clear_flag(lv.obj.FLAG.HIDDEN) #开启显示
             al_no_sim_popup_screen_title3.set_text("无SIM卡")
-            
+
         elif signal == None or signal == 0 or signal == 99:
             AI_listen_screen.add_flag(lv.obj.FLAG.HIDDEN)
             AI_think_screen.add_flag(lv.obj.FLAG.HIDDEN) #先隐藏
@@ -1319,8 +1323,8 @@ class AIScreen(Screen):#AI_GUI
                 usys.print_exception(e)
     def AI_client_tts_timer_cb(self,*argc):
         # EventMesh.publish("system_sleep_rest")#防止黑屏
-        
         self.tts_time_count+=1
+        
         if self.TTS_PRO_TYPE == 1:
             #tts数据入队
             self.AI_client_tts_put_data()
@@ -1329,11 +1333,13 @@ class AIScreen(Screen):#AI_GUI
         if len(self.AI_client_chat_play_str) >0  and self.AI_client_tts_data_len < 150*1024 :#and (self.AI_client_tts_str_total_len <100 or self.AI_client_tts_str_total_len - self.AI_client_tts_data_total_len//672 < 60)缓存200k以下,且tts发送文字字节数比返回音频数据少60字节
             # play_str = split_string(self.AI_client_chat_play_str,40)#
             # if play_str =="":#没找到句号或者逗号,切割字符串
+            self.tts_time_outcount+=1
+
             if self.TTS_PRO_TYPE == 1:
                 play_str = sub_utf8_String(self.AI_client_chat_play_str,20)#按中文切割字符串
                 self.AI_client_tts_str_total_len += len(play_str)
             elif self.TTS_PRO_TYPE == 0:
-                if self.AI_audio_queue.size() >= 5 or self.AI_client_tts_tra_flag == 1:#存了超过4句,就等小于3次在转化
+                if self.AI_audio_queue.size() >= 5 or self.AI_client_tts_tra_flag == 1 or (self.tts_time_outcount < 3 and len(self.AI_client_chat_play_str) < 100):#存了超过4句,就等小于3次在转化
                     return
                 play_str = split_string(self.AI_client_chat_play_str,50,100)#按逗号,句号切割
                 if play_str =="" or len(play_str)>100:#没找到句号或者逗号,切割字符串
@@ -1716,6 +1722,12 @@ class AIScreen(Screen):#AI_GUI
         self.AI_client_chat_play_str = ""
         self.AI_client_tts_tra_flag = 0
         self.record.stop()#关闭录音
+        Record_read_buf = bytearray(self.Audio_buf_size)
+        for i in range(10):
+            Record_len = self.record.stream_read(Record_read_buf, self.Audio_buf_size)
+            print("Record_len:!!!!!!{}\r\n".format(Record_len))
+            if Record_len <= 0:
+                break
         self.AI_label_answer = ""
         self.refresh_count = 0
         self.refresh_texttimer.stop()
index 765a9e5..b8306ab 100644 (file)
@@ -138,6 +138,8 @@ class WechatScreen(Screen):
         self.timer = osTimer()
         self.second_timer = osTimer()
         self.play_timer = osTimer()
+        self.update_lcdTimer = osTimer()
+
 
         
 
@@ -388,6 +390,7 @@ class WechatScreen(Screen):
             Wechat_log("talking1.0")
             self.record_test.start("/ext/static/storage_file/{}.amr".format(self.wechat_num),16) 
             self.second_timer.start(1000, 1, self.reduce_second)
+            self.update_lcdTimer.start(500, 1, self.update_lcd)
             self.press_state = 1
             self.ble_send = 1
             #松开发送   
@@ -436,6 +439,7 @@ class WechatScreen(Screen):
             #写序号
             self.record_test.stop() #停止錄音
             self.second_timer.stop() #停止计时器
+            self.update_lcdTimer.stop()
             self.countdown_old = self.countdown
             # Wechat_log("self.countdown :{} self.wechat_num:{} self.wechat_recode_list:{} self.wechat_show:{}".format(self.countdown,self.wechat_num,self.wechat_recode_list,self.wechat_show))
             self.wechat_recode_list["%02d"%(self.wechat_show)] = "S:{}".format(str(self.countdown))
@@ -567,11 +571,25 @@ class WechatScreen(Screen):
     def get_send_state(self, event, msg): 
         return self.ble_send
 
+    def lcd_off(self):
+        self.play_timer.stop()
+        self.record_test.stop() #停止錄音
+        self.second_timer.stop() #停止计时器
+        self.update_lcdTimer.stop()
+        self.aud.stop()
+
+    def update_lcd(self,*args):
+        EventMesh.publish("publish_message_event_ui",{"func":self.update_lcd_cb,"data":0})
+
+    def update_lcd_cb(self,data):
+        Wechat_log("update_lcd_cb")
+        EventMesh.publish("system_sleep_rest")#防止黑屏
 
     def Close(self):
         Wechat_log("Close1")
         self.play_timer.stop()
         self.record_test.stop() #停止錄音
+        self.update_lcdTimer.stop()
         self.second_timer.stop() #停止计时器
         self.aud.stop()
         num = EventMesh.publish("get_volum_size")
@@ -579,8 +597,12 @@ class WechatScreen(Screen):
             num = 8
         self.aud.setVolume(num)#恢复原始音量
         Wechat_log("Close2")
-
     def reduce_second(self,*args):
+        EventMesh.publish("publish_message_event_ui",{"func":self.reduce_second_cb,"data":0})
+
+    def reduce_second_cb(self,data):
+
+        EventMesh.publish("system_sleep_rest")#防止黑屏
         if self.countdown < 15:
             self.countdown += 1
         else:
index 4c26cb9..8222cc5 100644 (file)
@@ -299,7 +299,7 @@ class SettingScreen(Screen):
 
 
     def done_return(self): 
-        EventMesh.publish("return_prev_screen")
+        EventMesh.publish("load_screen", {"screen": "main_menu"})
 
     def btn1_release(self):
         EventMesh.publish("return_setiing")
index 8d8d05f..048d347 100644 (file)
@@ -1812,14 +1812,14 @@ class videolistScreen(Screen):
             print("videolist_screen")
             videolist_screen.set_scrollbar_mode(lv.SCROLLBAR_MODE.OFF)
             videolist_screen.add_style(style_screen, lv.PART.MAIN | lv.STATE.DEFAULT)
-            videolist_screen.add_event_cb(lambda e: EventMesh.callback_wrapper(self.calling_cb(e)), lv.EVENT.GESTURE, None)
+            videolist_screen.add_event_cb(lambda e: EventMesh.callback_wrapper(self.calling_cb(e,0)), lv.EVENT.GESTURE, None)
 
             videolist_screen_list_screen = lv.obj(videolist_screen)
             videolist_screen_list_screen.set_pos(0, 40)
             videolist_screen_list_screen.set_size(LCD_SIZE_W, LCD_SIZE_H-40)
             videolist_screen_list_screen.set_scrollbar_mode(lv.SCROLLBAR_MODE.OFF)
             videolist_screen_list_screen.add_style(style_screen, lv.PART.MAIN | lv.STATE.DEFAULT)
-            videolist_screen_list_screen.add_event_cb(lambda e: EventMesh.callback_wrapper(self.calling_cb(e)), lv.EVENT.GESTURE, None)
+            videolist_screen_list_screen.add_event_cb(lambda e: EventMesh.callback_wrapper(self.calling_cb(e,0)), lv.EVENT.GESTURE, None)
 
 
             videolist_top_title = lv.label(videolist_screen)
@@ -1844,11 +1844,11 @@ class videolistScreen(Screen):
             self.videolist_detail_list.set_size(LCD_SIZE_W, LCD_SIZE_H-40+1)
             self.videolist_detail_list.set_scrollbar_mode(lv.SCROLLBAR_MODE.OFF)
             self.videolist_detail_list.add_style(style_screen, lv.PART.MAIN | lv.STATE.DEFAULT)
-            self.videolist_detail_list.add_event_cb(lambda e: EventMesh.callback_wrapper(self.calling_cb(e)), lv.EVENT.GESTURE, None)
+            self.videolist_detail_list.add_event_cb(lambda e: EventMesh.callback_wrapper(self.calling_cb(e,0)), lv.EVENT.GESTURE, None)
             for i in range(self.MXA_phone_num):
                 contact_btn = lv.btn(self.videolist_detail_list)
                 contact_btn.add_flag(lv.obj.FLAG.CLICKABLE)
-                contact_btn.add_event_cb(lambda e: EventMesh.callback_wrapper(self.calling_cb(e)),
+                contact_btn.add_event_cb(lambda e: EventMesh.callback_wrapper(self.calling_cb(e,1)),
                                         lv.EVENT.SHORT_CLICKED, None)
                 contact_btn.add_flag(lv.obj.FLAG.HIDDEN)
                 # contact_btn.add_style(style_press_btn, lv.PART.MAIN | lv.STATE.PRESSED)
@@ -1949,7 +1949,7 @@ class videolistScreen(Screen):
                 if self.videolist_detail_list != None:
                     self.videolist_detail_list.add_flag(lv.obj.FLAG.HIDDEN)#隐藏空文本
             
-    def calling_cb(self,e):
+    def calling_cb(self,e,msg):
         code = e.get_code()
         indev = lv.indev_get_act()
         lv.indev_t.wait_release(indev)
@@ -1959,11 +1959,12 @@ class videolistScreen(Screen):
                 EventMesh.publish("load_screen", {"screen": "main_menu"})
 
         elif  code == lv.EVENT.SHORT_CLICKED:
-            if EventMesh.publish(constants.EVENT.GET_CONNECT) == 1:#有卡
-                msg_text = e.get_target().get_child(1).get_text()
-                EventMesh.publish("load_screen", {"screen": "vedio_mode","meta":msg_text})
-            else:
-                EventMesh.publish("load_screen", {"screen": "no_sim_popup_screen"})
+            if msg == 1:
+                if EventMesh.publish(constants.EVENT.GET_CONNECT) == 1:#有卡
+                    msg_text = e.get_target().get_child(1).get_text()
+                    EventMesh.publish("load_screen", {"screen": "vedio_mode","meta":msg_text})
+                else:
+                    EventMesh.publish("load_screen", {"screen": "no_sim_popup_screen"})
 
     # def calling_cb(self,e):
     #     code = e.get_code()