From 83a3d0eabedeae1c2ce1143df5bf8f2812b3f5b0 Mon Sep 17 00:00:00 2001 From: hrz <1710360675@qq.com> Date: Sun, 23 Nov 2025 15:11:35 +0800 Subject: [PATCH] =?UTF-8?q?update:=E4=BC=98=E5=8C=96=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- main/xiaozhi-server/core/handle/reportHandle.py | 9 ++++++--- .../core/providers/asr/aliyun_stream.py | 11 ++++++++--- main/xiaozhi-server/core/providers/asr/base.py | 9 ++++++--- .../core/providers/asr/doubao_stream.py | 6 +++--- .../core/providers/asr/xunfei_stream.py | 6 +++--- main/xiaozhi-server/core/providers/vad/silero.py | 9 ++++++--- main/xiaozhi-server/core/utils/util.py | 8 ++++++-- 7 files changed, 38 insertions(+), 20 deletions(-) diff --git a/main/xiaozhi-server/core/handle/reportHandle.py b/main/xiaozhi-server/core/handle/reportHandle.py index 09ad0218..cc78a157 100644 --- a/main/xiaozhi-server/core/handle/reportHandle.py +++ b/main/xiaozhi-server/core/handle/reportHandle.py @@ -94,9 +94,12 @@ def opus_to_wav(conn, opus_data): # 返回完整的WAV数据 return bytes(wav_header) + pcm_data_bytes finally: - if decoder: - del decoder - gc.collect() + if decoder is not None: + try: + del decoder + gc.collect() + except Exception as e: + conn.logger.bind(tag=TAG).debug(f"释放decoder资源时出错: {e}") def enqueue_tts_report(conn, text, opus_data): diff --git a/main/xiaozhi-server/core/providers/asr/aliyun_stream.py b/main/xiaozhi-server/core/providers/asr/aliyun_stream.py index 0728f6c6..23999fca 100644 --- a/main/xiaozhi-server/core/providers/asr/aliyun_stream.py +++ b/main/xiaozhi-server/core/providers/asr/aliyun_stream.py @@ -349,6 +349,11 @@ class ASRProvider(ASRProviderBase): async def close(self): """关闭资源""" await self._cleanup(None) - if hasattr(self, 'decoder'): - del self.decoder - gc.collect() + if hasattr(self, 'decoder') and self.decoder is not None: + try: + del self.decoder + self.decoder = None + gc.collect() + logger.bind(tag=TAG).debug("Aliyun decoder resources released") + except Exception as e: + logger.bind(tag=TAG).debug(f"释放Aliyun decoder资源时出错: {e}") diff --git a/main/xiaozhi-server/core/providers/asr/base.py b/main/xiaozhi-server/core/providers/asr/base.py index d0a26cf7..2d88ff70 100644 --- a/main/xiaozhi-server/core/providers/asr/base.py +++ b/main/xiaozhi-server/core/providers/asr/base.py @@ -268,6 +268,9 @@ class ASRProviderBase(ABC): logger.bind(tag=TAG).error(f"音频解码过程发生错误: {e}") return [] finally: - if decoder: - del decoder - gc.collect() + if decoder is not None: + try: + del decoder + gc.collect() + except Exception as e: + logger.bind(tag=TAG).debug(f"释放decoder资源时出错: {e}") diff --git a/main/xiaozhi-server/core/providers/asr/doubao_stream.py b/main/xiaozhi-server/core/providers/asr/doubao_stream.py index ed1c0c9d..7d0871a6 100644 --- a/main/xiaozhi-server/core/providers/asr/doubao_stream.py +++ b/main/xiaozhi-server/core/providers/asr/doubao_stream.py @@ -373,14 +373,14 @@ class ASRProvider(ASRProviderBase): self.is_processing = False # 显式释放decoder资源 - if hasattr(self, 'decoder') and self.decoder: + if hasattr(self, 'decoder') and self.decoder is not None: try: del self.decoder self.decoder = None gc.collect() - logger.bind(tag=TAG).info("Doubao decoder resources released") + logger.bind(tag=TAG).debug("Doubao decoder resources released") except Exception as e: - logger.bind(tag=TAG).error(f"Error releasing Doubao decoder: {e}") + logger.bind(tag=TAG).debug(f"释放Doubao decoder资源时出错: {e}") # 清理所有连接的音频缓冲区 if hasattr(self, '_connections'): diff --git a/main/xiaozhi-server/core/providers/asr/xunfei_stream.py b/main/xiaozhi-server/core/providers/asr/xunfei_stream.py index 0022d693..7bd992a9 100644 --- a/main/xiaozhi-server/core/providers/asr/xunfei_stream.py +++ b/main/xiaozhi-server/core/providers/asr/xunfei_stream.py @@ -515,14 +515,14 @@ class ASRProvider(ASRProviderBase): self.is_processing = False # 显式释放decoder资源 - if hasattr(self, 'decoder') and self.decoder: + if hasattr(self, 'decoder') and self.decoder is not None: try: del self.decoder self.decoder = None gc.collect() - logger.bind(tag=TAG).info("Xunfei decoder resources released") + logger.bind(tag=TAG).debug("Xunfei decoder resources released") except Exception as e: - logger.bind(tag=TAG).error(f"Error releasing Xunfei decoder: {e}") + logger.bind(tag=TAG).debug(f"释放Xunfei decoder资源时出错: {e}") # 清理所有连接的音频缓冲区 if hasattr(self, "_connections"): diff --git a/main/xiaozhi-server/core/providers/vad/silero.py b/main/xiaozhi-server/core/providers/vad/silero.py index 738c2646..6fc26291 100644 --- a/main/xiaozhi-server/core/providers/vad/silero.py +++ b/main/xiaozhi-server/core/providers/vad/silero.py @@ -38,9 +38,12 @@ class VADProvider(VADProviderBase): self.frame_window_threshold = 3 def __del__(self): - if hasattr(self, 'decoder'): - del self.decoder - gc.collect() + if hasattr(self, 'decoder') and self.decoder is not None: + try: + del self.decoder + gc.collect() + except Exception: + pass def is_vad(self, conn, opus_packet): try: diff --git a/main/xiaozhi-server/core/utils/util.py b/main/xiaozhi-server/core/utils/util.py index 190c4d6a..9586ace8 100644 --- a/main/xiaozhi-server/core/utils/util.py +++ b/main/xiaozhi-server/core/utils/util.py @@ -395,8 +395,12 @@ def opus_datas_to_wav_bytes(opus_datas, sample_rate=16000, channels=1): wf.writeframes(pcm_bytes) return wav_buffer.getvalue() finally: - del decoder - gc.collect() + if decoder is not None: + try: + del decoder + gc.collect() + except Exception: + pass def check_vad_update(before_config, new_config):