diff --git a/src/chat/message_receive/message.py b/src/chat/message_receive/message.py index ea92ddbad..45f797d11 100644 --- a/src/chat/message_receive/message.py +++ b/src/chat/message_receive/message.py @@ -13,6 +13,7 @@ from src.chat.utils.utils_image import get_image_manager from src.chat.utils.utils_voice import get_voice_text from src.chat.utils.utils_video import get_video from src.multimodal.video_analyzer import get_video_analyzer +from src.config.config import global_config from .chat_stream import ChatStream install(extra_lines=3) @@ -195,38 +196,56 @@ class MessageRecv(Message): self.is_picid = False self.is_emoji = False self.is_voice = False - if isinstance(segment.data, dict): - try: - # 从Adapter接收的视频数据 - video_base64 = segment.data.get("base64") - filename = segment.data.get("filename", "video.mp4") - - if video_base64: - # 解码base64视频数据 - video_bytes = base64.b64decode(video_base64) + logger.info(f"接收到视频消息,数据类型: {type(segment.data)}") + logger.debug(f"视频数据内容: {segment.data}") + if global_config.video_analysis.enable: + logger.info("已启用视频识别,开始识别") + if isinstance(segment.data, dict): + try: + # 从Adapter接收的视频数据 + video_base64 = segment.data.get("base64") + filename = segment.data.get("filename", "video.mp4") - # 使用video analyzer分析视频 - video_analyzer = get_video_analyzer() - result = await video_analyzer.analyze_video_from_bytes( - video_bytes, - filename, - prompt="请详细分析这个视频的内容,包括场景、人物、动作、情感等" - ) + logger.info(f"视频文件名: {filename}") + logger.info(f"Base64数据长度: {len(video_base64) if video_base64 else 0}") - # 返回视频分析结果 - summary = result.get("summary", "") - if summary: - return f"[视频内容] {summary}" + if video_base64: + # 解码base64视频数据 + video_bytes = base64.b64decode(video_base64) + logger.info(f"解码后视频大小: {len(video_bytes)} 字节") + + # 使用video analyzer分析视频 + video_analyzer = get_video() + result = await video_analyzer.analyze_video_from_bytes( + video_bytes, + filename, + prompt="请详细分析这个视频的内容,包括场景、人物、动作、情感等" + ) + + logger.info(f"视频分析结果: {result}") + + # 返回视频分析结果 + summary = result.get("summary", "") + if summary: + return f"[视频内容] {summary}" + else: + return "[已收到视频,但分析失败]" else: - return "[已收到视频,但分析失败]" - else: - return "[收到视频消息,但数据异常]" - except Exception as e: - logger.error(f"视频处理失败: {str(e)}") - return "[收到视频,但处理时出现错误]" - return "[发了一个视频,但格式不支持]" + logger.warning("视频消息中没有base64数据") + return "[收到视频消息,但数据异常]" + except Exception as e: + logger.error(f"视频处理失败: {str(e)}") + import traceback + logger.error(f"错误详情: {traceback.format_exc()}") + return "[收到视频,但处理时出现错误]" + else: + logger.warning(f"视频消息数据不是字典格式: {type(segment.data)}") + return "[发了一个视频,但格式不支持]" + else: + return "" else: - return "" + logger.info("未启用视频识别") + return "[视频]" except Exception as e: logger.error(f"处理消息段失败: {str(e)}, 类型: {segment.type}, 数据: {segment.data}") return f"[处理失败的{segment.type}消息]" @@ -355,50 +374,54 @@ class MessageRecvS4U(MessageRecv): logger.info(f"接收到视频消息,数据类型: {type(segment.data)}") logger.debug(f"视频数据内容: {segment.data}") - - if isinstance(segment.data, dict): - try: - # 从Adapter接收的视频数据 - video_base64 = segment.data.get("base64") - filename = segment.data.get("filename", "video.mp4") - - logger.info(f"视频文件名: {filename}") - logger.info(f"Base64数据长度: {len(video_base64) if video_base64 else 0}") - - if video_base64: - # 解码base64视频数据 - video_bytes = base64.b64decode(video_base64) - logger.info(f"解码后视频大小: {len(video_bytes)} 字节") + if global_config.video_analysis.enable: + logger.info("已启用视频识别,开始识别") + if isinstance(segment.data, dict): + try: + # 从Adapter接收的视频数据 + video_base64 = segment.data.get("base64") + filename = segment.data.get("filename", "video.mp4") - # 使用video analyzer分析视频 - video_analyzer = get_video() - result = await video_analyzer.analyze_video_from_bytes( - video_bytes, - filename, - prompt="请详细分析这个视频的内容,包括场景、人物、动作、情感等" - ) + logger.info(f"视频文件名: {filename}") + logger.info(f"Base64数据长度: {len(video_base64) if video_base64 else 0}") - logger.info(f"视频分析结果: {result}") - - # 返回视频分析结果 - summary = result.get("summary", "") - if summary: - return f"[视频内容] {summary}" + if video_base64: + # 解码base64视频数据 + video_bytes = base64.b64decode(video_base64) + logger.info(f"解码后视频大小: {len(video_bytes)} 字节") + + # 使用video analyzer分析视频 + video_analyzer = get_video() + result = await video_analyzer.analyze_video_from_bytes( + video_bytes, + filename, + prompt="请详细分析这个视频的内容,包括场景、人物、动作、情感等" + ) + + logger.info(f"视频分析结果: {result}") + + # 返回视频分析结果 + summary = result.get("summary", "") + if summary: + return f"[视频内容] {summary}" + else: + return "[已收到视频,但分析失败]" else: - return "[已收到视频,但分析失败]" - else: - logger.warning("视频消息中没有base64数据") - return "[收到视频消息,但数据异常]" - except Exception as e: - logger.error(f"视频处理失败: {str(e)}") - import traceback - logger.error(f"错误详情: {traceback.format_exc()}") - return "[收到视频,但处理时出现错误]" + logger.warning("视频消息中没有base64数据") + return "[收到视频消息,但数据异常]" + except Exception as e: + logger.error(f"视频处理失败: {str(e)}") + import traceback + logger.error(f"错误详情: {traceback.format_exc()}") + return "[收到视频,但处理时出现错误]" + else: + logger.warning(f"视频消息数据不是字典格式: {type(segment.data)}") + return "[发了一个视频,但格式不支持]" else: - logger.warning(f"视频消息数据不是字典格式: {type(segment.data)}") - return "[发了一个视频,但格式不支持]" + return "" else: - return "" + logger.info("未启用视频识别") + return "[视频]" except Exception as e: logger.error(f"处理消息段失败: {str(e)}, 类型: {segment.type}, 数据: {segment.data}") return f"[处理失败的{segment.type}消息]"