--- /dev/null
+import utime
+import audio
+from machine import Pin
+import osTimer
+import _thread
+from queue import Queue
+import uwebsocket
+import usys
+import EventMesh
+import constants
+import ujson
+import lvgl as lv
+import urandom
+import uhashlib
+import ubinascii
+from ui import style_font_youyuan_20,style_screen,Screen,style_img
+LCD_SIZE_H = 282
+LCD_SIZE_W = 240
+##########################
+import uwebsocket
+import urandom
+import uhashlib
+import ubinascii
+import base64
+import request
+import ql_fs
+import usys
+import uos
+
+aigc_create_screen = lv.obj()
+aigc_create_screen.add_style(style_screen, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+aigc_create_title_screen = lv.obj(aigc_create_screen)
+aigc_create_title_screen.set_pos(0, 0)
+aigc_create_title_screen.set_size(LCD_SIZE_W, LCD_SIZE_H)
+aigc_create_title_screen.set_scrollbar_mode(lv.SCROLLBAR_MODE.OFF)
+aigc_create_title_screen.add_style(style_screen, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+aigc_create_title = lv.label(aigc_create_title_screen)
+aigc_create_title.set_pos(0, 10)
+aigc_create_title.set_size(LCD_SIZE_W, 30)
+aigc_create_title.set_text("说出你想要的表盘")
+aigc_create_title.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+aigc_create_title.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+
+aigc_create_main_img = lv.img(aigc_create_title_screen)
+aigc_create_main_img.set_size(130,130)
+aigc_create_main_img.set_pos((LCD_SIZE_W-130)//2,40)
+aigc_create_main_img.set_src("E:/static/AI/AI_THINK001.png")
+aigc_create_main_img.add_flag(lv.obj.FLAG.CLICKABLE)
+aigc_create_main_img.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+ai_talk_bt = lv.btn(aigc_create_title_screen)
+ai_talk_bt.set_pos(int(5),int(210))
+ai_talk_bt.set_size(230,58)
+ai_talk_bt.set_scrollbar_mode(lv.SCROLLBAR_MODE.OFF)
+screen_btn_1_label = lv.label(ai_talk_bt)
+screen_btn_1_label.set_text("点击说话")
+ai_talk_bt.set_style_pad_all(0, lv.STATE.DEFAULT)
+screen_btn_1_label.align(lv.ALIGN.CENTER,0,0)
+# create style style_screen_btn_1_main_main_default
+style_screen_btn_1_main_main_default = lv.style_t()
+style_screen_btn_1_main_main_default.init()
+style_screen_btn_1_main_main_default.set_radius(30)
+style_screen_btn_1_main_main_default.set_bg_color(lv.color_make(0x37,0xbf,0x12))
+style_screen_btn_1_main_main_default.set_bg_grad_color(lv.color_make(0x37,0xbf,0x12))
+style_screen_btn_1_main_main_default.set_bg_grad_dir(lv.GRAD_DIR.NONE)
+style_screen_btn_1_main_main_default.set_bg_opa(255)
+style_screen_btn_1_main_main_default.set_border_color(lv.color_make(0x37,0xbf,0x12))
+style_screen_btn_1_main_main_default.set_border_width(0)
+style_screen_btn_1_main_main_default.set_border_opa(255)
+style_screen_btn_1_main_main_default.set_text_color(lv.color_make(0xff,0xff,0xff))
+style_screen_btn_1_main_main_default.set_text_font_v2("font_28.bin",28,0)
+style_screen_btn_1_main_main_default.set_text_align(lv.TEXT_ALIGN.CENTER)
+
+# add style for screen_btn_1
+ai_talk_bt.add_style(style_screen_btn_1_main_main_default, lv.PART.MAIN|lv.STATE.DEFAULT)
+
+
+# ai_talk_bt = lv.img(aigc_create_title_screen)
+# ai_talk_bt.set_size(120,25)
+# ai_talk_bt.set_pos((128-120)//2,96)
+# ai_talk_bt.set_src("U:/static/AI/ai_talk_bt.png")
+# ai_talk_bt.add_flag(lv.obj.FLAG.CLICKABLE)
+# ai_talk_bt.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+# ai_talk_bt_label = lv.label(aigc_create_title_screen)
+# ai_talk_bt_label.set_text(" ")
+# ai_talk_bt_label.set_size(120, 38)
+# ai_talk_bt_label.set_pos(0,90)
+# ai_talk_bt_label.add_flag(lv.obj.FLAG.CLICKABLE)
+
+# ai_talk_bt_label2 = lv.label(ai_talk_bt)
+# ai_talk_bt_label2.set_pos(0, 4)
+# ai_talk_bt_label2.set_size(120, 33)
+# ai_talk_bt_label2.set_text("点击说话")
+# ai_talk_bt_label2.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+# ai_talk_bt_label2.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+
+
+
+aigc_create_listen_screen = lv.obj(aigc_create_screen)
+print("aigc_create_listen_screen")
+aigc_create_listen_screen.set_pos(0, 0)
+aigc_create_listen_screen.set_size(LCD_SIZE_W, LCD_SIZE_H)
+aigc_create_listen_screen.add_flag(lv.obj.FLAG.HIDDEN)
+aigc_create_listen_screen.add_style(style_screen, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+aigc_create_listen_title = lv.label(aigc_create_listen_screen)
+aigc_create_listen_title.set_pos(0, 10)
+aigc_create_listen_title.set_size(LCD_SIZE_W, 30)
+aigc_create_listen_title.set_text("正在聆听中...")
+aigc_create_listen_title.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+aigc_create_listen_title.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+aigc_create_listen_img = lv.img(aigc_create_listen_screen)
+aigc_create_listen_img.set_size(130,130)
+aigc_create_listen_img.set_pos((LCD_SIZE_W-130)//2,40)
+aigc_create_listen_img.set_src("E:/static/AI/AI_THINK001.png")
+aigc_create_listen_img.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+ai_talk_listen_bt = lv.btn(aigc_create_listen_screen)
+ai_talk_listen_bt.set_pos(int(5),int(210))
+ai_talk_listen_bt.set_size(230,58)
+ai_talk_listen_bt.set_scrollbar_mode(lv.SCROLLBAR_MODE.OFF)
+ai_talk_bt_listen_label2 = lv.label(ai_talk_listen_bt)
+ai_talk_bt_listen_label2.set_text("30S")
+ai_talk_listen_bt.set_style_pad_all(0, lv.STATE.DEFAULT)
+ai_talk_bt_listen_label2.align(lv.ALIGN.CENTER,0,0)
+# create style style_screen_btn_1_main_main_default
+style_screen_btn_1_main_main_default = lv.style_t()
+style_screen_btn_1_main_main_default.init()
+style_screen_btn_1_main_main_default.set_radius(30)
+style_screen_btn_1_main_main_default.set_bg_color(lv.color_make(0x37,0xbf,0x12))
+style_screen_btn_1_main_main_default.set_bg_grad_color(lv.color_make(0x37,0xbf,0x12))
+style_screen_btn_1_main_main_default.set_bg_grad_dir(lv.GRAD_DIR.NONE)
+style_screen_btn_1_main_main_default.set_bg_opa(255)
+style_screen_btn_1_main_main_default.set_border_color(lv.color_make(0x37,0xbf,0x12))
+style_screen_btn_1_main_main_default.set_border_width(0)
+style_screen_btn_1_main_main_default.set_border_opa(255)
+style_screen_btn_1_main_main_default.set_text_color(lv.color_make(0xff,0xff,0xff))
+style_screen_btn_1_main_main_default.set_text_font_v2("font_28.bin",28,0)
+style_screen_btn_1_main_main_default.set_text_align(lv.TEXT_ALIGN.CENTER)
+
+# add style for screen_btn_1
+ai_talk_listen_bt.add_style(style_screen_btn_1_main_main_default, lv.PART.MAIN|lv.STATE.DEFAULT)
+
+
+# ai_talk_listen_bt = lv.img(aigc_create_listen_screen)
+# ai_talk_listen_bt.set_size(120,25)
+# ai_talk_listen_bt.set_pos((128-120)//2,96)
+# ai_talk_listen_bt.set_src("U:/static/AI/ai_talk_bt.png")
+# ai_talk_listen_bt.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+# ai_talk_bt_listen_label = lv.label(aigc_create_listen_screen)
+# ai_talk_bt_listen_label.set_text(" ")
+# ai_talk_bt_listen_label.set_size(120, 38)
+# ai_talk_bt_listen_label.set_pos(0,90)
+# ai_talk_bt_listen_label.add_flag(lv.obj.FLAG.CLICKABLE)
+
+# ai_talk_bt_listen_label2 = lv.label(ai_talk_listen_bt)
+# ai_talk_bt_listen_label2.set_pos(0, 4)
+# ai_talk_bt_listen_label2.set_size(120, 33)
+# ai_talk_bt_listen_label2.set_text("30s")
+# ai_talk_bt_listen_label2.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+# ai_talk_bt_listen_label2.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+
+aigc_success_text_screen = lv.obj(aigc_create_screen)
+print("aigc_success_text_screen")
+aigc_success_text_screen.set_pos(0, 0)
+aigc_success_text_screen.set_size(LCD_SIZE_W, LCD_SIZE_H)
+aigc_success_text_screen.add_flag(lv.obj.FLAG.HIDDEN)
+aigc_success_text_screen.add_style(style_screen, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+aigc_success_text_screen_title = lv.label(aigc_success_text_screen)
+aigc_success_text_screen_title.set_pos(0, 40)
+aigc_success_text_screen_title.set_size(LCD_SIZE_W, 40)
+aigc_success_text_screen_title.set_text(" ")
+aigc_success_text_screen_title.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+aigc_success_text_screen_title.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+aigc_success_text_screen_title1 = lv.label(aigc_success_text_screen)
+aigc_success_text_screen_title1.set_pos(0, 160)
+aigc_success_text_screen_title1.set_size(LCD_SIZE_W, 20)
+aigc_success_text_screen_title1.set_text("是否生成表盘?")
+aigc_success_text_screen_title1.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+aigc_success_text_screen_title1.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+
+aigc_success_text_screen_comfir_btn = lv.label(aigc_success_text_screen)
+aigc_success_text_screen_comfir_btn.set_pos(0, 244)
+aigc_success_text_screen_comfir_btn.set_size(LCD_SIZE_W//2, 38)
+aigc_success_text_screen_comfir_btn.set_text(" ")
+aigc_success_text_screen_comfir_btn.add_flag(lv.obj.FLAG.CLICKABLE)
+aigc_success_text_screen_comfir_btn.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+aigc_success_text_screen_comfir_btn.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+aigc_success_text_screen_comfir = lv.label(aigc_success_text_screen)
+aigc_success_text_screen_comfir.set_pos(0, 240)
+aigc_success_text_screen_comfir.set_size(LCD_SIZE_W//2,33)
+aigc_success_text_screen_comfir.set_text("确定")
+aigc_success_text_screen_comfir.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+aigc_success_text_screen_comfir.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+aigc_success_text_screen_can_btn = lv.label(aigc_success_text_screen)
+aigc_success_text_screen_can_btn.set_pos(LCD_SIZE_W//2, 244)
+aigc_success_text_screen_can_btn.set_size(LCD_SIZE_W//2, 38)
+aigc_success_text_screen_can_btn.set_text(" ")
+aigc_success_text_screen_can_btn.add_flag(lv.obj.FLAG.CLICKABLE)
+aigc_success_text_screen_can_btn.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+aigc_success_text_screen_can_btn.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+aigc_success_text_screen_can = lv.label(aigc_success_text_screen)
+aigc_success_text_screen_can.set_pos(LCD_SIZE_W//2, 240)
+aigc_success_text_screen_can.set_size(LCD_SIZE_W//2, 33)
+aigc_success_text_screen_can.set_text("取消")
+aigc_success_text_screen_can.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+aigc_success_text_screen_can.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+
+
+aigc_create_img_dial_screen = lv.obj(aigc_create_screen)
+print("aigc_create_img_dial_screen")
+aigc_create_img_dial_screen.set_pos(0, 0)
+aigc_create_img_dial_screen.set_size(LCD_SIZE_W, LCD_SIZE_H)
+aigc_create_img_dial_screen.add_flag(lv.obj.FLAG.HIDDEN)
+aigc_create_img_dial_screen.add_style(style_screen, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+aigc_create_ing_img = lv.img(aigc_create_img_dial_screen)
+aigc_create_ing_img.set_size(130,130)
+aigc_create_ing_img.set_pos((LCD_SIZE_W-130)//2,40)
+aigc_create_ing_img.set_src("E:/static/AI/AI_THINK001.png")
+aigc_create_ing_img.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+aigc_create_img_dial_title1 = lv.label(aigc_create_img_dial_screen)
+aigc_create_img_dial_title1.set_pos(0, 5)
+aigc_create_img_dial_title1.set_size(LCD_SIZE_W, 20)
+aigc_create_img_dial_title1.set_text(" ")
+aigc_create_img_dial_title1.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+aigc_create_img_dial_title1.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+aigc_create_img_dial_can_btn = lv.btn(aigc_create_img_dial_screen)
+aigc_create_img_dial_can_btn.set_pos(int(5),int(210))
+aigc_create_img_dial_can_btn.set_size(230,58)
+aigc_create_img_dial_can_btn.set_scrollbar_mode(lv.SCROLLBAR_MODE.OFF)
+al_no_sim_popup_screen_icon1_label = lv.label(aigc_create_img_dial_can_btn)
+al_no_sim_popup_screen_icon1_label.set_text("取消")
+aigc_create_img_dial_can_btn.set_style_pad_all(0, lv.STATE.DEFAULT)
+al_no_sim_popup_screen_icon1_label.align(lv.ALIGN.CENTER,0,0)
+# create style style_screen_btn_1_main_main_default
+al_no_sim_popup_screen_icon1_label_default = lv.style_t()
+al_no_sim_popup_screen_icon1_label_default.init()
+al_no_sim_popup_screen_icon1_label_default.set_radius(30)
+al_no_sim_popup_screen_icon1_label_default.set_bg_color(lv.color_make(0x19,0x19,0x19))
+al_no_sim_popup_screen_icon1_label_default.set_bg_grad_color(lv.color_make(0x19,0x19,0x19))
+al_no_sim_popup_screen_icon1_label_default.set_bg_grad_dir(lv.GRAD_DIR.NONE)
+al_no_sim_popup_screen_icon1_label_default.set_bg_opa(255)
+al_no_sim_popup_screen_icon1_label_default.set_border_color(lv.color_make(0x19,0x19,0x19))
+al_no_sim_popup_screen_icon1_label_default.set_border_width(0)
+al_no_sim_popup_screen_icon1_label_default.set_border_opa(255)
+al_no_sim_popup_screen_icon1_label_default.set_text_color(lv.color_make(253, 82, 19))
+al_no_sim_popup_screen_icon1_label_default.set_text_font_v2("font_28.bin",28,0)
+al_no_sim_popup_screen_icon1_label_default.set_text_align(lv.TEXT_ALIGN.CENTER)
+
+# add style for screen_btn_1
+aigc_create_img_dial_can_btn.add_style(al_no_sim_popup_screen_icon1_label_default, lv.PART.MAIN|lv.STATE.DEFAULT)
+
+# aigc_create_img_dial_can_btn = lv.img(aigc_create_img_dial_screen)
+# aigc_create_img_dial_can_btn.set_size(120,25)
+# aigc_create_img_dial_can_btn.set_pos((LCD_SIZE_W-120)//2,95)
+# aigc_create_img_dial_can_btn.set_src("U:/static/AI/ai_confirm_bt.png")
+# aigc_create_img_dial_can_btn.add_flag(lv.obj.FLAG.CLICKABLE)
+# aigc_create_img_dial_can_btn.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+
+# style_font_youyuan_aigc_red = lv.style_t()
+# style_font_youyuan_aigc_red.init()
+# style_font_youyuan_aigc_red.set_text_color(lv.color_make(253, 82, 19))
+# style_font_youyuan_aigc_red.set_text_font(lv.K01_font_16_ALL)
+
+# aigc_create_img_dial_can_btn_title4 = lv.label(aigc_create_img_dial_can_btn)
+# aigc_create_img_dial_can_btn_title4.set_pos(0, 3)
+# aigc_create_img_dial_can_btn_title4.set_size(120, 33)
+# aigc_create_img_dial_can_btn_title4.set_text("取消")
+# aigc_create_img_dial_can_btn_title4.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+# aigc_create_img_dial_can_btn_title4.add_style(style_font_youyuan_aigc_red, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+
+
+
+aigc_create_img_dial_title = lv.label(aigc_create_img_dial_screen)
+aigc_create_img_dial_title.set_pos(0, 10)
+aigc_create_img_dial_title.set_size(LCD_SIZE_W, 30)
+aigc_create_img_dial_title.set_text("表盘制作中...")
+aigc_create_img_dial_title.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+aigc_create_img_dial_title.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+
+
+
+aigc_create_show_new_img_dial_screen = lv.obj(aigc_create_screen)
+print("aigc_create_show_new_img_dial_screen")
+aigc_create_show_new_img_dial_screen.set_pos(0, 0)
+aigc_create_show_new_img_dial_screen.set_size(LCD_SIZE_W, LCD_SIZE_H)
+aigc_create_show_new_img_dial_screen.add_flag(lv.obj.FLAG.HIDDEN)
+aigc_create_show_new_img_dial_screen.add_style(style_screen, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+
+style_watchface_img_default = lv.style_t()
+style_watchface_img_default.init()
+style_watchface_img_default.set_img_recolor(lv.color_make(0xff,0xff,0xff))
+style_watchface_img_default.set_img_recolor_opa(0)
+style_watchface_img_default.set_img_opa(255)
+
+aigc_create_show_new_img = lv.img(aigc_create_show_new_img_dial_screen)
+aigc_create_show_new_img.set_size(LCD_SIZE_W,LCD_SIZE_H)
+aigc_create_show_new_img.set_pos(0,0)
+aigc_create_show_new_img.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+style_font_red_20 = lv.style_t()
+style_font_red_20.init()
+style_font_red_20.set_text_color(lv.color_make(0xff, 0, 0))
+#style_font_red_20.set_text_font_v2("font_28.bin",28,0)
+style_font_red_20.set_text_font_v2("font_28.bin",28,0)
+
+
+aigc_create_show_new_img_title_btn = lv.label(aigc_create_show_new_img_dial_screen)
+aigc_create_show_new_img_title_btn.set_pos(0, 244)
+aigc_create_show_new_img_title_btn.set_size(LCD_SIZE_W//2, 38)
+aigc_create_show_new_img_title_btn.set_text(" ")
+aigc_create_show_new_img_title_btn.add_flag(lv.obj.FLAG.CLICKABLE)
+aigc_create_show_new_img_title_btn.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+aigc_create_show_new_img_title_btn.add_style(style_font_red_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+
+aigc_create_show_new_img_title = lv.label(aigc_create_show_new_img_dial_screen)
+aigc_create_show_new_img_title.set_pos(0, 240)
+aigc_create_show_new_img_title.set_size(LCD_SIZE_W//2, 33)
+aigc_create_show_new_img_title.set_text("确定")
+aigc_create_show_new_img_title.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+aigc_create_show_new_img_title.add_style(style_font_red_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+
+aigc_create_show_new_img_title1_btn = lv.label(aigc_create_show_new_img_dial_screen)
+aigc_create_show_new_img_title1_btn.set_pos(LCD_SIZE_W//2, 244)
+aigc_create_show_new_img_title1_btn.set_size(LCD_SIZE_W//2, 38)
+aigc_create_show_new_img_title1_btn.add_flag(lv.obj.FLAG.CLICKABLE)
+aigc_create_show_new_img_title1_btn.set_text(" ")
+aigc_create_show_new_img_title1_btn.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+aigc_create_show_new_img_title1_btn.add_style(style_font_red_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+aigc_create_show_new_img_title1 = lv.label(aigc_create_show_new_img_dial_screen)
+aigc_create_show_new_img_title1.set_pos(64, 240)
+aigc_create_show_new_img_title1.set_size(64, 33)
+aigc_create_show_new_img_title1.set_text("取消")
+aigc_create_show_new_img_title1.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+aigc_create_show_new_img_title1.add_style(style_font_red_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+aigc_record_faile_screen = lv.obj(aigc_create_screen)
+print("aigc_record_faile_screen")
+aigc_record_faile_screen.set_pos(0, 0)
+aigc_record_faile_screen.set_size(LCD_SIZE_W, LCD_SIZE_H)
+aigc_record_faile_screen.add_flag(lv.obj.FLAG.HIDDEN)
+aigc_record_faile_screen.add_style(style_screen, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+aigc_record_faile_screen_title = lv.label(aigc_record_faile_screen)
+aigc_record_faile_screen_title.set_pos(0, 30)
+aigc_record_faile_screen_title.set_size(LCD_SIZE_W, 50)
+aigc_record_faile_screen_title.set_text("录音失败请重试")
+aigc_record_faile_screen_title.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+aigc_record_faile_screen_title.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+aigc_record_faile_screen_comfir_btn = lv.label(aigc_record_faile_screen)
+aigc_record_faile_screen_comfir_btn.set_pos(0, 244)
+aigc_record_faile_screen_comfir_btn.set_size(LCD_SIZE_W//2, 38)
+aigc_record_faile_screen_comfir_btn.set_text(" ")
+aigc_record_faile_screen_comfir_btn.add_flag(lv.obj.FLAG.CLICKABLE)
+aigc_record_faile_screen_comfir_btn.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+aigc_record_faile_screen_comfir_btn.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+
+aigc_record_faile_screen_comfir = lv.label(aigc_record_faile_screen)
+aigc_record_faile_screen_comfir.set_pos(0, 240)
+aigc_record_faile_screen_comfir.set_size(LCD_SIZE_W//2, 33)
+aigc_record_faile_screen_comfir.set_text("确定")
+aigc_record_faile_screen_comfir.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+aigc_record_faile_screen_comfir.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+aigc_record_faile_screen_can_btn = lv.label(aigc_record_faile_screen)
+aigc_record_faile_screen_can_btn.set_pos(LCD_SIZE_W//2, 244)
+aigc_record_faile_screen_can_btn.set_size(LCD_SIZE_W//2, 38)
+aigc_record_faile_screen_can_btn.add_flag(lv.obj.FLAG.CLICKABLE)
+aigc_record_faile_screen_can_btn.set_text(" ")
+aigc_record_faile_screen_can_btn.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+aigc_record_faile_screen_can_btn.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+aigc_record_faile_screen_can = lv.label(aigc_record_faile_screen)
+aigc_record_faile_screen_can.set_pos(LCD_SIZE_W//2, 240)
+aigc_record_faile_screen_can.set_size(LCD_SIZE_W//2, 33)
+aigc_record_faile_screen_can.set_text("取消")
+aigc_record_faile_screen_can.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+aigc_record_faile_screen_can.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+
+
+class CreateScreen(Screen):#aigc表盘生成
+ NAME = "aigc_create"
+
+ def __init__(self):
+ super().__init__()
+ self.meta = aigc_create_screen
+ self.timer = osTimer()
+ self.timer_test = osTimer()
+ self.aigc_defaultStyle = "anime" #默认是日漫系都风格表盘
+ read_data = EventMesh.publish("get_storage_config","dial_style") #获取默认的表盘风格
+ if read_data != None:
+ self.aigc_defaultStyle = read_data
+ self.Audio_buf_size = 8*1024
+ self.record_timer = osTimer()
+ self.timerOut = osTimer()
+ self.record = audio.Record()
+ #self.record.end_callback(self.record_callback)
+ self.record.gain_set(4,10)
+ self.aud = audio.Audio(0)
+ self.audio_play_state = 1 #音频播放完状态
+
+ self.TTS_PRO_TYPE = 0 #TTS协议类型,=0:用长文本合成接口,=1用音频流合成接口
+ self.AI_audio_queue_thread_id = 0
+ self.AI_send_data_queue_thread_id = 0
+ self.AI_client_asr_recv_id = 0
+ self.AI_client_asr = None
+ self.AI_client_asr_isconnect = 0 #是否连接成功
+ self.AI_client_asr_num = 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
+ self.img_show_count_flag = 0
+ self.tts_data_tmp = bytes()
+ self.press_state = 0
+ self.AI_label_answer = ""
+ self.sbuject_text = ""
+ self.AI_label_str = ""
+ self.refresh_texttimer = osTimer()
+ self.AI_listen_text = ""
+ self.AI_listen_end = 0 #语音识别完成
+ self.refresh_count = 0
+ self.AI_send_data_queue = Queue(100)
+ self.AI_audio_queue = Queue(100)
+ self.countDown = 0
+ self.count = 0
+ self.mode = 0
+ self.img_success_init = 0
+ self.img_name = 0
+ self.task_id = ""
+ ai_talk_bt.add_event_cb(lambda e: EventMesh.callback_wrapper(self.button_cb(e,1)),lv.EVENT.SHORT_CLICKED, None)
+ # ai_talk_bt_label.add_event_cb(lambda e: EventMesh.callback_wrapper(self.button_cb(e,1)),lv.EVENT.SHORT_CLICKED, None)
+ ai_talk_listen_bt.add_event_cb(lambda e: EventMesh.callback_wrapper(self.button_cb(e,2)),lv.EVENT.SHORT_CLICKED, None)
+ # ai_talk_bt_listen_label.add_event_cb(lambda e: EventMesh.callback_wrapper(self.button_cb(e,2)),lv.EVENT.SHORT_CLICKED, None)
+ aigc_create_show_new_img_title_btn.add_event_cb(lambda e: EventMesh.callback_wrapper(self.button_cb(e,3)),lv.EVENT.SHORT_CLICKED, None)
+ aigc_create_show_new_img_title1_btn.add_event_cb(lambda e: EventMesh.callback_wrapper(self.button_cb(e,4)),lv.EVENT.SHORT_CLICKED, None)
+ aigc_record_faile_screen_comfir_btn.add_event_cb(lambda e: EventMesh.callback_wrapper(self.button_cb(e,5)),lv.EVENT.SHORT_CLICKED, None)
+ aigc_record_faile_screen_can_btn.add_event_cb(lambda e: EventMesh.callback_wrapper(self.button_cb(e,6)),lv.EVENT.SHORT_CLICKED, None)
+ aigc_success_text_screen_comfir_btn.add_event_cb(lambda e: EventMesh.callback_wrapper(self.button_cb(e,7)),lv.EVENT.SHORT_CLICKED, None)
+ aigc_success_text_screen_can_btn.add_event_cb(lambda e: EventMesh.callback_wrapper(self.button_cb(e,8)),lv.EVENT.SHORT_CLICKED, None)
+ aigc_create_img_dial_can_btn.add_event_cb(lambda e: EventMesh.callback_wrapper(self.button_cb(e,9)),lv.EVENT.SHORT_CLICKED, None)
+ # {'data': [{'code': 'auto', 'name': '默认', 'url': ''}, {'code': '3d', 'name': '3D卡通', 'url': ''}, {'code': 'anime', 'name': '⽇漫⻛', 'url': ''}, {'code': 'oil', 'name': '油画', 'url': ''}, {'code': 'watercolor', 'name': '水彩', 'url': ''}, {'code': 'sketch', 'name': '素描', 'url': ''}, {'code': 'chinese-painting', 'name': '中国画', 'url': ''}, {'code': 'flat-illustration', 'name': '扁平插画', 'url': ''}], 'status': 0}
+ EventMesh.subscribe("publish_start_event",self.publish_start_event)
+
+ def initialization(self):
+ aigc_create_listen_screen.add_flag(lv.obj.FLAG.HIDDEN)
+ aigc_create_img_dial_screen.add_flag(lv.obj.FLAG.HIDDEN)
+ aigc_record_faile_screen.add_flag(lv.obj.FLAG.HIDDEN)
+ aigc_create_show_new_img_dial_screen.add_flag(lv.obj.FLAG.HIDDEN)
+ aigc_success_text_screen.add_flag(lv.obj.FLAG.HIDDEN)
+ aigc_create_title_screen.clear_flag(lv.obj.FLAG.HIDDEN)
+ self.countDown = 30
+ self.aud.setVolume(11)#设置最大声录音
+ print("self.meta_info:{} {}\r\n".format(self.meta_info,type(self.meta_info)))
+ def publish_start_event(self,event,msg):
+ self.start_listen_data()
+
+ 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, ())
+
+ def button_cb(self,e,msg):
+ code = e.get_code()
+ indev = lv.indev_get_act()
+ lv.indev_t.wait_release(indev)
+ dir = lv.indev_t.get_gesture_dir(indev)
+ if code == lv.EVENT.GESTURE:
+ if dir == lv.DIR.RIGHT:
+ pass
+ # EventMesh.publish("load_screen", {"screen": "main_menu"})
+ elif code == lv.EVENT.SHORT_CLICKED:
+ if msg == 1:
+ EventMesh.publish("system_sleep_rest")#防止黑屏
+ self.start_listen_data()
+ elif msg == 2:
+ pass
+ elif msg == 3: #确定
+ # check_txt = ql_fs.path_exists("/usr/static/storage_file/aigc_dial.jpg")
+ # if check_txt == True :
+ # uos.remove("/usr/static/storage_file/aigc_dial.jpg")
+ check_txt = ql_fs.path_exists("/ext/static/storage_file/{}.jpg".format(self.img_name))
+ if check_txt == True:
+ uos.rename("/ext/static/storage_file/{}.jpg".format(self.img_name), "/ext/static/storage_file/aigc_dial.jpg") #将临时文件重命名为新的作为显示
+ check_txt = ql_fs.path_exists("/ext/static/storage_file/{}.jpg".format(self.img_name))
+ # if check_txt == True :
+ # uos.remove("/usr/static/storage_file/{}.jpg".format(self.img_name))
+ EventMesh.publish("system_sleep_rest")#防止黑屏
+ EventMesh.publish("update_dial_file")
+ EventMesh.publish("watch_top_show")
+ EventMesh.publish("load_screen", {"screen": "main_menu"})
+ pass
+ elif msg == 4:#取消移除文件
+
+ # check_txt = ql_fs.path_exists("/usr/static/storage_file/{}.jpg".format(self.img_name))
+ # if check_txt == True :
+ # uos.remove("/usr/static/storage_file/{}.jpg".format(self.img_name))
+ EventMesh.publish("system_sleep_rest")#防止黑屏
+ self.start_listen_data()
+ elif msg == 5: #确定 回到开始录音界面
+ EventMesh.publish("system_sleep_rest")#防止黑屏
+ self.start_listen_data()
+ elif msg == 6: #取消回到主页面
+ EventMesh.publish("system_sleep_rest")#防止黑屏
+ EventMesh.publish("load_screen", {"screen": "main_menu"})
+
+ elif msg == 7: #确定生成表盘
+ EventMesh.publish("system_sleep_rest")#防止黑屏
+ self.create_img_cb(self.sbuject_text)
+ elif msg == 8: #取消生成表盘 不是想要的表盘文字重新录音
+
+ EventMesh.publish("system_sleep_rest")#防止黑屏
+ self.start_listen_data()
+ elif msg == 9:
+ self.timerOut.start(20,0,self.timout_close)
+ self.initialization()
+
+
+ def start_listen_data(self): #开始录音
+ aigc_create_title_screen.add_flag(lv.obj.FLAG.HIDDEN)
+ aigc_create_show_new_img_dial_screen.add_flag(lv.obj.FLAG.HIDDEN)
+ aigc_create_img_dial_screen.add_flag(lv.obj.FLAG.HIDDEN)
+ aigc_success_text_screen.add_flag(lv.obj.FLAG.HIDDEN)
+ aigc_record_faile_screen.add_flag(lv.obj.FLAG.HIDDEN)
+ aigc_create_listen_screen.clear_flag(lv.obj.FLAG.HIDDEN)
+ aigc_create_listen_img.set_src("E:/static/AI/AI_THINK001.png")
+
+ try:
+ print("talking2")
+ self.close_data()
+ self.AI_init()
+ print("talking3")
+ except Exception as e:
+ usys.print_exception(e)
+
+ self.aud.setVolume(11)#设置最大声录音
+ self.record.stream_start(audio.Record.AMRNB, 8000, 60)
+ self.record_timer.start(1*1000,1,self.record_timer_cb)
+ self.countDown = 30
+ self.count = 0
+ self.img_show_count = 0
+ self.img_show_count_tmp = 0
+ ai_talk_bt_listen_label2.set_text("{}S".format(self.countDown))
+ EventMesh.publish("system_sleep_rest")#防止黑屏
+ self.timer.start(500,1,self.update_label_show)
+ self.press_state = 1
+ self.AI_client_asr_start()
+
+ def record_faile(self,msg):
+ self.count = 0
+ EventMesh.publish("system_sleep_rest")#防止黑屏
+ self.timer.start(200,0,self.record_failecb)
+ self.mode = msg
+
+ def record_failecb(self,*argc):
+ EventMesh.publish("system_sleep_rest")#防止黑屏
+ self.close_data()
+ self.timer.stop()
+ aigc_create_title_screen.add_flag(lv.obj.FLAG.HIDDEN)
+ aigc_create_listen_screen.add_flag(lv.obj.FLAG.HIDDEN)
+ aigc_create_show_new_img_dial_screen.add_flag(lv.obj.FLAG.HIDDEN)
+ aigc_create_img_dial_screen.add_flag(lv.obj.FLAG.HIDDEN)
+ aigc_success_text_screen.add_flag(lv.obj.FLAG.HIDDEN)
+ aigc_record_faile_screen.clear_flag(lv.obj.FLAG.HIDDEN)
+ if self.mode == 1: #录音失败请重试
+ aigc_record_faile_screen_title.set_text("录音失败请重试")
+ elif self.mode == 2: #网络异常请重试
+ aigc_record_faile_screen_title.set_text("网络异常请重试")
+ elif self.mode == 3:
+ aigc_record_faile_screen_title.set_text("表盘生成失败请重试")
+
+
+
+ def update_label_show(self,*argc):
+ EventMesh.publish("publish_message_event_ui",{"func":self.update_label_showcb,"data":0})
+
+ def update_label_showcb(self,data): #刷新图片和文字
+ EventMesh.publish("system_sleep_rest")#防止黑屏
+ self.countDown-=1
+ if self.countDown <= 0: #录音失败
+ self.record_faile(1) #录音失败请重试
+ return
+
+ ai_talk_bt_listen_label2.set_text("{}S".format(self.countDown))
+ self.count+=1
+ if self.count > 3:
+ self.count = 1
+ if self.count == 1:
+ aigc_create_listen_title.set_text("正在聆听中.")
+ pass
+ elif self.count == 2:
+ aigc_create_listen_title.set_text("正在聆听中..")
+ pass
+ else:
+ aigc_create_listen_title.set_text("正在聆听中...")
+ pass
+
+ if self.img_show_count > 10:
+ self.img_show_count_tmp+=1
+ self.img_show_count_tmp = self.img_show_count-self.img_show_count_tmp
+ if self.img_show_count_tmp >= 10:
+ self.img_show_count = 1
+ aigc_create_listen_img.set_src("E:/static/AI/AI_THINK{}.png".format("%03d"%(self.img_show_count_tmp)))
+ else:
+ self.img_show_count+=1
+ self.img_show_count_tmp = 0
+ aigc_create_listen_img.set_src("E:/static/AI/AI_THINK{}.png".format("%03d"%(self.img_show_count)))
+ pass
+ def stop_record_text(self,msg): #停止录音有ASR返回
+ self.sbuject_text = ""
+ self.sbuject_text = str(msg)
+ print("stop_record_text!!!!\r\n")
+ self.record.stop()#关闭录音
+ self.record_timer.stop()#关闭定时器
+ self.timer_out_count = 0
+ self.timer.stop()
+ self.AI_send_data_queue.clear()
+ try:
+ self.websocket_deconnect_asr()
+ except Exception as e:
+ usys.print_exception(e)
+ self.timerOut.start(20,0,self.timout_close)
+ aigc_create_title_screen.add_flag(lv.obj.FLAG.HIDDEN)
+ aigc_create_listen_screen.add_flag(lv.obj.FLAG.HIDDEN)
+ aigc_create_show_new_img_dial_screen.add_flag(lv.obj.FLAG.HIDDEN)
+ aigc_record_faile_screen.add_flag(lv.obj.FLAG.HIDDEN)
+ aigc_create_img_dial_screen.add_flag(lv.obj.FLAG.HIDDEN)
+ aigc_success_text_screen_title.set_text(msg)
+ aigc_success_text_screen.clear_flag(lv.obj.FLAG.HIDDEN)
+ def timout_close(self,*argc):
+ self.close_data()
+ self.timer.start(500,1,self.lcd_update)
+ pass
+
+ def create_img_cb(self,msg):
+ self.timer.stop()
+ aigc_create_title_screen.add_flag(lv.obj.FLAG.HIDDEN)
+ aigc_create_listen_screen.add_flag(lv.obj.FLAG.HIDDEN)
+ aigc_create_show_new_img_dial_screen.add_flag(lv.obj.FLAG.HIDDEN)
+ aigc_record_faile_screen.add_flag(lv.obj.FLAG.HIDDEN)
+ aigc_success_text_screen.add_flag(lv.obj.FLAG.HIDDEN)
+ aigc_create_img_dial_screen.clear_flag(lv.obj.FLAG.HIDDEN)
+ # aigc_create_img_dial_title1.set_text("{}".format(msg))
+ aigc_create_ing_img.set_src("E:/static/AI/AI_THINK001.png")
+ aigc_create_img_dial_title.set_text("表盘制作中...")
+ gresult = 0
+ self.task_id = ""
+ url = "http://118.145.158.207/aigc/create-image"
+ data_tmp ={
+ "subject": msg,
+ "type": 0, #0 文生图
+ "algorithm": self.aigc_defaultStyle #表盘风格
+ }
+ print("url {} data_tmp:{}\r\n".format(url,data_tmp))
+ try:
+ response = request.post(url,data = ujson.dumps(data_tmp))
+ if response.status_code == 200:
+ result = response.json()
+ print(result)
+ if "status" in result:
+ status = result["status"]
+ if status == 0:
+ if "data" in result:
+ data = result["data"]
+ if "task_id" in data:
+ if len(data["task_id"]) != 0:
+ self.task_id = data["task_id"]
+ gresult = 1
+ # else:
+ # self.record_faile(2)
+ # return
+ else: #网络异常 请重试 连接出错
+ pass
+ # self.record_faile(2)
+ # return
+
+ except Exception as e:
+ usys.print_exception(e)
+ print("connect error!!!!\r\n")
+ # self.record_faile(2)
+ return
+ if gresult == 0:
+ self.record_faile(2)
+ return
+ print("create_img_cb!!!!!!!!!!1111111\r\n")
+ self.count = 0
+ self.img_show_count =0
+ self.img_show_count_tmp = 0
+ self.img_success_init = 0
+
+ self.timer.start(500,1,self.get_img_result)
+
+ pass
+ def get_img_result(self,*argc):
+ EventMesh.publish("publish_message_event_ui",{"func":self.get_img_resultcb,"data":0})
+
+ def get_img_resultcb(self,data):
+
+ gresult = 0
+ EventMesh.publish("system_sleep_rest")#防止黑屏
+ url = "http://118.145.158.207/aigc/get-result" #一秒获取返回的结果
+ data_tmp = {
+ "task_id":self.task_id,
+ "bit_depth": 32, #位数 8 16 24 32
+ "compression_quality":80, #压缩率80
+ "format":"jpg", #图片格式 支持png jepg jpg
+ "width": 128, #分辨率的宽度 最大是512
+ "height":128 #分辨率的高度 最大是512
+ }
+ try:
+ response = request.post(url,data = ujson.dumps(data_tmp))
+ if response.status_code == 200:
+ result = response.json()
+ if "status" in result:
+ status = result["status"]
+ if status == 0:
+ if "data" in result:
+ data = result["data"]
+ # print("data break{}\r\n".format(data))
+ if "status" in data:
+ state = data["status"]
+ if state == "SUCCEEDED": #生成图片成功标识
+ self.timer.stop()
+ data_bmp = str(result["data"]["result"])
+ # print("data_bmp :{}\r\n".format(data_bmp))
+ data = data_bmp.split(",")[1]
+ self.dial_create_success(data)
+ else:
+ self.record_faile(2)
+ return
+ else:
+ self.record_faile(2)
+ return
+
+ except Exception as e:
+ usys.print_exception(e)
+ self.record_faile(2)
+ return
+
+ self.count+=1
+ if self.count > 3:
+ self.count = 1
+ if self.count == 1:
+ aigc_create_img_dial_title.set_text("表盘制作中.")
+ elif self.count == 2:
+ aigc_create_img_dial_title.set_text("表盘制作中..")
+ pass
+ else:
+ aigc_create_img_dial_title.set_text("表盘制作中...")
+ pass
+ if self.img_show_count > 10:
+ self.img_show_count_tmp+=1
+ self.img_show_count_tmp = self.img_show_count-self.img_show_count_tmp
+ if self.img_show_count_tmp >= 10:
+ self.img_show_count = 1
+ aigc_create_ing_img.set_src("E:/static/AI/AI_THINK{}.png".format("%03d"%(self.img_show_count_tmp)))
+ else:
+ self.img_show_count+=1
+ self.img_show_count_tmp = 0
+ aigc_create_ing_img.set_src("E:/static/AI/AI_THINK{}.png".format("%03d"%(self.img_show_count)))
+
+ def dial_create_success(self,data): #生产表盘成功
+ if self.img_success_init == 1:
+ return
+ self.img_success_init = 1
+ # EventMesh.publish("load_screen", {"screen": "aigc_img","meta":data})
+ # return
+
+ self.close_data()
+ self.timer.start(500,1,self.lcd_update)
+ binary_data = base64.b64decode(data)
+ check_txt = ql_fs.path_exists("/ext/static/storage_file/{}.jpg".format(str(self.img_name)))
+ # if check_txt == True :
+ # uos.remove("/usr/static/storage_file/{}.jpg".format(str(self.img_name)))
+ # self.img_name+=1
+ # if self.img_name >= 2:
+ # self.img_name = 0
+ print("self.img_name:{}\r\n".format(self.img_name))
+
+ check_txt = ql_fs.path_exists("/ext/static/storage_file/{}.jpg".format(str(self.img_name)))
+ print("check_txt:{} data:{}\r\n".format(check_txt,data))
+ path = "/ext/static/storage_file/{}.jpg".format(str(self.img_name))
+ try:
+ try:
+ # with open(path,"w+") as fd:
+ # fd.write(binary_data)
+ fd = open(path,"w+")
+ fd.write(binary_data)
+
+ fd.close()
+ print(binary_data_read)
+ fd = open(path,"r")
+ binary_data_read = fd.read()
+ print(binary_data_read)
+ fd.close()
+ aigc_create_title_screen.add_flag(lv.obj.FLAG.HIDDEN)
+ aigc_record_faile_screen.add_flag(lv.obj.FLAG.HIDDEN)
+ aigc_create_listen_screen.add_flag(lv.obj.FLAG.HIDDEN)
+ aigc_success_text_screen.add_flag(lv.obj.FLAG.HIDDEN)
+
+ check_txt = ql_fs.path_exists("/ext/static/storage_file/{}.jpg".format(str(self.img_name))) #生成临时的图片文件
+ if check_txt == True :
+ print("check_txt111111:{}\r\n".format(check_txt))
+ #uos.rename()
+ aigc_create_show_new_img.set_src("E:/static/AI_MAIN_ICON.png")
+ aigc_create_show_new_img.set_src("E:/static/storage_file/{}.jpg".format(str(self.img_name)))
+ aigc_create_img_dial_screen.add_flag(lv.obj.FLAG.HIDDEN)
+ aigc_create_show_new_img_dial_screen.clear_flag(lv.obj.FLAG.HIDDEN)
+
+ except Exception as e:
+ #表盘生产失败
+ print("表盘生产失败!!!!!\r\n")
+ self.record_faile(3)
+ return
+ except Exception as e:
+ #表盘生产失败
+ self.record_faile(3)
+ def timer_out_show_img(self,*argc):
+ aigc_create_title_screen.add_flag(lv.obj.FLAG.HIDDEN)
+ aigc_record_faile_screen.add_flag(lv.obj.FLAG.HIDDEN)
+ aigc_create_listen_screen.add_flag(lv.obj.FLAG.HIDDEN)
+ aigc_success_text_screen.add_flag(lv.obj.FLAG.HIDDEN)
+
+ check_txt = ql_fs.path_exists("/ext/static/storage_file/aigc_dial_tmp.jpg") #生成临时的图片文件
+ if check_txt == True :
+ aigc_create_img_dial_screen.add_flag(lv.obj.FLAG.HIDDEN)
+ aigc_create_show_new_img.set_src("E:/static/storage_file/aigc_dial_tmp.jpg")
+ aigc_create_show_new_img_dial_screen.clear_flag(lv.obj.FLAG.HIDDEN)
+
+ self.timer.start(500,1,self.lcd_update)
+
+ def lcd_update(self,*argc):
+ EventMesh.publish("system_sleep_rest")#防止黑屏
+
+
+ #定时器
+ def record_timer_cb(self,*argc):
+ EventMesh.publish("system_sleep_rest")#防止黑屏
+ Record_read_buf = bytearray(self.Audio_buf_size)
+ Record_len = self.record.stream_read(Record_read_buf, self.Audio_buf_size)
+ print("record_timer_cb:{}".format(Record_len))
+ if Record_len > 0:
+ read_buf = bytes(Record_read_buf[:Record_len])
+ self.AI_client_asr_send(read_buf)
+ #获取trace_id
+ def get_trace_id(self):
+ t = utime.mktime(utime.localtime())
+ t = t*1000+urandom.randint(0, 1000)
+ md5_data = "{}".format(t)#md5签名
+ sign_data = ""
+ hash_obj = uhashlib.md5(md5_data)
+ res = hash_obj.digest()
+
+ # 转成十六进制表示
+ sign_data = ubinascii.hexlify(res)
+ sign_data = sign_data.decode('ascii')
+ return sign_data
+#####################################################
+ #语音转文字链路
+ def websocket_connect_asr(self):
+ print("websocket_connect_asr:{} {}!!!!!!!!!!!!!!!!!!!!".format(self.AI_client_asr_isconnect,self.AI_client_asr_recv_id))
+ try:
+ self.websocket_deconnect_asr()#先断一次,预防出错
+ except Exception as e:
+ usys.print_exception(e)
+ self.record_faile(2)
+ return
+ try:
+ 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)
+ self.record_faile(2)
+ return
+ # 线程接收数据
+ if self.AI_client_asr_recv_id != 0:
+ try:
+ _thread.stop_thread(self.AI_client_asr_recv_id)
+ except Exception as e:
+ usys.print_exception(e)
+ self.AI_client_asr_recv_id = 0
+ self.AI_client_asr_recv_id = _thread.start_new_thread(self.AI_client_asr_recv, (self.AI_client_asr,))
+ self.AI_client_asr_isconnect = 1
+
+ def websocket_deconnect_asr(self):
+ if self.AI_client_asr_isconnect == 1:
+ self.AI_client_asr_isconnect = 0
+ self.AI_client_asr.close()
+ def AI_client_asr_send(self,data_bytes):
+ #self.AI_client_asr.send(data_bytes)
+ print("AI_client_asr_send:{} {}\r\n".format(len(data_bytes),self.AI_send_data_queue_thread_id))
+ if len(data_bytes) != 0:
+ self.AI_send_data_queue.put([self.AI_client_asr_num,data_bytes])
+ # print("init 333333333333333333333333333333333333333")
+ def AI_client_asr_start(self):
+
+ 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):
+
+ while True:
+ try:
+ # 死循环接收数据
+ recv_data = cli.recv()
+ if not recv_data:
+ # 服务器关闭连接或客户端关闭连接
+ print("AI_client_asr_recv close")
+ #self.AI_client_asr_isconnect = 0
+ #self.websocket_deconnect_asr()
+ break
+ try:
+ if isinstance(recv_data, str):
+ jsload_data = ujson.loads(recv_data)
+ print("jsload_data = {}".format(jsload_data))
+ if jsload_data["result"] == None:
+ continue
+ if jsload_data["result"]["result"]:
+ self.AI_listen_text = str(jsload_data["result"]["result"])
+
+ # AI_listen_text.set_text(str(jsload_data["result"]["result"]))
+ if jsload_data["result"]["is_end"] == True: #{"type":"chat","content":"你好"}
+ self.AI_listen_end = 1
+ EventMesh.publish("publish_message_event_ui",{"func":self.stop_record_text,"data":self.AI_listen_text})
+ # self.create_img_cb(self.AI_listen_text) #语音识别完成 正在生成表盘中...
+ break
+ elif jsload_data["result"]["is_end"] == False:
+ self.AI_listen_end = 0
+ # AI_label.set_text("语音识别中...")
+ except Exception as e:
+ print("error recv_data:{}".format(recv_data))
+ usys.print_exception(e)
+
+ except Exception as e:
+ usys.print_exception(e)
+ break
+
+ # print("AI_client_asr_recv end:{} {}\r\n".format(self.AI_client_asr_isconnect,self.AI_client_asr_recv_id))
+ self.AI_client_asr_isconnect = 0
+ self.AI_client_asr_recv_id = 0
+
+
+
+ ###############################################
+ #发送数据队列
+ def AI_send_data_queue_thread(self):
+ while True:
+ data = self.AI_send_data_queue.get()
+ if data != None:
+ try:
+ if data[0] == self.AI_client_asr_num:
+ print("asr send_data self.AI_client_asr_isconnect:{}".format(self.AI_client_asr_isconnect))
+ if self.AI_client_asr_isconnect == 0:
+ try:
+ self.websocket_connect_asr()
+ except Exception as e: #网络连接异常
+ usys.print_exception(e)
+ print("asr send_data:{}".format(len(data[1])))
+ if self.AI_client_asr != None:
+ self.AI_client_asr.send(data[1])
+
+ except Exception as e:
+ print("DeviceInfo_queue_thread:ERROR:{}".format(e))
+ usys.print_exception(e)
+
+ if data[0] == self.AI_client_asr_num:
+ self.AI_client_asr_isconnect = 0
+ try:
+ self.websocket_connect_asr()
+ except Exception as e: #网络连接异常
+ usys.print_exception(e)
+
+
+ def play_label_cb(self,e):
+
+ pass
+
+ def set_enter_pp_page(self, event, msg):
+ self.state = msg
+
+ def get_enter_pp_page(self, event, msg):
+
+ return self.state
+ def close_data(self):
+ print("close:!!!!111 {} {}\r\n".format(self.AI_send_data_queue_thread_id,self.AI_client_asr_recv_id))
+ try:
+ self.websocket_deconnect_asr()
+
+ except Exception as e:
+ usys.print_exception(e)
+ try:
+ #销毁线程
+
+ if self.AI_send_data_queue_thread_id != 0:
+ try:
+ _thread.stop_thread(self.AI_send_data_queue_thread_id)
+ print("close:!!!!111\r\n")
+ except Exception as e:
+ usys.print_exception(e)
+ self.AI_send_data_queue_thread_id = 0
+ print("close:!!!!2333\r\n")
+
+
+ if self.AI_client_asr_recv_id != 0:
+ try:
+ print("close:!!!!555\r\n")
+ _thread.stop_thread(self.AI_client_asr_recv_id)
+ print("close:!!!!222\r\n")
+ except Exception as e:
+ usys.print_exception(e)
+ self.AI_client_asr_recv_id = 0
+ except Exception as e:
+ usys.print_exception(e)
+ print("close:AI_send_data_queue:size1111:{}".format(self.AI_send_data_queue.size()))
+ self.AI_send_data_queue.clear()
+ print("close:AI_send_data_queue:size:{}".format(self.AI_send_data_queue.size()))
+ self.record_timer.stop()
+ self.aud.stopPlayStream()
+ self.aud.stopAll()
+ self.record.stop()#关闭录音
+ self.timer.stop()
+ self.record_timer.stop()
+ self.clear_flag()
+ 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
+
+ def Close(self):
+ print("close:!!!!111 {} {}\r\n".format(self.AI_send_data_queue_thread_id,self.AI_client_asr_recv_id))
+ try:
+ self.websocket_deconnect_asr()
+
+ except Exception as e:
+ usys.print_exception(e)
+ try:
+ #销毁线程
+
+ if self.AI_send_data_queue_thread_id != 0:
+ try:
+ _thread.stop_thread(self.AI_send_data_queue_thread_id)
+ print("close:!!!!111\r\n")
+ except Exception as e:
+ usys.print_exception(e)
+ self.AI_send_data_queue_thread_id = 0
+ print("close:!!!!2333\r\n")
+
+
+ if self.AI_client_asr_recv_id != 0:
+ try:
+ print("close:!!!!555\r\n")
+ _thread.stop_thread(self.AI_client_asr_recv_id)
+ print("close:!!!!222\r\n")
+ except Exception as e:
+ usys.print_exception(e)
+ self.AI_client_asr_recv_id = 0
+ except Exception as e:
+ usys.print_exception(e)
+ print("close:AI_send_data_queue:size1111:{}".format(self.AI_send_data_queue.size()))
+ self.AI_send_data_queue.clear()
+ print("close:AI_send_data_queue:size:{}".format(self.AI_send_data_queue.size()))
+ self.record_timer.stop()
+ self.aud.stopPlayStream()
+ self.aud.stopAll()
+ self.record.stop()#关闭录音
+ self.timer.stop()
+ self.record_timer.stop()
+ self.clear_flag()
+ 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
+
+ num = EventMesh.publish("get_volum_size")
+ if num == None:
+ num = 8
+ self.aud.setVolume(num)#恢复原始音量
+
+ check_txt = ql_fs.path_exists("/ext/static/storage_file/aigc_dial_tmp.jpg") #删除文件防止退出界面没有删除 增加内存
+ print("jpg is true or false!!!!{}\r\n".format(check_txt))
+ if check_txt == True :
+ uos.remove("/ext/static/storage_file/aigc_dial_tmp.jpg")
+
+
+ def clear_flag(self): #清标识
+ self.timer_out_count = 0
+ self.img_show_count = 0
+ self.img_show_count_tmp = 0
+ self.img_show_count_flag = 0
+ self.AI_listen_end = 0 #语音识别完成
+ self.refresh_count = 0
+ self.AI_listen_text = ""
+ self.AI_label_str = ""
+ self.AI_label_answer = ""
+ self.tts_time_count = 0
+ self.tts_time_outcount = 0
+
+ def done_return(self):
+ EventMesh.publish("return_prev_screen")
+
+ def btn1_release(self):
+ EventMesh.publish("load_screen", {"screen": "main_menu"})
+
+ def btn8_press(self):
+ EventMesh.publish("load_screen", {"screen": "main_menu"})
+
+
+aigc_show_img_screen = lv.obj()
+aigc_show_img_screen.add_style(style_screen, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+
+aigc_show_img_screen_img = lv.obj(aigc_show_img_screen)
+print("aigc_show_img_screen_img")
+aigc_show_img_screen_img.set_pos(0, 0)
+aigc_show_img_screen_img.set_size(LCD_SIZE_W, LCD_SIZE_H)
+aigc_show_img_screen_img.add_style(style_screen, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+
+aigc_create_success_show_new_img = lv.img(aigc_show_img_screen_img)
+aigc_create_success_show_new_img.set_size(LCD_SIZE_W,LCD_SIZE_H)
+aigc_create_success_show_new_img.set_pos(0,0)
+aigc_create_success_show_new_img.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+
+aigc_create_show_new_img_title_btn1 = lv.label(aigc_create_success_show_new_img)
+aigc_create_show_new_img_title_btn1.set_pos(0, 244)
+aigc_create_show_new_img_title_btn1.set_size(LCD_SIZE_W//2, 38)
+aigc_create_show_new_img_title_btn1.set_text(" ")
+aigc_create_show_new_img_title_btn1.add_flag(lv.obj.FLAG.CLICKABLE)
+aigc_create_show_new_img_title_btn1.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+aigc_create_show_new_img_title_btn1.add_style(style_font_red_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+
+aigc_create_show_new_img_title1 = lv.label(aigc_create_success_show_new_img)
+aigc_create_show_new_img_title1.set_pos(0, 240)
+aigc_create_show_new_img_title1.set_size(LCD_SIZE_W//2, 33)
+aigc_create_show_new_img_title1.set_text("确定")
+aigc_create_show_new_img_title1.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+aigc_create_show_new_img_title1.add_style(style_font_red_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+
+aigc_create_show_new_img_title1_btn1 = lv.label(aigc_create_success_show_new_img)
+aigc_create_show_new_img_title1_btn1.set_pos(LCD_SIZE_W//2, 244)
+aigc_create_show_new_img_title1_btn1.set_size(LCD_SIZE_W//2, 38)
+aigc_create_show_new_img_title1_btn1.add_flag(lv.obj.FLAG.CLICKABLE)
+aigc_create_show_new_img_title1_btn1.set_text(" ")
+aigc_create_show_new_img_title1_btn1.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+aigc_create_show_new_img_title1_btn1.add_style(style_font_red_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+aigc_create_show_new_img_title11 = lv.label(aigc_create_success_show_new_img)
+aigc_create_show_new_img_title11.set_pos(LCD_SIZE_W//2, 240)
+aigc_create_show_new_img_title11.set_size(LCD_SIZE_W//2, 33)
+aigc_create_show_new_img_title11.set_text("取消")
+aigc_create_show_new_img_title11.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+aigc_create_show_new_img_title11.add_style(style_font_red_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+class aigcShowNewImgScreen(Screen): #aigc演示效果
+ NAME = "aigc_img"
+
+ def __init__(self):
+ super().__init__()
+ self.meta = aigc_show_img_screen
+ self.meta_type = "popup"
+ self.timer = osTimer()
+ self.img_name = 0
+ aigc_create_show_new_img_title_btn1.add_event_cb(lambda e: EventMesh.callback_wrapper(self.button_cb(e,1)),lv.EVENT.SHORT_CLICKED, None)
+ aigc_create_show_new_img_title1_btn1.add_event_cb(lambda e: EventMesh.callback_wrapper(self.button_cb(e,2)),lv.EVENT.SHORT_CLICKED, None)
+
+ def button_cb(self,e,msg):
+ code = e.get_code()
+ indev = lv.indev_get_act()
+ lv.indev_t.wait_release(indev)
+ dir = lv.indev_t.get_gesture_dir(indev)
+ if code == lv.EVENT.GESTURE:
+ if dir == lv.DIR.RIGHT:
+ pass
+ # EventMesh.publish("load_screen", {"screen": "main_menu"})
+ elif code == lv.EVENT.SHORT_CLICKED:
+ if msg == 1:
+ check_txt = ql_fs.path_exists("/ext/static/storage_file/{}.jpg".format(self.img_name))
+ if check_txt == True:
+ uos.rename("/ext/static/storage_file/{}.jpg".format(self.img_name), "/ext/static/storage_file/aigc_dial.jpg") #将临时文件重命名为新的作为显示
+ check_txt = ql_fs.path_exists("/ext/static/storage_file/{}.jpg".format(self.img_name))
+ # if check_txt == True :
+ # uos.remove("/usr/static/storage_file/{}.jpg".format(self.img_name))
+ EventMesh.publish("system_sleep_rest")#防止黑屏
+ EventMesh.publish("update_dial_file")
+ EventMesh.publish("watch_top_show")
+ EventMesh.publish("load_screen", {"screen": "main_menu"})
+ elif msg == 2:
+ check_txt = ql_fs.path_exists("/ext/static/storage_file/{}.jpg".format(self.img_name))
+ if check_txt == True :
+ uos.remove("/ext/static/storage_file/{}.jpg".format(self.img_name))
+
+ EventMesh.publish("load_screen", {"screen": "aigc_create","meta":"1"})
+ EventMesh.publish("publish_start_event")
+
+
+ def initialization(self):
+ EventMesh.publish("system_sleep_rest")#防止黑屏
+ binary_data = base64.b64decode(self.meta_info)
+ check_txt = ql_fs.path_exists("/ext/static/storage_file/{}.jpg".format(str(self.img_name)))
+ if check_txt == True :
+ uos.remove("/ext/static/storage_file/{}.jpg".format(str(self.img_name)))
+ self.img_name+=1
+ if self.img_name >= 2:
+ self.img_name = 0
+ print("self.img_name:{}\r\n".format(self.img_name))
+
+ check_txt = ql_fs.path_exists("/ext/static/storage_file/{}.jpg".format(str(self.img_name)))
+ print("check_txt:{} data:{}\r\n".format(check_txt,self.meta_info))
+ path = "/ext/static/storage_file/{}.jpg".format(str(self.img_name))
+ try:
+ try:
+ with open(path,"w+") as fd:
+ fd.write(binary_data)
+ check_txt = ql_fs.path_exists("/ext/static/storage_file/{}.jpg".format(str(self.img_name))) #生成临时的图片文件
+ if check_txt == True :
+ aigc_create_success_show_new_img.set_src("E:/static/storage_file/{}.jpg".format(str(self.img_name)))
+
+ self.timer.start(500,1,self.lcd_update)
+ except Exception as e:
+ #表盘生产失败
+ print("表盘生产失败!!!!!\r\n")
+ pass
+ return
+ except Exception as e:
+ #表盘生产失败
+ pass
+ def lcd_update(self,*argc):
+ EventMesh.publish("system_sleep_rest")#防止黑屏
+
+
+
+style_list_screen = lv.obj()
+style_list_screen.add_style(style_screen, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+
+aigc_style_list_title_screen = lv.obj(style_list_screen)
+print("aigc_style_list_title_screen")
+aigc_style_list_title_screen.set_pos(0, 0)
+aigc_style_list_title_screen.set_size(LCD_SIZE_W, 40)
+aigc_style_list_title_screen.add_style(style_screen, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+
+aigc_style_list_title_main_screen = lv.label(aigc_style_list_title_screen)
+aigc_style_list_title_main_screen.set_pos(0, 10)
+aigc_style_list_title_main_screen.set_size(LCD_SIZE_W, 30)
+aigc_style_list_title_main_screen.set_text("表盘风格")
+aigc_style_list_title_main_screen.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+aigc_style_list_title_main_screen.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+
+aigc_style_list_show_screen = lv.obj(style_list_screen)
+print("aigc_style_list_show_screen")
+aigc_style_list_show_screen.set_pos(0, 40)
+aigc_style_list_show_screen.set_size(LCD_SIZE_W, LCD_SIZE_H-40)
+aigc_style_list_show_screen.add_style(style_screen, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+aigc_style_list_load_screen = lv.label(aigc_style_list_show_screen)
+aigc_style_list_load_screen.set_pos(0, 50)
+aigc_style_list_load_screen.set_size(LCD_SIZE_W, 40)
+aigc_style_list_load_screen.set_text("加载中...")
+aigc_style_list_load_screen.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+aigc_style_list_load_screen.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+
+style_wechat_s_btn = lv.style_t()
+style_wechat_s_btn.init()
+style_wechat_s_btn.set_bg_color(lv.color_make(128, 128, 128))
+style_wechat_s_btn.set_border_width(0)
+style_wechat_s_btn.set_shadow_opa(0)
+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_font_youyuan_20_grey = lv.style_t()
+style_font_youyuan_20_grey.init()
+style_font_youyuan_20_grey.set_text_color(lv.color_make(255, 255, 255))
+#style_font_youyuan_20.set_text_font_v2("font_28.bin",28,0)
+style_font_youyuan_20_grey.set_text_font_v2("font_28.bin",28,0)
+
+class aigcStyleLIstScreen(Screen): #aigc风格列表
+ NAME = "aigc_styleList"
+
+ def __init__(self):
+ super().__init__()
+ self.meta = style_list_screen
+ self.timer = osTimer()
+ self.timer_test = osTimer()
+
+ self.aigc_defaultStyle = "anime" #默认是日漫系都风格表盘
+ self.aigc_style_list = []
+ # self.aigc_style_list = [{'code': 'auto', 'name': '默认', 'url': ''}, {'code': '3d', 'name': '3D卡通', 'url': ''}, {'code': 'anime', 'name': '日漫画', 'url': ''}, {'code': 'oil', 'name': '油画', 'url': ''}, {'code': 'watercolor', 'name': '水彩', 'url': ''}, {'code': 'sketch', 'name': '素描', 'url': ''}, {'code': 'chinese-painting', 'name': '中国画', 'url': ''}, {'code': 'flat-illustration', 'name': '扁平插画', 'url': ''}]
+ self.MAX_LIST_COUNT = 10 #最大十种风格类型
+
+ read_data = EventMesh.publish("get_storage_config","dial_style") #获取默认的表盘风格
+ if read_data != None:
+ self.aigc_defaultStyle = read_data
+
+ style_list_screen.add_event_cb(lambda e:EventMesh.callback_wrapper(self.button_cb(e,0)), lv.EVENT.GESTURE, None)
+ aigc_style_list_title_screen.add_event_cb(lambda e:EventMesh.callback_wrapper(self.button_cb(e,0)), lv.EVENT.GESTURE, None)
+ aigc_style_list_show_screen.add_event_cb(lambda e:EventMesh.callback_wrapper(self.button_cb(e,0)), lv.EVENT.GESTURE, None)
+
+ self.wechat_list = lv.obj(aigc_style_list_show_screen)
+ self.wechat_list.set_pos(0, 0)
+ self.wechat_list.set_size(LCD_SIZE_W, LCD_SIZE_H-40)
+ self.wechat_list.set_scrollbar_mode(lv.SCROLLBAR_MODE.OFF)
+ self.wechat_list.add_style(style_screen, lv.PART.MAIN | lv.STATE.DEFAULT)
+ self.wechat_list.add_event_cb(lambda e:EventMesh.callback_wrapper(self.button_cb(e,0)), lv.EVENT.GESTURE, None)
+ # self.wechat_list.set_flex_flow(lv.FLEX_FLOW.COLUMN)#自动排成一列对齐
+ #建立控件
+ self.wechat_list_dict = []
+ for i in range(self.MAX_LIST_COUNT):
+
+ wechat_btn = lv.btn(self.wechat_list)
+ wechat_btn.add_style(style_wechat_s_btn, lv.PART.MAIN | lv.STATE.DEFAULT)
+ _btn_img = lv.img(wechat_btn)
+ _btn_label1 = lv.label(wechat_btn)
+ _btn_label1.add_style(style_font_youyuan_20_grey, lv.PART.MAIN | lv.STATE.DEFAULT)
+ _btn_label2 = lv.label(wechat_btn)
+ wechat_btn.add_flag(lv.obj.FLAG.HIDDEN)
+ wechat_btn.add_flag(lv.obj.FLAG.CLICKABLE)
+ wechat_btn.add_event_cb(lambda e: EventMesh.callback_wrapper(self.button_cb(e,1)),
+ lv.EVENT.SHORT_CLICKED, None)
+ self.wechat_list_dict.append({"num":i,"wechat_btn":wechat_btn,"_btn_label1":_btn_label1,"_btn_label2":_btn_label2,"_btn_img":_btn_img})
+
+ EventMesh.subscribe("set_dial_style", self.set_dial_style)#
+ EventMesh.subscribe("get_dial_style", self.get_dial_style)
+
+ def set_dial_style(self,event,msg):
+ self.aigc_defaultStyle = msg
+ EventMesh.publish("set_storage_config",["dial_style",self.aigc_defaultStyle])
+
+
+ def get_dial_style(self,event,msg):
+ return self.aigc_defaultStyle
+
+ def initialization(self):
+ self.wechat_list.scroll_to(0, 0, lv.ANIM.OFF)
+ self.timer.start(2000,0,self.timer_cb)
+ if self.aigc_style_list == []:
+ self.wechat_list.add_flag(lv.obj.FLAG.HIDDEN)
+ aigc_style_list_load_screen.clear_flag(lv.obj.FLAG.HIDDEN)
+ aigc_style_list_load_screen.set_text("加载中...")
+ else:
+ self.updat_show_list()
+
+ def timer_cb(self,*argc):
+ self.get_dial_style_conct()
+ def get_dial_style_conct(self):
+ new_aigc_style_list = []
+ result = 0
+ url = "http://118.145.158.207/aigc/get-style"
+ data_tmp ={"type":0}
+ try:
+ response = request.post(url,data = ujson.dumps(data_tmp))
+ if response.status_code == 200:
+ result = response.json()
+
+ print(response.content)
+ if "status" in result:
+ status = result["status"]
+ if status == 0: #成功
+ if "data" in result:
+ data = result["data"]
+ print(data)
+ if isinstance(data, list) == True: #判断是不是list类型
+ new_aigc_style_list = data
+ result = 1
+ else: #网络异常
+ result = 0
+ except Exception as e:
+ usys.print_exception(e)
+ result = 0
+
+
+ if result == 1:
+ aigc_style_list_load_screen.add_flag(lv.obj.FLAG.HIDDEN)
+ self.wechat_list.clear_flag(lv.obj.FLAG.HIDDEN)
+ if new_aigc_style_list != self.aigc_style_list: #不相等刷新列表
+ self.aigc_style_list = new_aigc_style_list
+ self.wechat_list.scroll_to(0, 0, lv.ANIM.OFF)
+ self.updat_show_list()
+ return
+ self.updat_show_list()
+ else:
+ if self.aigc_style_list == []: #如果为空并且获取失败
+ self.wechat_list.add_flag(lv.obj.FLAG.HIDDEN)
+ aigc_style_list_load_screen.clear_flag(lv.obj.FLAG.HIDDEN)
+ aigc_style_list_load_screen.set_text("网络异常 请求出错 请重试")
+
+
+ #刷新列表
+ def updat_show_list(self):
+ wechat_btn_end = 0
+ j = 0
+ for i in range(self.MAX_LIST_COUNT):
+ if j > len(self.aigc_style_list) -1:
+ self.wechat_list_dict[i]["wechat_btn"].add_flag(lv.obj.FLAG.HIDDEN)
+ continue
+ j+=1
+ data = self.aigc_style_list[i]
+ name = data["name"]
+ print("data:{} name:{}\r\n".format(data,name))
+ default_code = data["code"]
+
+ self.wechat_list_dict[i]["wechat_btn"].set_size(LCD_SIZE_W,50)
+ self.wechat_list_dict[i]["wechat_btn"].set_pos(0,53*i)
+
+ if default_code == self.aigc_defaultStyle:
+ self.wechat_list_dict[i]["_btn_img"].clear_flag(lv.obj.FLAG.HIDDEN)
+ self.wechat_list_dict[i]["_btn_img"].set_size(32, 25)
+ self.wechat_list_dict[i]["_btn_img"].set_pos(200, 14)
+ self.wechat_list_dict[i]["_btn_img"].set_src("E:/static/menustyle_select.png")
+ else:
+ self.wechat_list_dict[i]["_btn_img"].add_flag(lv.obj.FLAG.HIDDEN)
+
+
+ self.wechat_list_dict[i]["_btn_label1"].set_pos(5, 15)
+ self.wechat_list_dict[i]["_btn_label1"].set_size(LCD_SIZE_W-10, 30)
+ if default_code == self.aigc_defaultStyle:
+ self.wechat_list_dict[i]["_btn_label1"].set_recolor(True) #重新绘制字体颜色
+ self.wechat_list_dict[i]["_btn_label1"].set_text("#ffffff "+"风格:"+name)
+ else:
+ self.wechat_list_dict[i]["_btn_label1"].set_recolor(True) #重新绘制字体颜色
+ self.wechat_list_dict[i]["_btn_label1"].set_text("#C8C8C8 "+"风格:"+name)
+
+
+
+ self.wechat_list_dict[i]["_btn_label2"].set_size(0, 0)
+ self.wechat_list_dict[i]["_btn_label2"].set_text(ujson.dumps(data))
+
+
+ self.wechat_list_dict[i]["wechat_btn"].clear_flag(lv.obj.FLAG.HIDDEN)
+
+ wechat_btn_end = i
+ # self.wechat_list.scroll_to_view(lv.ANIM.OFF)
+ def button_cb(self,e,msg):
+
+ code = e.get_code()
+ indev = lv.indev_get_act()
+ lv.indev_t.wait_release(indev)
+ dir = lv.indev_t.get_gesture_dir(indev)
+ if code == lv.EVENT.GESTURE:
+ if dir == lv.DIR.RIGHT:
+ pass
+ # EventMesh.publish("load_screen", {"screen": "main_menu"})
+ elif code == lv.EVENT.SHORT_CLICKED:
+ if msg != 0:
+ style = str(e.get_target().get_child(1).get_text())
+ style_dict = e.get_target().get_child(2).get_text()
+ style_dict = ujson.loads(style_dict)
+ code_id = style_dict["code"]
+ name = style_dict["name"]
+ url = style_dict["url"]
+ print("style:{} style:{} {} {}\r\n".format(style,code_id,name,url))
+ EventMesh.publish("set_dial_style",code_id)#
+ EventMesh.publish("load_screen", {"screen": "aigc_create","meta":"0"})
+
+
+
+ # {'data': [{'code': 'auto', 'name': '默认', 'url': ''}, {'code': '3d', 'name': '3D卡通', 'url': ''}, {'code': 'anime', 'name': '⽇漫⻛', 'url': ''}, {'code': 'oil', 'name': '油画', 'url': ''}, {'code': 'watercolor', 'name': '水彩', 'url': ''}, {'code': 'sketch', 'name': '素描', 'url': ''}, {'code': 'chinese-painting', 'name': '中国画', 'url': ''}, {'code': 'flat-illustration', 'name': '扁平插画', 'url': ''}], 'status': 0}
+ def done_return(self):
+ EventMesh.publish("return_prev_screen")
+
+ def btn1_release(self):
+ EventMesh.publish("load_screen", {"screen": "main_menu"})
+
+ def btn8_press(self):
+ EventMesh.publish("load_screen", {"screen": "main_menu"})
+
+
+aigc_dial_main_screen = lv.obj()
+aigc_dial_main_screen.add_style(style_screen, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+
+aigc_style_dial_title_screen = lv.obj(aigc_dial_main_screen)
+print("aigc_style_dial_title_screen")
+aigc_style_dial_title_screen.set_pos(0, 0)
+aigc_style_dial_title_screen.set_size(LCD_SIZE_W, 40)
+aigc_style_dial_title_screen.add_style(style_screen, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+
+aigc_style_dial_title = lv.label(aigc_style_dial_title_screen)
+aigc_style_dial_title.set_pos(0, 10)
+aigc_style_dial_title.set_size(LCD_SIZE_W, 30)
+aigc_style_dial_title.set_text("表盘")
+aigc_style_dial_title.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+aigc_style_dial_title.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+aigc_style_dial_list_screen = lv.obj(aigc_dial_main_screen)
+print("aigc_style_dial_list_screen")
+aigc_style_dial_list_screen.set_pos(0, 40)
+aigc_style_dial_list_screen.set_size(LCD_SIZE_W, LCD_SIZE_H-40)
+aigc_style_dial_list_screen.add_style(style_screen, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+
+aigc_dial_main_style_btn = lv.btn(aigc_style_dial_list_screen)
+aigc_dial_main_style_btn.set_pos(5,5)
+aigc_dial_main_style_btn.set_size(LCD_SIZE_W-10,50)
+aigc_dial_main_style_btn.add_flag(lv.obj.FLAG.CLICKABLE)
+aigc_dial_main_style_btn.add_style(style_wechat_s_btn, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+aigc_dial_main_style_btn_label = lv.label(aigc_dial_main_style_btn)
+aigc_dial_main_style_btn_label.set_pos(5, 15)
+aigc_dial_main_style_btn_label.set_size(LCD_SIZE_W-10, 30)
+aigc_dial_main_style_btn_label.set_text("表盘风格")
+aigc_dial_main_style_btn_label.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+aigc_dial_main_style_btn_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+aigc_dial_main_create_btn = lv.btn(aigc_style_dial_list_screen)
+aigc_dial_main_create_btn.set_pos(5,60)
+aigc_dial_main_create_btn.set_size(LCD_SIZE_W-10,50)
+aigc_dial_main_create_btn.add_flag(lv.obj.FLAG.CLICKABLE)
+aigc_dial_main_create_btn.add_style(style_wechat_s_btn, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+aigc_dial_main_create_btn_label = lv.label(aigc_dial_main_create_btn)
+aigc_dial_main_create_btn_label.set_pos(5, 15)
+aigc_dial_main_create_btn_label.set_size(LCD_SIZE_W-10, 30)
+aigc_dial_main_create_btn_label.set_text("表盘生成")
+aigc_dial_main_create_btn_label.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+aigc_dial_main_create_btn_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+class aigcMainLIstScreen(Screen): #aigc主菜单列表
+ NAME = "aigc_mainlist"
+
+ def __init__(self):
+ super().__init__()
+ self.meta = aigc_dial_main_screen
+ aigc_dial_main_screen.add_event_cb(lambda e:EventMesh.callback_wrapper(self.button_cb(e,"void")), lv.EVENT.GESTURE, None)
+ aigc_style_dial_title_screen.add_event_cb(lambda e:EventMesh.callback_wrapper(self.button_cb(e,"void")), lv.EVENT.GESTURE, None)
+ aigc_style_dial_list_screen.add_event_cb(lambda e: EventMesh.callback_wrapper(self.button_cb(e, "void")),lv.EVENT.GESTURE, None)
+ aigc_dial_main_style_btn.add_event_cb(lambda e: EventMesh.callback_wrapper(self.button_cb(e, "aigc_styleList")), lv.EVENT.SHORT_CLICKED , None)
+ aigc_dial_main_create_btn.add_event_cb(lambda e: EventMesh.callback_wrapper(self.button_cb(e, "aigc_create")), lv.EVENT.SHORT_CLICKED , None)
+
+ def initialization(self):
+
+ pass
+ def button_cb(self,e,msg):
+ code = e.get_code()
+ indev = lv.indev_get_act()
+ lv.indev_t.wait_release(indev)
+ dir = lv.indev_t.get_gesture_dir(indev)
+ if code == lv.EVENT.GESTURE:
+ if dir == lv.DIR.RIGHT:
+ pass
+ # EventMesh.publish("load_screen", {"screen": "main_menu"})
+ elif code == lv.EVENT.SHORT_CLICKED:
+ if msg != "void":
+ if msg == "aigc_create":
+ EventMesh.publish("load_screen", {"screen": "{}".format(msg),"meta":"0"})
+ else:
+ EventMesh.publish("load_screen", {"screen": "{}".format(msg)})
+
+ def done_return(self):
+
+ EventMesh.publish("load_screen", {"screen": "main_menu"})
+
+ def btn1_release(self):
+ EventMesh.publish("load_screen", {"screen": "main_menu"})
+
+ def btn8_press(self):
+ EventMesh.publish("watch_top_show")
+ EventMesh.publish("load_screen", {"screen": "main_menu"})
\ No newline at end of file