# xiaozhi-VLPro **Repository Path**: isee00/xiaozhi-VLPro ## Basic Information - **Project Name**: xiaozhi-VLPro - **Description**: No description available - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-05-09 - **Last Updated**: 2025-05-13 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 智能语音助手项目介绍 ## 项目概述 这是一个名为"py-xiaozhi"的智能语音助手项目,它结合了语音交互和视觉识别能力,可以通过语音与用户进行对话,并能够理解和分析用户视野中的内容。整个项目采用Python开发,使用模块化设计,支持多种通信协议和显示模式。 ## 演示 - [Bilibili 演示视频](https://www.bilibili.com/video/BV1RzQzYgEk8/) ## 核心功能 1. **语音交互**: - 唤醒词检测(支持自定义唤醒词) - 语音指令识别与响应 - 情感化语音合成(支持多种情绪表达) 2. **视觉识别**: - 实时摄像头图像采集 - 图像内容分析(基于大模型API) - 视觉结果语音反馈 3. **多种交互模式**: - 自动模式(持续聆听) - 手动模式(按需聆听) - 支持打断当前回答 4. **跨平台兼容**: - 支持Windows、Linux、MacOS等多种操作系统 - 提供GUI和CLI两种界面 ## 技术实现 ### 1. 整体架构 项目采用**事件驱动**的架构设计,主要组件包括: ``` Application(主类) ├── 协议层(WebSocket/MQTT) ├── 音频处理层 │ ├── 唤醒词检测 │ ├── 音频编解码 │ └── 音频流管理 ├── 视觉处理层 │ ├── 摄像头管理 │ ├── 图像分析 │ └── 文本转语音 └── 显示层(GUI/CLI) ``` ### 2. 核心代码实现 #### 语音交互实现 ```python def _handle_stt_message(self, data): """处理语音转文本消息""" text = data.get("text", "") if text: logger.info(f">> {text}") self.schedule(lambda: self.set_chat_message("user", text)) # 检查是否为视觉分析结果 text_lower = text.lower() if (text.startswith("[VisionAnalysis]") or text_lower.startswith("vision analysis")): logger.info("检测到视觉分析结果,忽略视觉关键词检查") return # 检查视觉关键词 if VISION_AVAILABLE: self.schedule(lambda: self._handle_vision_keywords(text)) ``` #### 视觉分析实现 ```python def _process_vision_analysis(self, text): """处理视觉分析请求""" try: # 停止当前的语音输入和输出 if self.device_state == DeviceState.LISTENING: asyncio.run_coroutine_threadsafe( self.protocol.send_stop_listening(), self.loop ) # 捕获图像并分析 frame_base64 = self.camera_manager.capture_frame_to_base64() analysis_result = self.image_analyzer.analyze_image(frame_base64, prompt) # 添加前缀标记并转换为语音 marked_result = f"Vision Analysis: {analysis_result}" pcm_data = self.tts_engine.text_to_pcm(marked_result) # 分段发送音频数据 # [此处是音频分段处理和发送的代码] except Exception as e: logger.error(f"处理视觉分析请求失败: {e}") ``` #### 状态管理实现 ```python def set_device_state(self, state): """设置设备状态""" if self.device_state == state: return old_state = self.device_state self.device_state = state logger.info(f"状态变更: {old_state} -> {state}") # 根据状态执行相应操作 if state == DeviceState.IDLE: # IDLE状态处理... elif state == DeviceState.CONNECTING: # CONNECTING状态处理... elif state == DeviceState.LISTENING: # LISTENING状态处理... elif state == DeviceState.SPEAKING: # SPEAKING状态处理... ``` ## 逻辑思路 ### 1. 事件循环与异步处理 整个应用基于**事件循环**机制,通过`asyncio`实现异步操作,解决了网络通信、音频处理等IO密集型任务的效率问题。主要设计思路: - 将长时间运行的操作放入事件循环 - 使用线程分离UI和后台处理 - 通过事件触发机制响应各种状态变化 ### 2. 状态机设计 应用采用**状态机**设计模式,设备在不同状态间转换: ``` IDLE → CONNECTING → LISTENING → SPEAKING → IDLE ``` 每个状态下,应用有不同的行为和可执行的操作,确保了程序的稳定性和可预测性。 ### 3. 视觉分析流程 视觉分析的创新点在于将分析结果转换为用户输入的形式发送回服务器: 1. 检测关键词触发视觉分析 2. 暂停当前会话 3. 拍摄并分析图像 4. 将分析结果转换为音频 5. 将音频以用户输入的形式发送给服务器 6. 添加前缀标记防止循环触发 ### 4. 优化策略 - **音频分块处理**:将大音频文件分成小块处理,提高响应速度 - **异步IO**:使用异步IO减少阻塞 - **线程池**:使用线程池处理计算密集型任务 - **前缀标记机制**:通过前缀标记防止视觉分析结果再次触发分析 ## 技术亮点与挑战 1. **多模态融合**:实现了语音和视觉的无缝融合,使助手具备多感官能力 2. **实时性处理**:使用流式处理技术确保低延迟 3. **模块化设计**:各功能模块高度解耦,便于扩展 4. **健壮性**:完善的错误处理和恢复机制 ## 未来展望 1. **本地模型支持**:减少对云服务的依赖 2. **多模态理解增强**:结合更多感知能力 3. **场景化应用**:针对特定场景优化体验 ## 贡献 欢迎提交 Issues 和 Pull Requests! ## 感谢以下开源人员-排名不分前后 [junsen](https://github.com/Huang-junsen/py-xiaozhi) [Xiaoxia](https://github.com/78) [zhh827](https://github.com/zhh827) [四博智联-李洪刚](https://github.com/SmartArduino) [HonestQiao](https://github.com/HonestQiao) [vonweller](https://github.com/vonweller) [孙卫公](https://space.bilibili.com/416954647)