NLP接口初步实现
authorazao <821478748@qq.com>
Thu, 23 Oct 2025 10:06:53 +0000 (18:06 +0800)
committerazao <821478748@qq.com>
Thu, 23 Oct 2025 10:06:53 +0000 (18:06 +0800)
语速调节功能实现

2.sdk/project/7PIN_1_5/sdk/services/microPython/ports/quectel/core/ai_VC.py
2.sdk/project/7PIN_1_5/sdk/services/microPython/ports/quectel/core/protocol.py

index c2fdd06..7083658 100644 (file)
@@ -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}) 
index 3846cd2..ea0643d 100644 (file)
@@ -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)