From: dxy15521469561 <1731678236@qq.com> Date: Wed, 3 Jul 2024 03:08:56 +0000 (+0800) Subject: W8: X-Git-Url: http://git.snicker.com.cn/?a=commitdiff_plain;h=52006461a56c5f0ccb695aadcbf2e2f5213b243d;p=mirrors%2FASR1603_G5.git W8: AI图片更新 --- diff --git a/2.sdk/project/W8/sdk/services/microPython/ports/quectel/core/ai.py b/2.sdk/project/W8/sdk/services/microPython/ports/quectel/core/ai.py index 4fbeb5f3..6b3b82f5 100644 --- a/2.sdk/project/W8/sdk/services/microPython/ports/quectel/core/ai.py +++ b/2.sdk/project/W8/sdk/services/microPython/ports/quectel/core/ai.py @@ -13,6 +13,7 @@ import lvgl as lv import urandom import uhashlib import ubinascii +import gc from ui import style_font_youyuan_20,style_screen,Screen,style_img,LCD_SIZE_H,LCD_SIZE_W style_font_youyuan_ai_20 = lv.style_t() style_font_youyuan_ai_20.init() @@ -20,25 +21,33 @@ style_font_youyuan_ai_20.set_text_color(lv.color_make(253, 82, 19)) style_font_youyuan_ai_20.set_text_font_v2("font_28.bin",28,0) #length长度内,返回string句号或逗号的分割字符串 def split_string(string,start,end): + count = string.find('\n',start,end) + if count != -1: + return string[:count+1] count = string.find(',',start,end) if count != -1: - return string[:count] + return string[:count+1] count = string.find('.',start,end) if count != -1: - return string[:count] + return string[:count+1] count = string.find('!',start,end) if count != -1: - return string[:count] + return string[:count+1] count = string.find('?',start,end) if count != -1: - return string[:count] - + return string[:count+1] + + count = string.find(',',start,end) if count != -1: return string[:count+len(',')] count = string.find('。',start,end) if count != -1: return string[:count+len('。')] + count = string.find('、',start,end) + if count != -1: + return string[:count+len('、')] + count = string.find('!',start,end) if count != -1: return string[:count+len('!')] @@ -207,46 +216,6 @@ style_font_28_green_bg_gray.init() # style_font_28_green_bg_gray.set_pad_bottom(0) style_font_28_green_bg_gray.set_text_color(lv.color_make(255, 255, 255)) #字体文本颜色 style_font_28_green_bg_gray.set_text_font_v2("font_28.bin",28,0) - -#列表obj -style_wechat_s_btn = lv.style_t() -style_wechat_s_btn.init() -style_wechat_s_btn.set_radius(5) -style_wechat_s_btn.set_bg_opa(255) -style_wechat_s_btn.set_border_width(0) -style_wechat_s_btn.set_pad_left(0) -style_wechat_s_btn.set_pad_right(0) -style_wechat_s_btn.set_pad_top(0) -style_wechat_s_btn.set_pad_bottom(0) -style_wechat_s_btn.set_bg_color(lv.color_make(79,195,76)) -style_wechat_s_btn.set_shadow_opa(0) - -AI_end_screen_list_screen = lv.obj(AI_talk_end_screen) -AI_end_screen_list_screen.set_pos(10, 5) -AI_end_screen_list_screen.set_size(LCD_SIZE_W-10,205) -AI_end_screen_list_screen.set_scrollbar_mode(lv.SCROLLBAR_MODE.OFF) -AI_end_screen_list_screen.add_style(style_screen, lv.PART.MAIN | lv.STATE.DEFAULT) -AI_end_screen_list_screen.set_flex_flow(lv.FLEX_FLOW.COLUMN)#自动排成一列对齐 - -AI_end_screen_list_detail_screen = lv.obj(AI_end_screen_list_screen) -AI_end_screen_list_detail_screen.set_pos(0, 5) -AI_end_screen_list_detail_screen.set_size(230,lv.SIZE.CONTENT) -AI_end_screen_list_detail_screen.add_style(style_screen, lv.PART.MAIN | lv.STATE.DEFAULT) - - -AI_end_screen_list_detail_screen1 = lv.obj(AI_end_screen_list_detail_screen) -AI_end_screen_list_detail_screen1.set_pos(30,10) -AI_end_screen_list_detail_screen1.set_size(190,lv.SIZE.CONTENT) -AI_end_screen_list_detail_screen1.add_style(style_wechat_s_btn, lv.PART.MAIN | lv.STATE.DEFAULT) - -AI_listen_text = lv.label(AI_end_screen_list_detail_screen1) -AI_listen_text.set_pos(5, 10) -AI_listen_text.set_size(175, lv.SIZE.CONTENT) -AI_listen_text.set_text(" ") -AI_listen_text.set_long_mode(lv.label.LONG.WRAP) -AI_listen_text.set_style_text_align(lv.TEXT_ALIGN.LEFT, 0) -AI_listen_text.add_style(style_font_28_green_bg_gray, lv.PART.MAIN | lv.STATE.DEFAULT) - style_gray_screen = lv.style_t() style_gray_screen.init() style_gray_screen.set_radius(5) @@ -284,13 +253,49 @@ style_wechat_r_btn.set_pad_bottom(0) style_wechat_r_btn.set_bg_color(lv.color_make(66,66,66)) style_wechat_r_btn.set_border_width(0) style_wechat_r_btn.set_shadow_opa(0) +#列表obj +style_wechat_s_btn = lv.style_t() +style_wechat_s_btn.init() +style_wechat_s_btn.set_radius(5) +style_wechat_s_btn.set_bg_opa(255) +style_wechat_s_btn.set_border_width(0) +style_wechat_s_btn.set_pad_left(0) +style_wechat_s_btn.set_pad_right(0) +style_wechat_s_btn.set_pad_top(0) +style_wechat_s_btn.set_pad_bottom(0) +style_wechat_s_btn.set_bg_color(lv.color_make(79,195,76)) +style_wechat_s_btn.set_shadow_opa(0) + +AI_end_screen_list_screen = lv.obj(AI_talk_end_screen) +AI_end_screen_list_screen.set_pos(10, 5) +AI_end_screen_list_screen.set_size(LCD_SIZE_W-10,205) +AI_end_screen_list_screen.set_scrollbar_mode(lv.SCROLLBAR_MODE.OFF) +AI_end_screen_list_screen.add_style(style_screen, lv.PART.MAIN | lv.STATE.DEFAULT) +AI_end_screen_list_screen.set_flex_flow(lv.FLEX_FLOW.COLUMN)#自动排成一列对齐 + +AI_end_screen_list_detail_screen = lv.obj(AI_end_screen_list_screen) +AI_end_screen_list_detail_screen.set_pos(0, 5) +AI_end_screen_list_detail_screen.set_size(230,lv.SIZE.CONTENT) +AI_end_screen_list_detail_screen.add_style(style_screen, lv.PART.MAIN | lv.STATE.DEFAULT) +#ASR结果1 +AI_end_screen_list_detail_screen1 = lv.obj(AI_end_screen_list_detail_screen) +AI_end_screen_list_detail_screen1.set_pos(30,10) +AI_end_screen_list_detail_screen1.set_size(190,lv.SIZE.CONTENT) +AI_end_screen_list_detail_screen1.add_style(style_wechat_s_btn, lv.PART.MAIN | lv.STATE.DEFAULT) +AI_listen_text = lv.label(AI_end_screen_list_detail_screen1) +AI_listen_text.set_pos(5, 10) +AI_listen_text.set_size(175, lv.SIZE.CONTENT) +AI_listen_text.set_text(" ") +AI_listen_text.set_long_mode(lv.label.LONG.WRAP) +AI_listen_text.set_style_text_align(lv.TEXT_ALIGN.LEFT, 0) +AI_listen_text.add_style(style_font_28_green_bg_gray, lv.PART.MAIN | lv.STATE.DEFAULT) +#chat结果1 msg_detail_cont_obj = lv.obj(AI_end_screen_list_screen) msg_detail_cont_obj.set_pos(0, 5) msg_detail_cont_obj.set_size(220,lv.SIZE.CONTENT) msg_detail_cont_obj.add_style(style_wechat_r_btn, lv.PART.MAIN | lv.STATE.DEFAULT) - AI_label = lv.label(msg_detail_cont_obj) AI_label.set_pos(5, 10) AI_label.set_size(205, lv.SIZE.CONTENT) @@ -298,7 +303,26 @@ AI_label.set_long_mode(lv.label.LONG.WRAP) AI_label.set_style_text_align(lv.TEXT_ALIGN.LEFT, 0) AI_label.add_style(style_font_28_black_bg_gray, lv.PART.MAIN | lv.STATE.DEFAULT) - +#222222222222222222222222222222222222 +AI_end_screen_list_screen2 = lv.obj(AI_talk_end_screen) +AI_end_screen_list_screen2.set_pos(10, 5) +AI_end_screen_list_screen2.set_size(LCD_SIZE_W-10,205) +AI_end_screen_list_screen2.set_scrollbar_mode(lv.SCROLLBAR_MODE.OFF) +AI_end_screen_list_screen2.add_style(style_screen, lv.PART.MAIN | lv.STATE.DEFAULT) +AI_end_screen_list_screen2.set_flex_flow(lv.FLEX_FLOW.COLUMN)#自动排成一列对齐 + +#chat结果2 +msg_detail_cont_obj2 = lv.obj(AI_end_screen_list_screen2) +msg_detail_cont_obj2.set_pos(0, 5) +msg_detail_cont_obj2.set_size(220,lv.SIZE.CONTENT) +msg_detail_cont_obj2.add_style(style_wechat_r_btn, lv.PART.MAIN | lv.STATE.DEFAULT) +AI_label2 = lv.label(msg_detail_cont_obj2) +AI_label2.set_pos(5, 10) +AI_label2.set_size(205, lv.SIZE.CONTENT) +AI_label2.set_long_mode(lv.label.LONG.WRAP) +AI_label2.set_style_text_align(lv.TEXT_ALIGN.LEFT, 0) +AI_label2.add_style(style_font_28_black_bg_gray, lv.PART.MAIN | lv.STATE.DEFAULT) +AI_end_screen_list_screen2.add_flag(lv.obj.FLAG.HIDDEN) #隐藏2 #开始对话 AI_talk_screen = lv.obj(AI_screen) @@ -626,6 +650,7 @@ class AIScreen(Screen):#AI_GUI super().__init__() self.meta = AI_screen # self.meta_type = "popup" + self._1S_timer = osTimer() self.Audio_buf_size = 8*1024 self.record_timer = osTimer() self.record = audio.Record() @@ -669,6 +694,7 @@ class AIScreen(Screen):#AI_GUI self.press_state = 0 self.AI_label_answer = "" self.AI_label_str = "" + self.AI_client_tts_play_data_len = 0 self.refresh_texttimer = osTimer() self.AI_listen_text = "" @@ -676,7 +702,14 @@ class AIScreen(Screen):#AI_GUI self.refresh_count = 0 self.AI_send_data_queue = Queue(100) self.AI_audio_queue = Queue(100) - + self.page_num = 0 + self.page_num_tmp = 0 + self.text_max = 400 #一次最大显示字数 + self.scroll_flag_next = 0 + self.scroll_flag_prev = 0 + self.hard_flag_next = 0 + self.hard_flag_prev = 0 + self.scroll_timer_count = 0 AI_screen.add_event_cb(lambda e: EventMesh.callback_wrapper(self.button_cb(e,1)), lv.EVENT.GESTURE, None) @@ -704,6 +737,9 @@ class AIScreen(Screen):#AI_GUI al_not_listen_icon1_bt.add_event_cb(lambda e: EventMesh.callback_wrapper(self.button_cb(e,8)), lv.EVENT.SHORT_CLICKED, None) al_not_listen_icon1.add_event_cb(lambda e: EventMesh.callback_wrapper(self.button_cb(e,8)), lv.EVENT.SHORT_CLICKED, None) + AI_end_screen_list_screen2.add_event_cb(self.scroll_event_cb, lv.EVENT.SCROLL_END, None) + AI_end_screen_list_screen.add_event_cb(self.scroll_event_cb, lv.EVENT.SCROLL_END, None) + def button_cb(self,e,msg): code = e.get_code() indev = lv.indev_get_act() @@ -810,6 +846,166 @@ class AIScreen(Screen):#AI_GUI AI_talk_screen.add_flag(lv.obj.FLAG.HIDDEN) # AI_not_listen_text_screen.clear_flag(lv.obj.FLAG.HIDDEN) # + def scroll_event_cb(self,e): + try: + + # 获取事件源对象 + obj = e.get_target() + code = e.get_code() + # 如果事件是滚动条事件 + if code == lv.EVENT.SCROLL_END: + + # 获取滚动条对象 + + # 获取滚动条的位置 + sb_value = obj.get_scroll_y() + + # 获取对象的高度和内容的总高度 + content_height = obj.get_scroll_bottom()#obj.get_child(0).get_height()+obj.get_child(1).get_height() + #obj_height= obj.get_height() + #print("scroll_event_cb:sb_value:{},content_height:{}".format(sb_value,content_height)) + #print("scroll_event_cb:scroll_flag_next:{},scroll_flag_prev:{}".format(self.scroll_flag_next,self.scroll_flag_prev)) + # 检查滚动条是否已经到达最大值,即内容是否已经到达底部 + if self.hard_flag_next == 1 or self.hard_flag_prev == 1: + self.scroll_timer_count = 10 #滑动计时器初始化 + if content_height < 0: + self.scroll_flag_next = 1 + elif self.hard_flag_next == 1 and self.scroll_flag_next == 1 and content_height == 0: + print("下一页") + + self.page_change(2,self.AI_label_str) + self.scroll_flag_next = 0 + self.hard_flag_next = 0 + else: + self.scroll_flag_next = 0 + self.hard_flag_next = 0 + if sb_value < 0: + self.scroll_flag_prev = 1 + elif self.hard_flag_prev == 1 and self.scroll_flag_prev == 1 and sb_value == 0: + print("上一页") + self.page_change(1,self.AI_label_str) + self.scroll_flag_prev = 0 + self.hard_flag_prev = 0 + else: + self.scroll_flag_prev = 0 + self.hard_flag_prev = 0 + except Exception as e: + usys.print_exception(e) + + def page_change(self,dir,text_str):#翻页,dir: = 0跳转第一页,=1上一页,=2下一页,=3最后一页,最后的内容 + text_str_list = [] + text_str_list_len = 0 + while 1:#分割字符串,获取列表 + str_tmp = split_string(text_str[text_str_list_len:],self.text_max,self.text_max+150)#按逗号,句号切割 + if str_tmp =="" :#没找到句号或者逗号,切割字符串 + str_tmp = sub_utf8_String(text_str[text_str_list_len:],self.text_max)#按中文切割字符串 + #print("page_change:str_tmp:{}".format((str_tmp))) + #str_tmp = sub_utf8_String(text_str[text_str_list_len:],self.text_max) + text_str_list_len+=len(str_tmp) + + if len(text_str) <= text_str_list_len: + text_str_list.append(str_tmp) + break + text_str_list.append(str_tmp) + + if self.AI_client_chat_end_flag ==1:#char回答完后,使最后一页字数大于一页 + #if len(text_str_list[-1]) < 50: + if len(self.AI_label_str ) <= len(text_str): + text_str_list[-1]+="\n\n\n\n~~~~~END~~~~~" + if len(text_str_list[-1])<30: + text_str_list[-1]+="\n\n" + else: #chat未完成,创造中 + if dir != 3: + text_str_list[-1]+="\n\n 创作中...\n\n" + + if dir == 0:#第一页 + self.page_num = 0 + if len(text_str_list)>self.page_num: + AI_label.set_text(text_str_list[self.page_num]+'\n ...{}/{}...'.format(self.page_num+1,len(text_str_list))) + AI_end_screen_list_screen2.scroll_to_y(0,lv.ANIM.OFF) + AI_end_screen_list_screen2.add_flag(lv.obj.FLAG.HIDDEN) #隐藏2 + AI_end_screen_list_screen.clear_flag(lv.obj.FLAG.HIDDEN) # + elif dir == 1:#上一页 + if self.page_num == 1: #第二页, + + self.page_num-=1 + if len(text_str_list)>self.page_num: + AI_label.set_text(text_str_list[self.page_num]+'\n ...{}/{}...'.format(self.page_num+1,len(text_str_list))) + #AI_label.set_text(text_str_list[self.page_num]+'\n ...{}/{}...'.format(self.page_num+1,len(text_str_list))) + scroll_bottom = AI_label.get_height() + print("page_change:scroll_bottom:{}".format(scroll_bottom)) + AI_end_screen_list_screen.scroll_to_y(scroll_bottom,lv.ANIM.OFF) + AI_end_screen_list_screen2.add_flag(lv.obj.FLAG.HIDDEN) #隐藏2 + AI_end_screen_list_screen.clear_flag(lv.obj.FLAG.HIDDEN) # + #AI_end_screen_list_screen.scroll_to_view(lv.ANIM.OFF) + elif self.page_num > 1: + self.page_num-=1 + if len(text_str_list)>self.page_num: + AI_label2.set_text(text_str_list[self.page_num]+'\n ...{}/{}...'.format(self.page_num+1,len(text_str_list))) + scroll_bottom = AI_label2.get_height() + print("page_change:scroll_bottom:{}".format(scroll_bottom)) + + AI_end_screen_list_screen2.scroll_to_y(scroll_bottom,lv.ANIM.OFF) + #AI_end_screen_list_screen2.scroll_to_view(lv.ANIM.OFF) + elif dir == 2:#下一页 + if len(text_str_list)<=self.page_num+1:#最大页 + return + self.page_num+=1 + if len(text_str_list)>self.page_num: + #AI_label2.set_text(' ...\n\n'+text_str_list[self.page_num]+'\n ...{}/{}...'.format(self.page_num+1,len(text_str_list))) + #print("page_change:next:{}".format(text_str_list[self.page_num])) + AI_label2.set_text(text_str_list[self.page_num]+'\n ...{}/{}...'.format(self.page_num+1,len(text_str_list))) + AI_end_screen_list_screen2.scroll_to_y(0,lv.ANIM.OFF) + if self.page_num == 1: #显示第二页 + AI_end_screen_list_screen.add_flag(lv.obj.FLAG.HIDDEN) #隐藏1 + AI_end_screen_list_screen2.clear_flag(lv.obj.FLAG.HIDDEN) # + elif dir == 3:#最后一页,最后的内容 + if len(text_str_list)>1:#大于一页 + + self.page_num = len(text_str_list)-1 + #if len(text_str_list)>self.page_num: + str_tmp = sub_utf8_String(text_str_list[self.page_num-1],self.text_max-80)#在开头加上上一页的最后30字节数据 + #print("str_tmp123:{}".format(str_tmp)) + if len(text_str_list[self.page_num-1])>len(str_tmp): + str_tmp = text_str_list[self.page_num-1][len(str_tmp):] + else: + str_tmp = '' + # + AI_label2.set_text(str_tmp+text_str_list[self.page_num])#+'\n ...{}/{}...'.format(self.page_num+1,len(text_str_list))) + scroll_bottom = AI_label2.get_height() + AI_end_screen_list_screen2.scroll_to(0,scroll_bottom,lv.ANIM.ON) + #print("最后内容,大于一页 scroll_bottom:{}".format(scroll_bottom)) + if self.page_num_tmp == self.page_num:#解决切换页面的时候不跳动问题 + # AI_label2.set_text("\n\n"+str_tmp+text_str_list[self.page_num]) + # scroll_bottom = AI_label2.get_height() + AI_end_screen_list_screen2.scroll_to(0,scroll_bottom,lv.ANIM.ON) + else: + # AI_label2.set_text("\n\n\n\n\n\n"+str_tmp+text_str_list[self.page_num]) + # scroll_bottom = AI_label2.get_height() + AI_end_screen_list_screen2.scroll_to(0,scroll_bottom,lv.ANIM.OFF) + self.page_num_tmp = self.page_num + print("text_str_list[self.page_num]:{}".format(str_tmp+text_str_list[self.page_num])) + #AI_end_screen_list_screen2.scroll_to_view(lv.ANIM.OFF) + AI_end_screen_list_screen.add_flag(lv.obj.FLAG.HIDDEN) #隐藏1 + AI_end_screen_list_screen2.clear_flag(lv.obj.FLAG.HIDDEN) # + if len(self.AI_label_str ) > len(text_str):#处理播放音频的时候,获取下一页数据 + self.page_num-=1 + elif len(text_str_list) == 1:#只有一页 + self.page_num = 0 + if len(text_str_list)>self.page_num: + AI_label.set_text(text_str_list[self.page_num])#+'\n ...{}/{}...'.format(self.page_num+1,len(text_str_list))) + scroll_bottom = AI_label.get_height() + #print("最后内容,只有一页 scroll_bottom:{}".format(scroll_bottom)) + # if(scroll_bottom>200): + # scroll_bottom -= 200 + + AI_end_screen_list_screen.scroll_to(0,scroll_bottom,lv.ANIM.ON) + #AI_end_screen_list_screen.scroll_to_view(lv.ANIM.OFF) + AI_end_screen_list_screen2.add_flag(lv.obj.FLAG.HIDDEN) #隐藏2 + AI_end_screen_list_screen.clear_flag(lv.obj.FLAG.HIDDEN) # + print("page_change1:page_num:{},text_str_list len:{}".format(self.page_num,len(text_str_list))) + #print("page_change2:page_num:{}".format(self.page_num)) + #print("page_change3:str:{}".format(text_str_list[self.page_num])) def listen_end_btcb(self,e):#说话完成确定按钮回调 if self.AI_listen_end == 1:#说话完成 已有录音文字返回 @@ -847,20 +1043,16 @@ class AIScreen(Screen):#AI_GUI self.not_talk_cb() def ai_talk_end(self):#语言识别完 思考结束显示最后的文本和音频数据 - AI_no_net_screen.add_flag(lv.obj.FLAG.HIDDEN) #隐藏 - AI_listen_screen.add_flag(lv.obj.FLAG.HIDDEN) - AI_think_screen.add_flag(lv.obj.FLAG.HIDDEN) #先隐藏 - AI_connect_timerout_screen.add_flag(lv.obj.FLAG.HIDDEN) #先隐藏 - AI_talk_screen.add_flag(lv.obj.FLAG.HIDDEN) # - AI_not_listen_text_screen.add_flag(lv.obj.FLAG.HIDDEN) # - AI_talk_end_screen.clear_flag(lv.obj.FLAG.HIDDEN) # + + - # self.AI_label_answer = "" + self.AI_label_answer = "" AI_end_screen_list_screen.scroll_to(0, 0, lv.ANIM.OFF) AI_label.set_pos(5, 10) - AI_label.set_text(self.AI_label_answer) - AI_label.set_text("数据解析中...") - + #AI_label.set_text(self.AI_label_answer) + AI_label.set_text("思考中...") + AI_label2.set_text(" ") + self.scroll_timer_count = 0 # self.AI_listen_text = "嗯。" str_len = len(self.AI_listen_text)*20 if str_len > 165: @@ -875,15 +1067,21 @@ class AIScreen(Screen):#AI_GUI AI_listen_text.set_text(self.AI_listen_text) EventMesh.publish("system_sleep_rest")#防止黑屏 self.refresh_count = 0 - self.refresh_texttimer.start(500,1,self.ai_talk_end_show_text)#stop() #(500,1,self.ai_talk_end_show_text) - def ai_talk_end_show_text(self,*argc): - EventMesh.publish("publish_message_event_ui",{"func":self.ai_talk_end_lcd_on,"data":0}) - def ai_talk_end_lcd_on(self,data): - EventMesh.publish("system_sleep_rest")#防止黑屏 + AI_no_net_screen.add_flag(lv.obj.FLAG.HIDDEN) #隐藏 + AI_listen_screen.add_flag(lv.obj.FLAG.HIDDEN) + AI_think_screen.add_flag(lv.obj.FLAG.HIDDEN) #先隐藏 + AI_connect_timerout_screen.add_flag(lv.obj.FLAG.HIDDEN) #先隐藏 + AI_talk_screen.add_flag(lv.obj.FLAG.HIDDEN) # + AI_not_listen_text_screen.add_flag(lv.obj.FLAG.HIDDEN) # + AI_talk_end_screen.clear_flag(lv.obj.FLAG.HIDDEN) # + AI_end_screen_list_screen2.add_flag(lv.obj.FLAG.HIDDEN) #隐藏2 + AI_end_screen_list_screen.clear_flag(lv.obj.FLAG.HIDDEN) # def ai_talk_end_show_text_cb(self,data): - AI_label.set_text(self.AI_label_answer) - + #AI_label.set_text(self.AI_label_answer) + #print("ai_talk_end_show_text_cb:scroll_timer_count{}".format(self.scroll_timer_count)) + if self.scroll_timer_count <= 0: + self.page_change(3,self.AI_label_answer)#刷新到最后内容 pass def connect_timerout_popup(self,msg):#连接超时弹窗提示 @@ -903,14 +1101,7 @@ class AIScreen(Screen):#AI_GUI def text_show_think(self,*argc): EventMesh.publish("publish_message_event_ui",{"func":self.text_show_think_cb,"data":0}) - def think_end_result(self): - if self.timer_out_count > 1: - if self.img_show_count_flag == 1: - return - self.timer_out_count = 0 - self.img_show_count_flag = 1 - self.refresh_texttimer.stop() - self.ai_talk_end() + def text_show_think_cb(self,data): #文本刷新 if self.img_show_count_flag == 1: self.refresh_texttimer.stop() @@ -953,6 +1144,18 @@ class AIScreen(Screen):#AI_GUI elif self.refresh_count == 3: al_think_screen_title1.set_text("正在思考...") pass + + def think_end_result(self): + EventMesh.publish("publish_message_event_ui",{"func":self.think_end_result_cb,"data":0}) + def think_end_result_cb(self,data): + if self.timer_out_count > 1: + if self.img_show_count_flag == 1: + return + self.timer_out_count = 0 + self.img_show_count_flag = 1 + self.refresh_texttimer.stop() + self.ai_talk_end() + def img_cb(self,e): #无网络 无数据按钮回调 self.refresh_texttimer.stop() AI_no_net_screen.add_flag(lv.obj.FLAG.HIDDEN) #隐藏 @@ -972,7 +1175,7 @@ class AIScreen(Screen):#AI_GUI AI_talk_end_screen.add_flag(lv.obj.FLAG.HIDDEN) #先隐藏 AI_not_listen_text_screen.add_flag(lv.obj.FLAG.HIDDEN) # AI_talk_screen.clear_flag(lv.obj.FLAG.HIDDEN) #先隐藏 - self.aud.setVolume(11)#设置最大声录音 + #self.aud.setVolume(11)#设置最大声录音 self.AI_label_answer = "" self.AI_client_chat_play_str = '' @@ -1014,7 +1217,7 @@ class AIScreen(Screen):#AI_GUI def AI_init(self): self.AI_audio_queue_thread_id = _thread.start_new_thread(self.AI_audio_queue_thread, ()) self.AI_send_data_queue_thread_id = _thread.start_new_thread(self.AI_send_data_queue_thread, ()) - + self._1S_timer.start(1000,1,self._1S_timer_cb) #按下录音 @@ -1060,23 +1263,33 @@ class AIScreen(Screen):#AI_GUI EventMesh.publish("publish_message_event_ui",{"func":self.talking,"data":e}) - - def text_show_refresh(self,*argc): - EventMesh.publish("publish_message_event_ui",{"func":self.text_show_refresh_cb,"data":0}) def talk_ars_end(self): - if self.AI_listen_text == "": - return + + self.record.stop()#关闭录音 self.record_timer.stop()#关闭定时器 self.timer_out_count = 0 - print("talk_ars_end!!!!!!!!!!!\r\n") - self.AI_client_chat_send(self.AI_listen_text) + self.AI_send_data_queue.clear() + 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 + print("talk_ars_end2!!!!!!!!!!!\r\n") + try: self.websocket_deconnect_asr() except Exception as e: usys.print_exception(e) + if self.AI_listen_text == "": + return + self.AI_client_chat_send(self.AI_listen_text) + def text_show_refresh(self,*argc): + EventMesh.publish("publish_message_event_ui",{"func":self.text_show_refresh_cb,"data":0}) + def text_show_refresh_cb(self,data): if self.AI_listen_end == 1 or self.timer_out_count >= 120:#语音识别结束 self.record.stop()#关闭录音 @@ -1189,6 +1402,10 @@ class AIScreen(Screen):#AI_GUI #EventMesh.publish("load_screen", {"screen": "no_sim_popup_screen"}) else: pass + def _1S_timer_cb(self,*argc): + EventMesh.publish("system_sleep_rest")#防止黑屏 + if self.scroll_timer_count > 0: + self.scroll_timer_count-=1 #定时器 def record_timer_cb(self,*argc): EventMesh.publish("system_sleep_rest")#防止黑屏 @@ -1218,7 +1435,7 @@ class AIScreen(Screen):#AI_GUI #if self.AI_client_chat_isconnect == 0: # 创建客户端, debug=True输出日志, ip和端口需要自己填写, 或者是域名 try: - self.AI_client_chat = uwebsocket.Client.connect('ws://121.40.67.151:9099/chat/ws', debug=False) + self.AI_client_chat = uwebsocket.Client.connect('ws://118.145.158.207:80/chat/ws', debug=False) except Exception as e: #网络连接异常 usys.print_exception(e) print("websocket_connect_chat error!!!\r\n") @@ -1271,15 +1488,18 @@ class AIScreen(Screen):#AI_GUI else: # if self.AI_label_str: # self.AI_client_tts_send(self.AI_label_str)#TTS语音播放AI结果 - print("AI_client_chat_recv chat_data start\r\n") + #print("AI_client_chat_recv chat_data start\r\n") if jsload_data['type']=='start': self.AI_label_str = "" self.AI_client_chat_end_flag = 0 + self.AI_client_tts_data_len = 0 self.websocket_connect_tts() #连接tts # elif jsload_data['type']=='end': print("chat end!!!!!!!!!!!!!!") self.AI_client_chat_end_flag = 1 + if len(self.AI_client_chat_play_str) > 100: + utime.sleep_ms(100) except Exception as e: usys.print_exception(e) @@ -1291,17 +1511,17 @@ class AIScreen(Screen):#AI_GUI ############################################################################## #文字转语音链路 def websocket_connect_tts(self): - print("websocket_connect_tts:{}!!!!!!!!!!!!!!!!!!!!!!".format(self.AI_client_tts_isconnect)) + #print("websocket_connect_tts:{}!!!!!!!!!!!!!!!!!!!!!!".format(self.AI_client_tts_isconnect)) if self.AI_client_tts_isconnect == 0: try: # self.AI_client_tts = uwebsocket.Client.connect('ws://40.67.151:9099/tts/', debug=False) - self.AI_client_tts = uwebsocket.Client.connect('ws://121.40.67.151:9099/tts/long-text-stream', debug=False) + self.AI_client_tts = uwebsocket.Client.connect('ws://118.145.158.207:80/tts/long-text-stream', debug=False) except Exception as e: #网络连接异常 usys.print_exception(e) print("websocket_connect_tts ERROR:{}\r\n".format(e)) self.connect_timerout_popup(2) return - print("websocket_connect_tts:self.AI_client_tts {}\r\n".format(self.AI_client_tts)) + #print("websocket_connect_tts:self.AI_client_tts {}\r\n".format(self.AI_client_tts)) # 线程接收数据 if self.AI_client_tts_recv_id != 0: try: @@ -1328,9 +1548,9 @@ class AIScreen(Screen):#AI_GUI if self.TTS_PRO_TYPE == 1: #tts数据入队 self.AI_client_tts_put_data() - print("AI_audio_queue.size:{},AI_send_data_queue.size:{} self.AI_client_chat_play_str:{} self.AI_client_tts_tra_flag:{}\r\n".format(self.AI_audio_queue.size(),self.AI_send_data_queue.size(),self.AI_client_chat_play_str,self.AI_client_tts_tra_flag) ) + #print("AI_audio_queue.size:{},AI_send_data_queue.size:{} self.AI_client_chat_play_str:{} self.AI_client_tts_tra_flag:{}\r\n".format(self.AI_audio_queue.size(),self.AI_send_data_queue.size(),self.AI_client_chat_play_str,self.AI_client_tts_tra_flag) ) #字符串分段发送,等待播放缓存变小 - 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字节 + if len(self.AI_client_chat_play_str) >0 and self.AI_client_tts_data_len < 130*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 @@ -1339,7 +1559,7 @@ class AIScreen(Screen):#AI_GUI 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 or (self.tts_time_outcount < 3 and len(self.AI_client_chat_play_str) < 100):#存了超过4句,就等小于3次在转化 + if self.AI_audio_queue.size() >= 4 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:#没找到句号或者逗号,切割字符串 @@ -1350,8 +1570,8 @@ class AIScreen(Screen):#AI_GUI return self.AI_client_tts_send(play_str)#TTS语音播放AI结果 self.AI_client_chat_play_str = self.AI_client_chat_play_str[len(play_str):] - print("TTS play:len{},data{}".format(len(play_str),play_str)) - if len(self.AI_client_chat_play_str) <=0 and self.AI_client_chat_end_flag ==1 : + #print("TTS play:len{},data{}".format(len(play_str),play_str)) + if self.TTS_PRO_TYPE == 1 and len(self.AI_client_chat_play_str) <=0 and self.AI_client_chat_end_flag ==1 : self.AI_client_chat_end_flag=0 self.AI_client_tts_end() @@ -1367,11 +1587,11 @@ class AIScreen(Screen):#AI_GUI "trace_id": self.get_trace_id() }, "payload": { - "voice":"xiaoyun", + "voice":"zhixiaomei",#"xiaoyun", "format":"mp3", "sample_rate":8000, "volume":90, - "speech_rate":2, + "speech_rate":30, "text":"%s"%(data_str) } } @@ -1387,16 +1607,18 @@ class AIScreen(Screen):#AI_GUI self.record_timer.stop()#关闭定时器 self.tts_time_count = 0 self.tts_data_tmp = b'' - self.AI_client_tts_data_len = 0 + self.AI_client_tts_data_total_len = 0 self.AI_client_tts_str_total_len= 0 #self.AI_client_tts_str_sen = "" if self.TTS_PRO_TYPE == 1: + self.AI_client_tts_data_len = 0 self.AI_client_tts_tra_flag = 1 self.AI_client_tts.send(json_data) utime.sleep_ms(100) #self.AI_send_data_queue.put([self.AI_client_tts_num,json_data]) + def AI_client_tts_end(self): if self.TTS_PRO_TYPE == 1: data_l ={"header": {"event": "StopSynthesis","trace_id": self.get_trace_id()}} @@ -1419,6 +1641,7 @@ class AIScreen(Screen):#AI_GUI self.tts_data_tmp = b'' if self.TTS_PRO_TYPE == 1: self.AI_client_tts_tra_flag = 0 + gc.collect()#GC主动回收内存 #文字转语音链路读数据 def AI_client_tts_recv(self,cli): recv_data_len_same_count = 0 @@ -1428,6 +1651,7 @@ class AIScreen(Screen):#AI_GUI # 死循环接收数据 recv_data = cli.recv() + if not recv_data: # 服务器关闭连接或客户端关闭连接 print("AI_client_tts_recv close!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\r\n") @@ -1437,10 +1661,10 @@ class AIScreen(Screen):#AI_GUI print("AI_client_tts_recv :{}".format(len(recv_data))) #结束标志{"header":{"event":"EndSynthesis","msg":"success","status":20000000,"task_id":"ffd727e620000803280c5a6498d0e321"}} if isinstance(recv_data, str): - print("AI_client_tts_recv:str recv_data:{}".format(recv_data)) + #print("AI_client_tts_recv:str recv_data:{}".format(recv_data)) if recv_data.find('\"event\":\"EndSynthesis\"') != -1: - print("EndSynthesis!!!!!!!!!!!!!!!!!\r\n") - print("EndSynthesis!!!!!!!!!!!!!!!!!!\r\n") + #print("EndSynthesis!!!!!!!!!!!!!!!!!\r\n") + #print("EndSynthesis!!!!!!!!!!!!!!!!!!\r\n") #self.tts_data_tmp=self.tts_data_tmp[9:-100] try: self.websocket_deconnect_tts()#断开 @@ -1478,7 +1702,8 @@ class AIScreen(Screen):#AI_GUI usys.print_exception(e) # print(recv_data) # print(type(recv_data)) - + mem = gc.mem_free() + print('2剩余内存RAM:{} KB'.format(mem / 1024)) except Exception as e: usys.print_exception(e) break @@ -1495,7 +1720,7 @@ class AIScreen(Screen):#AI_GUI usys.print_exception(e) try: - self.AI_client_asr = uwebsocket.Client.connect('ws://121.40.67.151:9099/asr/ws', debug=False) + self.AI_client_asr = uwebsocket.Client.connect('ws://118.145.158.207:80/asr/ws', debug=False) except Exception as e: #网络连接异常 usys.print_exception(e) print("websocket_connect_asr error!!!\r\n") @@ -1518,8 +1743,7 @@ class AIScreen(Screen):#AI_GUI #self.AI_client_asr.send(data_bytes) self.AI_send_data_queue.put([self.AI_client_asr_num,data_bytes]) def AI_client_asr_start(self): - - self.AI_send_data_queue.put([self.AI_client_asr_num,"{\"header\":{\"event\":\"StartTranscription\",\"trace_id\":\"3fa6b9e6a30b407ea38ad7ae69e6c291\"},\"payload\":{\"format\":\"amr\",\"sample_rate\":8000}}"]) + self.AI_send_data_queue.put([self.AI_client_asr_num,"{\"header\":{\"event\":\"StartTranscription\",\"trace_id\":\"%s\"},\"payload\":{\"format\":\"amr\",\"sample_rate\":8000}}"%(self.get_trace_id())]) #语音转文字链路读数据 def AI_client_asr_recv(self,cli): @@ -1537,7 +1761,12 @@ class AIScreen(Screen):#AI_GUI if isinstance(recv_data, str): jsload_data = ujson.loads(recv_data) print("jsload_data = {}".format(jsload_data)) + if recv_data.find('\"result\"') == -1: + #if jsload_data["result"] == None: + print("continue recv_data:{}".format(recv_data)) + continue if jsload_data["result"] == None: + print("continue recv_data:{}".format(recv_data)) continue if jsload_data["result"]["result"]: self.AI_listen_text = str(jsload_data["result"]["result"]) @@ -1596,6 +1825,8 @@ class AIScreen(Screen):#AI_GUI tmp = self.AI_client_chat.send(data[1]) print("chat send_data:{} tmp:{}".format(len(data[1]),tmp)) if data[0] == self.AI_client_asr_num: + if isinstance(data[1], str): + print("ASR:AI_client_asr_isconnect:{},data:{}",self.AI_client_asr_isconnect,data[1]) if self.AI_client_asr_isconnect == 0: try: self.websocket_connect_asr() @@ -1656,7 +1887,7 @@ class AIScreen(Screen):#AI_GUI data = self.AI_audio_queue.get() #self.AI_client_tts_data_len=len(data) - print("audio_queue:len:{},data{}".format(len(data[0]),data[1])) + #print("audio_queue:len:{},data{}".format(len(data[0]),data[1])) if len(data[0]) > 1: if self.TTS_PRO_TYPE == 0: @@ -1670,6 +1901,8 @@ class AIScreen(Screen):#AI_GUI if tmp != 0: print("2playStream:error tmp:{} data len:{}!!!!!!!!!!!!".format(tmp,len(data[0]))) self.AI_client_tts_data_len -=len(data[0]) + mem = gc.mem_free() + print('1剩余内存RAM:{} KB'.format(mem / 1024)) except Exception as e: print("AI_audio_queue_thread:ERROR:") usys.print_exception(e) @@ -1711,6 +1944,7 @@ class AIScreen(Screen):#AI_GUI self.AI_client_asr_recv_id = 0 except Exception as e: usys.print_exception(e) + self._1S_timer.stop() self.AI_send_data_queue.clear() print("close:AI_send_data_queue:size:{}".format(self.AI_send_data_queue.size())) self.AI_audio_queue.clear() @@ -1738,6 +1972,17 @@ class AIScreen(Screen):#AI_GUI self.websocket_deconnect_chat() except Exception as e: usys.print_exception(e) + + def done_bottom_to_top(self): + print("done_bottom_to_top:") + self.hard_flag_next = 1 + + def done_top_to_bottom(self): + # self.timer_start_cb() + print("done_top_to_bottom") + self.hard_flag_prev = 1 + pass + def done_return(self): EventMesh.publish("load_screen", {"screen": "main_menu"}) diff --git a/2.sdk/project/W8/sdk/services/microPython/ports/quectel/core/capacitive_hynitron_cst816d_update.py b/2.sdk/project/W8/sdk/services/microPython/ports/quectel/core/capacitive_hynitron_cst816d_update.py index f165c720..f0f8f6c4 100644 --- a/2.sdk/project/W8/sdk/services/microPython/ports/quectel/core/capacitive_hynitron_cst816d_update.py +++ b/2.sdk/project/W8/sdk/services/microPython/ports/quectel/core/capacitive_hynitron_cst816d_update.py @@ -966,7 +966,7 @@ app_bin_816d = [ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0xb6, 0x02, 0x40, 0x52, 0x48, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4d, 0x79, +0xb6, 0x02, 0x40, 0x52, 0x48, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4d, 0x79, ] #endif /*CAPACITIVE_HYNITRON_CST816D_UPDATE_H__*/ diff --git a/2.sdk/project/W8/sdk/services/microPython/ports/quectel/core/ui_main_menu.py b/2.sdk/project/W8/sdk/services/microPython/ports/quectel/core/ui_main_menu.py index 98b98610..1ce91a61 100644 --- a/2.sdk/project/W8/sdk/services/microPython/ports/quectel/core/ui_main_menu.py +++ b/2.sdk/project/W8/sdk/services/microPython/ports/quectel/core/ui_main_menu.py @@ -244,28 +244,28 @@ MainMenu2_img_sms_txt.add_style(style_font_youyuan_font_60, lv.PART.MAIN|lv.STAT MainMenu2_num+=1 MainMenu2x+=1 -# #AI助手 -# MainMenu2_ai = MainMenu2_til.add_tile(MainMenu2x, 0, lv.DIR.LEFT | lv.DIR.RIGHT) -# label_text = lv.label(MainMenu2_ai) -# label_text.set_pos(0, LCD_SIZE_H) -# label_text.set_size(0, 0) -# label_text.set_text("{}".format(MainMenu2_num)) -# MainMenu2_img_ai = lv.img(MainMenu2_ai) -# MainMenu2_img_ai.set_size(MAIN_ICON_SZIE,MAIN_ICON_SZIE) -# MainMenu2_img_ai.set_pos(MAIN_ICON_X,MAIN_ICON_Y) -# MainMenu2_img_ai.set_src("U:/static/IMAGE_ONE_PAGE_AI.png") -# MainMenu2_img_ai.add_flag(lv.obj.FLAG.CLICKABLE) -# MainMenu2_img_ai.add_style(style_MainMenu_img_default, lv.PART.MAIN | lv.STATE.DEFAULT) - -# MainMenu2_img_ai_txt = lv.label(MainMenu2_ai) -# MainMenu2_img_ai_txt.set_pos(int(0),int(MAIN_LABEL_Y)) -# MainMenu2_img_ai_txt.set_size(LCD_SIZE_W,LCD_SIZE_H-MAIN_LABEL_Y) -# MainMenu2_img_ai_txt.add_flag(lv.obj.FLAG.CLICKABLE) -# MainMenu2_img_ai_txt.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0) -# MainMenu2_img_ai_txt.set_text("AI助手") -# MainMenu2_img_ai_txt.add_style(style_font_youyuan_font_60, lv.PART.MAIN|lv.STATE.DEFAULT) -# MainMenu2_num+=1 -# MainMenu2x+=1 +#AI助手 +MainMenu2_ai = MainMenu2_til.add_tile(MainMenu2x, 0, lv.DIR.LEFT | lv.DIR.RIGHT) +label_text = lv.label(MainMenu2_ai) +label_text.set_pos(0, LCD_SIZE_H) +label_text.set_size(0, 0) +label_text.set_text("{}".format(MainMenu2_num)) +MainMenu2_img_ai = lv.img(MainMenu2_ai) +MainMenu2_img_ai.set_size(MAIN_ICON_SZIE,MAIN_ICON_SZIE) +MainMenu2_img_ai.set_pos(MAIN_ICON_X,MAIN_ICON_Y) +MainMenu2_img_ai.set_src("U:/static/IMAGE_ONE_PAGE_AI.png") +MainMenu2_img_ai.add_flag(lv.obj.FLAG.CLICKABLE) +MainMenu2_img_ai.add_style(style_MainMenu_img_default, lv.PART.MAIN | lv.STATE.DEFAULT) + +MainMenu2_img_ai_txt = lv.label(MainMenu2_ai) +MainMenu2_img_ai_txt.set_pos(int(0),int(MAIN_LABEL_Y)) +MainMenu2_img_ai_txt.set_size(LCD_SIZE_W,LCD_SIZE_H-MAIN_LABEL_Y) +MainMenu2_img_ai_txt.add_flag(lv.obj.FLAG.CLICKABLE) +MainMenu2_img_ai_txt.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0) +MainMenu2_img_ai_txt.set_text("AI助手") +MainMenu2_img_ai_txt.add_style(style_font_youyuan_font_60, lv.PART.MAIN|lv.STATE.DEFAULT) +MainMenu2_num+=1 +MainMenu2x+=1 #微聊 MainMenu2_wechat = MainMenu2_til.add_tile(MainMenu2x, 0, lv.DIR.LEFT | lv.DIR.RIGHT) @@ -312,6 +312,8 @@ MainMenu2x+=1 # MainMenu2_img_health_txt.add_style(style_font_youyuan_font_60, lv.PART.MAIN|lv.STATE.DEFAULT) # MainMenu2_num+=1 # MainMenu2x+=1 + + #血样检测 # MainMenu2_spo2 = MainMenu2_til.add_tile(4, 0, lv.DIR.LEFT | lv.DIR.RIGHT) # label_text = lv.label(MainMenu2_spo2) @@ -580,27 +582,32 @@ MainMenu1_img_wechat.add_style(style_MainMenu_img_default, lv.PART.MAIN | lv.STA # MainMenu1_img_health_text.add_style(style_font_youyuan_20_black, lv.PART.MAIN|lv.STATE.DEFAULT) -# MainMenu1_img_ai_text = lv.label(MainMenu1_three) -# MainMenu1_img_ai_text.set_pos(MAIN1_ICON_X*2+85,MAIN1_ICON_Y+5) -# MainMenu1_img_ai_text.set_size(THEME1_ICON_X,THEME1_ICON_X) -# MainMenu1_img_ai_text.add_flag(lv.obj.FLAG.CLICKABLE) -# MainMenu1_img_ai_text.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0) -# MainMenu1_img_ai_text.set_text(" ") -# MainMenu1_img_ai_text.add_style(style_font_youyuan_20_black, lv.PART.MAIN|lv.STATE.DEFAULT) - +MainMenu1_img_ai_text = lv.label(MainMenu1_three) +MainMenu1_img_ai_text.set_pos(MAIN1_ICON_X*2,MAIN1_ICON_Y+5) +MainMenu1_img_ai_text.set_size(THEME1_ICON_X,THEME1_ICON_X) +MainMenu1_img_ai_text.add_flag(lv.obj.FLAG.CLICKABLE) +MainMenu1_img_ai_text.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0) +MainMenu1_img_ai_text.set_text(" ") +MainMenu1_img_ai_text.add_style(style_font_youyuan_20_black, lv.PART.MAIN|lv.STATE.DEFAULT) MainMenu1_img_wechat_text = lv.label(MainMenu1_three) -MainMenu1_img_wechat_text.set_pos(MAIN1_ICON_X,MAIN1_ICON_Y+5) +MainMenu1_img_wechat_text.set_pos(MAIN1_ICON_X*2+85,MAIN1_ICON_Y+5) MainMenu1_img_wechat_text.set_size(THEME1_ICON_X,THEME1_ICON_X) MainMenu1_img_wechat_text.add_flag(lv.obj.FLAG.CLICKABLE) MainMenu1_img_wechat_text.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0) MainMenu1_img_wechat_text.set_text(" ") MainMenu1_img_wechat_text.add_style(style_font_youyuan_20_black, lv.PART.MAIN|lv.STATE.DEFAULT) +# MainMenu1_img_alarm= lv.img(MainMenu1_three) +# MainMenu1_img_alarm.set_size(THEME1_ICON_X,THEME1_ICON_Y) +# MainMenu1_img_alarm.set_pos(MAIN1_ICON_X*2+85,MAIN1_ICON_Y+5) +# MainMenu1_img_alarm.set_src("U:/static/theme1/THEME1_ALARM.png") +# MainMenu1_img_alarm.add_flag(lv.obj.FLAG.CLICKABLE) +# MainMenu1_img_alarm.add_style(style_MainMenu_img_default, lv.PART.MAIN | lv.STATE.DEFAULT) MainMenu1_img_alarm_text = lv.label(MainMenu1_three) -MainMenu1_img_alarm_text.set_pos(MAIN1_ICON_X*2+85,MAIN1_ICON_Y+5) +MainMenu1_img_alarm_text.set_pos(MAIN1_ICON_X,140+5) MainMenu1_img_alarm_text.set_size(THEME1_ICON_X,THEME1_ICON_X) MainMenu1_img_alarm_text.add_flag(lv.obj.FLAG.CLICKABLE) MainMenu1_img_alarm_text.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0) @@ -608,22 +615,13 @@ MainMenu1_img_alarm_text.set_text(" ") MainMenu1_img_alarm_text.add_style(style_font_youyuan_20_black, lv.PART.MAIN|lv.STATE.DEFAULT) MainMenu1_img_camera_text = lv.label(MainMenu1_three) -MainMenu1_img_camera_text.set_pos(MAIN1_ICON_X,140+5) +MainMenu1_img_camera_text.set_pos(MAIN1_ICON_X*2+85,140+5) MainMenu1_img_camera_text.set_size(THEME1_ICON_X,THEME1_ICON_X) MainMenu1_img_camera_text.add_flag(lv.obj.FLAG.CLICKABLE) MainMenu1_img_camera_text.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0) MainMenu1_img_camera_text.set_text(" ") MainMenu1_img_camera_text.add_style(style_font_youyuan_20, lv.PART.MAIN|lv.STATE.DEFAULT) -MainMenu1_img_picture_text = lv.label(MainMenu1_three) -MainMenu1_img_picture_text.set_pos(int(MAIN1_ICON_X*2+85),int(140+5)) -MainMenu1_img_picture_text.set_size(THEME1_ICON_X,THEME1_ICON_X) -MainMenu1_img_picture_text.add_flag(lv.obj.FLAG.CLICKABLE) -MainMenu1_img_picture_text.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0) -MainMenu1_img_picture_text.set_text(" ") -MainMenu1_img_picture_text.add_style(style_font_youyuan_20_black, lv.PART.MAIN|lv.STATE.DEFAULT) - - MainMenu1_num+=1 MainMenu1x+=1 #相机,相册,视频通话,支付宝 @@ -640,10 +638,24 @@ MainMenu1_img_toolbox.set_src("U:/static/theme1/THEME1_CAMERA.png") # MainMenu1_img_toolbox.add_flag(lv.obj.FLAG.CLICKABLE) MainMenu1_img_toolbox.add_style(style_MainMenu_img_default, lv.PART.MAIN | lv.STATE.DEFAULT) +# MainMenu1_img_camera_text = lv.label(MainMenu1_four) +# MainMenu1_img_camera_text.set_pos(MAIN1_ICON_X,MAIN1_ICON_Y+5) +# MainMenu1_img_camera_text.set_size(THEME1_ICON_X,THEME1_ICON_X) +# MainMenu1_img_camera_text.add_flag(lv.obj.FLAG.CLICKABLE) +# MainMenu1_img_camera_text.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0) +# MainMenu1_img_camera_text.set_text(" ") +# MainMenu1_img_camera_text.add_style(style_font_youyuan_20, lv.PART.MAIN|lv.STATE.DEFAULT) +MainMenu1_img_picture_text = lv.label(MainMenu1_four) +MainMenu1_img_picture_text.set_pos(int(MAIN1_ICON_X),int(MAIN1_ICON_Y+5)) +MainMenu1_img_picture_text.set_size(THEME1_ICON_X,THEME1_ICON_X) +MainMenu1_img_picture_text.add_flag(lv.obj.FLAG.CLICKABLE) +MainMenu1_img_picture_text.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0) +MainMenu1_img_picture_text.set_text(" ") +MainMenu1_img_picture_text.add_style(style_font_youyuan_20_black, lv.PART.MAIN|lv.STATE.DEFAULT) MainMenu1_img_video_text = lv.label(MainMenu1_four) -MainMenu1_img_video_text.set_pos(MAIN1_ICON_X,MAIN1_ICON_Y+5) +MainMenu1_img_video_text.set_pos(MAIN1_ICON_X*2+85,MAIN1_ICON_Y+5) MainMenu1_img_video_text.set_size(THEME1_ICON_X,THEME1_ICON_X) MainMenu1_img_video_text.add_flag(lv.obj.FLAG.CLICKABLE) MainMenu1_img_video_text.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0) @@ -651,63 +663,21 @@ MainMenu1_img_video_text.set_text(" ") MainMenu1_img_video_text.add_style(style_font_youyuan_20, lv.PART.MAIN|lv.STATE.DEFAULT) MainMenu1_img_alipay_text = lv.label(MainMenu1_four) -MainMenu1_img_alipay_text.set_pos(MAIN1_ICON_X*2+85,MAIN1_ICON_Y+5) +MainMenu1_img_alipay_text.set_pos(MAIN1_ICON_X,140+5) MainMenu1_img_alipay_text.set_size(THEME1_ICON_X,THEME1_ICON_X) MainMenu1_img_alipay_text.add_flag(lv.obj.FLAG.CLICKABLE) MainMenu1_img_alipay_text.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0) MainMenu1_img_alipay_text.set_text(" ") MainMenu1_img_alipay_text.add_style(style_font_youyuan_20, lv.PART.MAIN|lv.STATE.DEFAULT) -# MainMenu1_img_camera_text = lv.label(MainMenu1_four) -# MainMenu1_img_camera_text.set_pos(MAIN1_ICON_X,MAIN1_ICON_Y+5) -# MainMenu1_img_camera_text.set_size(THEME1_ICON_X,THEME1_ICON_X) -# MainMenu1_img_camera_text.add_flag(lv.obj.FLAG.CLICKABLE) -# MainMenu1_img_camera_text.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0) -# MainMenu1_img_camera_text.set_text(" ") -# MainMenu1_img_camera_text.add_style(style_font_youyuan_20, lv.PART.MAIN|lv.STATE.DEFAULT) - -# MainMenu1_img_picture_text = lv.label(MainMenu1_four) -# MainMenu1_img_picture_text.set_pos(int(MAIN1_ICON_X*2+85),int(MAIN1_ICON_Y+5)) -# MainMenu1_img_picture_text.set_size(THEME1_ICON_X,THEME1_ICON_X) -# MainMenu1_img_picture_text.add_flag(lv.obj.FLAG.CLICKABLE) -# MainMenu1_img_picture_text.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0) -# MainMenu1_img_picture_text.set_text(" ") -# MainMenu1_img_picture_text.add_style(style_font_youyuan_20_black, lv.PART.MAIN|lv.STATE.DEFAULT) - MainMenu1_img_stopwatch_text = lv.label(MainMenu1_four) -MainMenu1_img_stopwatch_text.set_pos(MAIN1_ICON_X,140+5) +MainMenu1_img_stopwatch_text.set_pos(MAIN1_ICON_X*2+85,140+5) MainMenu1_img_stopwatch_text.set_size(THEME1_ICON_X,THEME1_ICON_Y) MainMenu1_img_stopwatch_text.add_flag(lv.obj.FLAG.CLICKABLE) MainMenu1_img_stopwatch_text.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0) MainMenu1_img_stopwatch_text.set_text(" ") MainMenu1_img_stopwatch_text.add_style(style_font_youyuan_20_black, lv.PART.MAIN|lv.STATE.DEFAULT) - -MainMenu1_img_countdown_text = lv.label(MainMenu1_four) -MainMenu1_img_countdown_text.set_pos(MAIN1_ICON_X*2+85,140+5) -MainMenu1_img_countdown_text.set_size(THEME1_ICON_X,THEME1_ICON_Y) -MainMenu1_img_countdown_text.add_flag(lv.obj.FLAG.CLICKABLE) -MainMenu1_img_countdown_text.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0) -MainMenu1_img_countdown_text.set_text(" ") -MainMenu1_img_countdown_text.add_style(style_font_youyuan_20_black, lv.PART.MAIN|lv.STATE.DEFAULT) - -# MainMenu1_img_video_text = lv.label(MainMenu1_four) -# MainMenu1_img_video_text.set_pos(MAIN1_ICON_X,140+5) -# MainMenu1_img_video_text.set_size(THEME1_ICON_X,THEME1_ICON_X) -# MainMenu1_img_video_text.add_flag(lv.obj.FLAG.CLICKABLE) -# MainMenu1_img_video_text.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0) -# MainMenu1_img_video_text.set_text(" ") -# MainMenu1_img_video_text.add_style(style_font_youyuan_20, lv.PART.MAIN|lv.STATE.DEFAULT) - -# MainMenu1_img_alipay_text = lv.label(MainMenu1_four) -# MainMenu1_img_alipay_text.set_pos(MAIN1_ICON_X*2+85,140+5) -# MainMenu1_img_alipay_text.set_size(THEME1_ICON_X,THEME1_ICON_X) -# MainMenu1_img_alipay_text.add_flag(lv.obj.FLAG.CLICKABLE) -# MainMenu1_img_alipay_text.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0) -# MainMenu1_img_alipay_text.set_text(" ") -# MainMenu1_img_alipay_text.add_style(style_font_youyuan_20, lv.PART.MAIN|lv.STATE.DEFAULT) - - MainMenu1_num+=1 MainMenu1x+=1 #工具箱 设置 @@ -718,7 +688,7 @@ label_text.set_size(0, 0) label_text.set_text("{}".format(MainMenu1_num)) MainMenu1_img_setting = lv.img(MainMenu1_setting) -MainMenu1_img_setting.set_size(240,140) +MainMenu1_img_setting.set_size(240,282) MainMenu1_img_setting.set_pos(0,0) MainMenu1_img_setting.set_src("U:/static/theme1/THEME1_SETING.png") # MainMenu1_img_setting.add_flag(lv.obj.FLAG.CLICKABLE) @@ -733,16 +703,16 @@ MainMenu1_img_setting.add_style(style_MainMenu_img_default, lv.PART.MAIN | lv.ST # MainMenu1_img_stopwatch_text.add_style(style_font_youyuan_20_black, lv.PART.MAIN|lv.STATE.DEFAULT) -# MainMenu1_img_countdown_text = lv.label(MainMenu1_setting) -# MainMenu1_img_countdown_text.set_pos(MAIN1_ICON_X*2+85,MAIN1_ICON_Y+5) -# MainMenu1_img_countdown_text.set_size(THEME1_ICON_X,THEME1_ICON_Y) -# MainMenu1_img_countdown_text.add_flag(lv.obj.FLAG.CLICKABLE) -# MainMenu1_img_countdown_text.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0) -# MainMenu1_img_countdown_text.set_text(" ") -# MainMenu1_img_countdown_text.add_style(style_font_youyuan_20_black, lv.PART.MAIN|lv.STATE.DEFAULT) +MainMenu1_img_countdown_text = lv.label(MainMenu1_setting) +MainMenu1_img_countdown_text.set_pos(MAIN1_ICON_X,MAIN1_ICON_Y+5) +MainMenu1_img_countdown_text.set_size(THEME1_ICON_X,THEME1_ICON_Y) +MainMenu1_img_countdown_text.add_flag(lv.obj.FLAG.CLICKABLE) +MainMenu1_img_countdown_text.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0) +MainMenu1_img_countdown_text.set_text(" ") +MainMenu1_img_countdown_text.add_style(style_font_youyuan_20_black, lv.PART.MAIN|lv.STATE.DEFAULT) MainMenu1_img_toolbox_text = lv.label(MainMenu1_setting) -MainMenu1_img_toolbox_text.set_pos(int(MAIN1_ICON_X),int(MAIN1_ICON_Y+5)) +MainMenu1_img_toolbox_text.set_pos(int(MAIN1_ICON_X*2+85),int(MAIN1_ICON_Y+5)) MainMenu1_img_toolbox_text.set_size(THEME1_ICON_X,THEME1_ICON_X) MainMenu1_img_toolbox_text.add_flag(lv.obj.FLAG.CLICKABLE) MainMenu1_img_toolbox_text.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0) @@ -750,7 +720,7 @@ MainMenu1_img_toolbox_text.set_text(" ") MainMenu1_img_toolbox_text.add_style(style_font_youyuan_20_black, lv.PART.MAIN|lv.STATE.DEFAULT) MainMenu1_img_setting_text = lv.label(MainMenu1_setting) -MainMenu1_img_setting_text.set_pos(int(MAIN1_ICON_X*2+85),int(MAIN1_ICON_Y+5)) +MainMenu1_img_setting_text.set_pos(int(MAIN1_ICON_X),int(140+5)) MainMenu1_img_setting_text.set_size(THEME1_ICON_X,THEME1_ICON_X) MainMenu1_img_setting_text.add_flag(lv.obj.FLAG.CLICKABLE) MainMenu1_img_setting_text.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0) @@ -791,6 +761,7 @@ class MainMenuScreen(Screen): ###1 MainMenu1_til.add_event_cb(lambda e: EventMesh.callback_wrapper(self.scroll_begin_event_cb(e)),lv.EVENT.SCROLL_END,None) + MainMenu1_img_contacts_text.add_event_cb(lambda e: EventMesh.callback_wrapper(self.img_cb(e, "contacts")), lv.EVENT.SHORT_CLICKED, None) MainMenu1_img_contacts_text.add_event_cb(lambda e: EventMesh.callback_wrapper(self.img_cb(e, "contacts")), lv.EVENT.PRESSING, None) @@ -804,6 +775,12 @@ class MainMenuScreen(Screen): MainMenu1_img_phone_text.add_event_cb(lambda e: EventMesh.callback_wrapper(self.img_cb(e, "Phone")), lv.EVENT.PRESSING, None) + # MainMenu1_img_health_text.add_event_cb(lambda e: EventMesh.callback_wrapper(self.img_cb(e, "health")), lv.EVENT.SHORT_CLICKED, None) + # MainMenu1_img_health_text.add_event_cb(lambda e: EventMesh.callback_wrapper(self.img_cb(e, "health")), lv.EVENT.PRESSING, None) + + MainMenu1_img_ai_text.add_event_cb(lambda e: EventMesh.callback_wrapper(self.img_cb(e, "AI_success")), lv.EVENT.SHORT_CLICKED, None) + MainMenu1_img_ai_text.add_event_cb(lambda e: EventMesh.callback_wrapper(self.img_cb(e, "AI_success")), lv.EVENT.PRESSING, None) + MainMenu1_img_wechat_text.add_event_cb(lambda e: EventMesh.callback_wrapper(self.img_cb(e, "wechat")), lv.EVENT.SHORT_CLICKED, None) MainMenu1_img_wechat_text.add_event_cb(lambda e: EventMesh.callback_wrapper(self.img_cb(e, "wechat")), lv.EVENT.PRESSING, None) @@ -840,12 +817,12 @@ class MainMenuScreen(Screen): print("MainMenu1:__init__") MainMenu2_til.add_event_cb(lambda e: EventMesh.callback_wrapper(self.scroll_begin_event_cb(e)),lv.EVENT.SCROLL_END,None) #lv_obj_add_event_cb(lv_tabview_get_content(tabview), scroll_begin_event, LV_EVENT_SCROLL_END, NULL); - MainMenu2_img_phone.add_event_cb(lambda e: EventMesh.callback_wrapper(self.img_cb(e, "Phone")), lv.EVENT.SHORT_CLICKED, None) + MainMenu2_img_phone.add_event_cb(lambda e: EventMesh.callback_wrapper(self.img_cb(e, "aigc_mainlist")), lv.EVENT.SHORT_CLICKED, None) MainMenu2_img_toolbox.add_event_cb(lambda e: EventMesh.callback_wrapper(self.img_cb(e, "toolbox")), lv.EVENT.SHORT_CLICKED, None) MainMenu2_img_setting.add_event_cb(lambda e: EventMesh.callback_wrapper(self.img_cb(e, "setting")), lv.EVENT.SHORT_CLICKED, None) # MainMenu2_img_health.add_event_cb(lambda e: EventMesh.callback_wrapper(self.img_cb(e, "health")), lv.EVENT.SHORT_CLICKED, None) MainMenu2_img_contacts.add_event_cb(lambda e: EventMesh.callback_wrapper(self.img_cb(e, "contacts")), lv.EVENT.SHORT_CLICKED, None) - # MainMenu2_img_ai.add_event_cb(lambda e: EventMesh.callback_wrapper(self.img_cb(e, "AI_success")), lv.EVENT.SHORT_CLICKED, None) + MainMenu2_img_ai.add_event_cb(lambda e: EventMesh.callback_wrapper(self.img_cb(e, "AI_success")), lv.EVENT.SHORT_CLICKED, None) MainMenu2_img_wechat.add_event_cb(lambda e: EventMesh.callback_wrapper(self.img_cb(e, "wechat")), lv.EVENT.SHORT_CLICKED, None) # MainMenu2_img_spo2.add_event_cb(lambda e: EventMesh.callback_wrapper(self.img_cb(e, "spo2")), lv.EVENT.SHORT_CLICKED, None) @@ -856,12 +833,12 @@ class MainMenuScreen(Screen): MainMenu2_img_camera.add_event_cb(lambda e: EventMesh.callback_wrapper(self.img_cb(e, "camera")), lv.EVENT.SHORT_CLICKED, None) MainMenu2_img_camera_album.add_event_cb(lambda e: EventMesh.callback_wrapper(self.img_cb(e, "camera_album")), lv.EVENT.SHORT_CLICKED, None) - MainMenu2_img_phone.add_event_cb(lambda e: EventMesh.callback_wrapper(self.img_cb(e, "Phone")), lv.EVENT.PRESSING, None) + MainMenu2_img_phone.add_event_cb(lambda e: EventMesh.callback_wrapper(self.img_cb(e, "aigc_mainlist")), lv.EVENT.PRESSING, None) MainMenu2_img_toolbox.add_event_cb(lambda e: EventMesh.callback_wrapper(self.img_cb(e, "toolbox")), lv.EVENT.PRESSING, None) MainMenu2_img_setting.add_event_cb(lambda e: EventMesh.callback_wrapper(self.img_cb(e, "setting")), lv.EVENT.PRESSING, None) # MainMenu2_img_health.add_event_cb(lambda e: EventMesh.callback_wrapper(self.img_cb(e, "health")), lv.EVENT.PRESSING, None) MainMenu2_img_contacts.add_event_cb(lambda e: EventMesh.callback_wrapper(self.img_cb(e, "contacts")), lv.EVENT.PRESSING, None) - # MainMenu2_img_ai.add_event_cb(lambda e: EventMesh.callback_wrapper(self.img_cb(e, "AI_success")), lv.EVENT.PRESSING, None) + MainMenu2_img_ai.add_event_cb(lambda e: EventMesh.callback_wrapper(self.img_cb(e, "AI_success")), lv.EVENT.PRESSING, None) MainMenu2_img_wechat.add_event_cb(lambda e: EventMesh.callback_wrapper(self.img_cb(e, "wechat")), lv.EVENT.PRESSING, None) # MainMenu2_img_spo2.add_event_cb(lambda e: EventMesh.callback_wrapper(self.img_cb(e, "spo2")), lv.EVENT.CLICKED, None) MainMenu2_img_sms.add_event_cb(lambda e: EventMesh.callback_wrapper(self.img_cb(e, "popup")), lv.EVENT.PRESSING, None) diff --git a/2.sdk/project/W8/usr/static/IMAGE_ONE_PAGE_AI.png b/2.sdk/project/W8/usr/static/IMAGE_ONE_PAGE_AI.png index a12ac93e..4bbe1857 100644 Binary files a/2.sdk/project/W8/usr/static/IMAGE_ONE_PAGE_AI.png and b/2.sdk/project/W8/usr/static/IMAGE_ONE_PAGE_AI.png differ diff --git a/2.sdk/project/W8/usr/static/theme1/THEME1_CAMERA.png b/2.sdk/project/W8/usr/static/theme1/THEME1_CAMERA.png index bce60a99..b175b0f4 100644 Binary files a/2.sdk/project/W8/usr/static/theme1/THEME1_CAMERA.png and b/2.sdk/project/W8/usr/static/theme1/THEME1_CAMERA.png differ diff --git a/2.sdk/project/W8/usr/static/theme1/THEME1_SETING.png b/2.sdk/project/W8/usr/static/theme1/THEME1_SETING.png index 82a1ee46..2464976f 100644 Binary files a/2.sdk/project/W8/usr/static/theme1/THEME1_SETING.png and b/2.sdk/project/W8/usr/static/theme1/THEME1_SETING.png differ diff --git a/2.sdk/project/W8/usr/static/theme1/THEME1_WECHAT.png b/2.sdk/project/W8/usr/static/theme1/THEME1_WECHAT.png index d2e01bc8..2ab9e3ec 100644 Binary files a/2.sdk/project/W8/usr/static/theme1/THEME1_WECHAT.png and b/2.sdk/project/W8/usr/static/theme1/THEME1_WECHAT.png differ