From: azao <821478748@qq.com> Date: Thu, 23 Oct 2025 10:06:53 +0000 (+0800) Subject: NLP接口初步实现 X-Git-Url: http://git.snicker.com.cn/sitemap.xml?a=commitdiff_plain;h=2f0057830ff66011b2a5d7d8e2cd58e09cd825c1;p=mirrors%2FASR1603_G5.git NLP接口初步实现 语速调节功能实现 --- diff --git a/2.sdk/project/7PIN_1_5/sdk/services/microPython/ports/quectel/core/ai_VC.py b/2.sdk/project/7PIN_1_5/sdk/services/microPython/ports/quectel/core/ai_VC.py index c2fdd068..7083658b 100644 --- a/2.sdk/project/7PIN_1_5/sdk/services/microPython/ports/quectel/core/ai_VC.py +++ b/2.sdk/project/7PIN_1_5/sdk/services/microPython/ports/quectel/core/ai_VC.py @@ -46,8 +46,8 @@ PRESS_AUDIO_MODE = 0 #是按键音 0 是使用音频文件 #dev_type = "7PIN_BK_coze"#k扣子小瑞 #dev_type = "7PIN_BK_EU"#英文小瑞 #dev_type = "7PIN_coze"#柒牌扣子 -dev_type = "7PIN"#柒牌 -# dev_type = "7PIN_1_5"#柒牌1.5 +# dev_type = "7PIN"#柒牌 +dev_type = "7PIN_1_5"#柒牌1.5 #dev_type = 'momo'#食梦貘 #dev_type = 'sjgq'#四季甘泉 #dev_type = 'szbst'#深圳百事通 @@ -1176,16 +1176,15 @@ class AI_dev(Abstract): def set_speech_rate(self,event,msg): #msg的取值是0.5,1.0,1.5,2.0 #而语速初始值是0,范围是-50~50 + print("已进入设置速率") if msg == 0.5: - self.speech_rate = -50 + EventMesh.publish("rate_change",-50) elif msg == 1.0: - self.speech_rate = 0 + EventMesh.publish("rate_change",0) elif msg == 1.5: - self.speech_rate = 25 + EventMesh.publish("rate_change",25) elif msg == 2.0: - self.speech_rate = 50 - EventMesh.publish("set_storage_config",["speech_rate",self.speech_rate]) - print("set_speech_rate:{}".format(self.speech_rate)) + EventMesh.publish("rate_change",50) def btnInfo_queue_thread(self): while True: data = self.btnInfo_queue.get() @@ -2516,7 +2515,8 @@ class AI_VC(Abstract): EventMesh.subscribe("play_music",self.play_music) EventMesh.subscribe("set_vad_silence",self.set_vad_silence) EventMesh.subscribe("kws_even",self.kws_even) - + EventMesh.subscribe("change_volume",self.change_volume) + EventMesh.subscribe("find_cmd",self.find_cmd) self.voice_timer = osTimer()#语音留言10S按下按键确定是否播放的判断定时器 self.voice_cnt = 0 #留言定时器计数 self.voicerupt_flag = 0#留言选择按键接听标志位 @@ -2911,6 +2911,8 @@ class AI_VC(Abstract): EventMesh.subscribe("get_audio_play_state",self.get_audio_play_state) EventMesh.subscribe("set_voicerupt_flag",self.set_voicerupt_flag)#按键中断触发留言播放 EventMesh.subscribe("get_recv_voice",self.get_recv_voice)#获取是否收到留言 + EventMesh.subscribe("rate_change",self.rate_change)#直接修改语速 + EventMesh.subscribe("rate_move",self.rate_move)#模糊修改语速 # EventMesh.subscribe("get_voicerupt_flag",self.get_voicerupt_flag)#获取留言播放状态 # EventMesh.subscribe("chenggong_tone",self.chenggong_tone) @@ -2979,6 +2981,17 @@ class AI_VC(Abstract): self.VC_stop_play_audio_flag = msg print("self.VC_stop_play_audio_flag:{}".format(self.VC_stop_play_audio_flag)) + def rate_change(self,event,msg):#直接设置语速(数字) + self.speech_rate = msg + EventMesh.publish("set_storage_config",["speech_rate",self.speech_rate]) + print("set_speech_rate:{}".format(self.speech_rate)) + def rate_move(self,event,msg):#设置语速(模糊(å¿«/慢一点)) + if msg == 1:#增大 + self.speech_rate += 10 + else:#减小 + self.speech_rate -= 10 + EventMesh.publish("set_storage_config",["speech_rate",self.speech_rate]) + print("set_speech_rate:{}".format(self.speech_rate)) def audio_test(self,event = None, msg = None): self.VC_Speech_Start() self.VC_Play_Start() @@ -5383,6 +5396,57 @@ class AI_VC(Abstract): EventMesh.publish("set_storage_config",["VC_TTS_voice_key",self.VC_TTS_voice_key]) print("VC_TTS_voice_type:{}".format(self.VC_TTS_voice_type)) print("VC_TTS_voice_key:{}".format(self.VC_TTS_voice_key)) + #修改音量大小 msg为1则为加大,msg为0则为减小 + def change_volume(self,event =None, msg =None): + if msg == 0 : + self.VC_TTS_volume -= 10 + if self.VC_TTS_volume < 0: + self.VC_TTS_volume = 0 + self.AI_TTS_str = "音量已经是最小啦" + else: + self.aud.setVolume(self.VC_TTS_volume //10) + EventMesh.publish("set_storage_config",["VC_TTS_volume",self.VC_TTS_volume]) + EventMesh.publish("post_device_state") + EventMesh.publish("adjust_volume_toBle",self.VC_TTS_volume) + self.AI_TTS_str = "好嘞,音量已经调小了,当前音量是{}".format(self.VC_TTS_volume) + elif msg == 1: + self.VC_TTS_volume += 10 + if self.VC_TTS_volume > 100: + self.VC_TTS_volume = 100 + self.AI_TTS_str = "音量已经是最大啦" + else: + self.aud.setVolume(self.VC_TTS_volume //10) + EventMesh.publish("set_storage_config",["VC_TTS_volume",self.VC_TTS_volume]) + EventMesh.publish("post_device_state") + EventMesh.publish("adjust_volume_toBle",self.VC_TTS_volume) + self.AI_TTS_str = "好嘞,音量已经调大了,当前音量是{}".format(self.VC_TTS_volume) + #查询指令判断 + def find_cmd(self,event ,msg): + if "电量" in msg: + battery = EventMesh.publish("get_battery") + print("电量查询:{}".format(battery)) + tts_play_str = "电量剩余百分之{}".format(battery) + EventMesh.publish("play_tts",[tts_play_str,1]) + elif "信号" in msg: + signal = net.csqQueryPoll() + tts_play_str = "当前信号{}".format(signal) + EventMesh.publish("play_tts",[tts_play_str,1]) + elif "卡号" in msg: + iccid = sim.getIccid() + if iccid != -1 and len(iccid) > 5: + print("iccid{}".format(iccid)) + tts_play_str = "当前卡号为:{}".format(iccid) + else: + tts_play_str = "卡号查询失败" + EventMesh.publish("play_tts",[tts_play_str,1]) + elif "设备号" in msg: + imei = modem.getDevImei() + if imei != -1 and len(imei) > 5: + print("IMEI:{}".format(imei)) + tts_play_str = "当前设备号为:{}".format(imei) + else: + tts_play_str = "设备号查询失败" + EventMesh.publish("play_tts",[tts_play_str,1]) #语音留言 def play_new_voice(self,event = None,msg= None): EventMesh.publish("publish_AI_btnInfo",{"func":self.play_new_voice_cb,"data":msg}) diff --git a/2.sdk/project/7PIN_1_5/sdk/services/microPython/ports/quectel/core/protocol.py b/2.sdk/project/7PIN_1_5/sdk/services/microPython/ports/quectel/core/protocol.py index 3846cd21..ea0643d6 100644 --- a/2.sdk/project/7PIN_1_5/sdk/services/microPython/ports/quectel/core/protocol.py +++ b/2.sdk/project/7PIN_1_5/sdk/services/microPython/ports/quectel/core/protocol.py @@ -2467,6 +2467,59 @@ class IOTWeb_sos_listProtoCol(ProtoCol): read_soslist = EventMesh.publish("get_storage_config","sos_list") print(read_soslist) EventMesh.publish(WEB_CMD_ENUM.SOS_LIST_S_CMD) +#NLP指令处理 +def ai_cmd_handle(cmd): + # print("") + if "音量" in cmd:#当指令中有音量时,截取音量操作 + voice_start_index = cmd.index("音量") + len("音量")#动态判断截取部分 + volume = cmd[voice_start_index:]#音量截取 + if volume == "加大": + EventMesh.publish("change_volume",1) + elif volume == "减小": + EventMesh.publish("change_volume",0) + elif "查询" in cmd:#当指令中有查询时,截取查询操作 + voice_start_index = cmd.index("查询") + len("查询")#动态判断截取部分 + find = cmd[:voice_start_index]#查询截取 + EventMesh.publish("find_cmd",find) + elif "讲话" in cmd:#当指令中有讲话时,截取语速操作 + voice_start_index = cmd.index("讲话") + len("讲话")#动态判断截取部分 + find = cmd[voice_start_index:]#查询截取 + if "å¿«" in find: + EventMesh.publish("rate_move",1) + elif "慢" in find: + EventMesh.publish("rate_move",0) +#NLP指令 +class IOTWeb_Nlp_ConfigProtoCol(ProtoCol): + """ai_cmd""" + TYPE = "ai_cmd" + + def send(self, event, msg): + # print("ai_cmd{}".format(msg)) + # 通过websocket发送到服务器端 + date_tmp = utime.localtime() + time_tmp = utime.mktime(date_tmp) + ai_cmd = { + "cmd":"ai_cmd", + "ts":time_tmp, + "msg":"AI指令", + "data":None + } + send_data = b'' + send_data = protocol_send_total_data(ai_cmd) + print("send_data ai_cmd{}".format(send_data)) + EventMesh.publish("CHANNEL_IOT_WEB_SEND", send_data) + + def recv(self, event, msg): + """ + @param event:上行下发push_music + @param msg: 接收到的下行数据 + """ + #提取指令名称 + cmdName = msg["data"] + print("提取到的AI指令为{}".format(cmdName)) + ai_cmd_handle(cmdName) + print("recv push_music{}".format(msg)) + #音乐播放 class IOTWeb_play_MusicProtoCol(ProtoCol): """push_music""" @@ -2477,14 +2530,14 @@ class IOTWeb_play_MusicProtoCol(ProtoCol): # 通过websocket发送到服务器端 date_tmp = utime.localtime() time_tmp = utime.mktime(date_tmp) - get_chat_config = { + push_music = { "cmd":"push_music", "ts":time_tmp, "msg":"音乐播放", "data":None } send_data = b'' - send_data = protocol_send_total_data(get_chat_config) + send_data = protocol_send_total_data(push_music) print("send_data push_music{}".format(send_data)) EventMesh.publish("CHANNEL_IOT_WEB_SEND", send_data)