[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"similar-OwlAIProject--Owl":3,"tool-OwlAIProject--Owl":62},[4,18,26,36,46,54],{"id":5,"name":6,"github_repo":7,"description_zh":8,"stars":9,"difficulty_score":10,"last_commit_at":11,"category_tags":12,"status":17},4358,"openclaw","openclaw\u002Fopenclaw","OpenClaw 是一款专为个人打造的本地化 AI 助手，旨在让你在自己的设备上拥有完全可控的智能伙伴。它打破了传统 AI 助手局限于特定网页或应用的束缚，能够直接接入你日常使用的各类通讯渠道，包括微信、WhatsApp、Telegram、Discord、iMessage 等数十种平台。无论你在哪个聊天软件中发送消息，OpenClaw 都能即时响应，甚至支持在 macOS、iOS 和 Android 设备上进行语音交互，并提供实时的画布渲染功能供你操控。\n\n这款工具主要解决了用户对数据隐私、响应速度以及“始终在线”体验的需求。通过将 AI 部署在本地，用户无需依赖云端服务即可享受快速、私密的智能辅助，真正实现了“你的数据，你做主”。其独特的技术亮点在于强大的网关架构，将控制平面与核心助手分离，确保跨平台通信的流畅性与扩展性。\n\nOpenClaw 非常适合希望构建个性化工作流的技术爱好者、开发者，以及注重隐私保护且不愿被单一生态绑定的普通用户。只要具备基础的终端操作能力（支持 macOS、Linux 及 Windows WSL2），即可通过简单的命令行引导完成部署。如果你渴望拥有一个懂你",349277,3,"2026-04-06T06:32:30",[13,14,15,16],"Agent","开发框架","图像","数据工具","ready",{"id":19,"name":20,"github_repo":21,"description_zh":22,"stars":23,"difficulty_score":10,"last_commit_at":24,"category_tags":25,"status":17},3808,"stable-diffusion-webui","AUTOMATIC1111\u002Fstable-diffusion-webui","stable-diffusion-webui 是一个基于 Gradio 构建的网页版操作界面，旨在让用户能够轻松地在本地运行和使用强大的 Stable Diffusion 图像生成模型。它解决了原始模型依赖命令行、操作门槛高且功能分散的痛点，将复杂的 AI 绘图流程整合进一个直观易用的图形化平台。\n\n无论是希望快速上手的普通创作者、需要精细控制画面细节的设计师，还是想要深入探索模型潜力的开发者与研究人员，都能从中获益。其核心亮点在于极高的功能丰富度：不仅支持文生图、图生图、局部重绘（Inpainting）和外绘（Outpainting）等基础模式，还独创了注意力机制调整、提示词矩阵、负向提示词以及“高清修复”等高级功能。此外，它内置了 GFPGAN 和 CodeFormer 等人脸修复工具，支持多种神经网络放大算法，并允许用户通过插件系统无限扩展能力。即使是显存有限的设备，stable-diffusion-webui 也提供了相应的优化选项，让高质量的 AI 艺术创作变得触手可及。",162132,"2026-04-05T11:01:52",[14,15,13],{"id":27,"name":28,"github_repo":29,"description_zh":30,"stars":31,"difficulty_score":32,"last_commit_at":33,"category_tags":34,"status":17},1381,"everything-claude-code","affaan-m\u002Feverything-claude-code","everything-claude-code 是一套专为 AI 编程助手（如 Claude Code、Codex、Cursor 等）打造的高性能优化系统。它不仅仅是一组配置文件，而是一个经过长期实战打磨的完整框架，旨在解决 AI 代理在实际开发中面临的效率低下、记忆丢失、安全隐患及缺乏持续学习能力等核心痛点。\n\n通过引入技能模块化、直觉增强、记忆持久化机制以及内置的安全扫描功能，everything-claude-code 能显著提升 AI 在复杂任务中的表现，帮助开发者构建更稳定、更智能的生产级 AI 代理。其独特的“研究优先”开发理念和针对 Token 消耗的优化策略，使得模型响应更快、成本更低，同时有效防御潜在的攻击向量。\n\n这套工具特别适合软件开发者、AI 研究人员以及希望深度定制 AI 工作流的技术团队使用。无论您是在构建大型代码库，还是需要 AI 协助进行安全审计与自动化测试，everything-claude-code 都能提供强大的底层支持。作为一个曾荣获 Anthropic 黑客大奖的开源项目，它融合了多语言支持与丰富的实战钩子（hooks），让 AI 真正成长为懂上",160784,2,"2026-04-19T11:32:54",[14,13,35],"语言模型",{"id":37,"name":38,"github_repo":39,"description_zh":40,"stars":41,"difficulty_score":42,"last_commit_at":43,"category_tags":44,"status":17},8272,"opencode","anomalyco\u002Fopencode","OpenCode 是一款开源的 AI 编程助手（Coding Agent），旨在像一位智能搭档一样融入您的开发流程。它不仅仅是一个代码补全插件，而是一个能够理解项目上下文、自主规划任务并执行复杂编码操作的智能体。无论是生成全新功能、重构现有代码，还是排查难以定位的 Bug，OpenCode 都能通过自然语言交互高效完成，显著减少开发者在重复性劳动和上下文切换上的时间消耗。\n\n这款工具专为软件开发者、工程师及技术研究人员设计，特别适合希望利用大模型能力来提升编码效率、加速原型开发或处理遗留代码维护的专业人群。其核心亮点在于完全开源的架构，这意味着用户可以审查代码逻辑、自定义行为策略，甚至私有化部署以保障数据安全，彻底打破了传统闭源 AI 助手的“黑盒”限制。\n\n在技术体验上，OpenCode 提供了灵活的终端界面（Terminal UI）和正在测试中的桌面应用程序，支持 macOS、Windows 及 Linux 全平台。它兼容多种包管理工具，安装便捷，并能无缝集成到现有的开发环境中。无论您是追求极致控制权的资深极客，还是渴望提升产出的独立开发者，OpenCode 都提供了一个透明、可信",144296,1,"2026-04-16T14:50:03",[13,45],"插件",{"id":47,"name":48,"github_repo":49,"description_zh":50,"stars":51,"difficulty_score":32,"last_commit_at":52,"category_tags":53,"status":17},2271,"ComfyUI","Comfy-Org\u002FComfyUI","ComfyUI 是一款功能强大且高度模块化的视觉 AI 引擎，专为设计和执行复杂的 Stable Diffusion 图像生成流程而打造。它摒弃了传统的代码编写模式，采用直观的节点式流程图界面，让用户通过连接不同的功能模块即可构建个性化的生成管线。\n\n这一设计巧妙解决了高级 AI 绘图工作流配置复杂、灵活性不足的痛点。用户无需具备编程背景，也能自由组合模型、调整参数并实时预览效果，轻松实现从基础文生图到多步骤高清修复等各类复杂任务。ComfyUI 拥有极佳的兼容性，不仅支持 Windows、macOS 和 Linux 全平台，还广泛适配 NVIDIA、AMD、Intel 及苹果 Silicon 等多种硬件架构，并率先支持 SDXL、Flux、SD3 等前沿模型。\n\n无论是希望深入探索算法潜力的研究人员和开发者，还是追求极致创作自由度的设计师与资深 AI 绘画爱好者，ComfyUI 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能，使其成为当前最灵活、生态最丰富的开源扩散模型工具之一，帮助用户将创意高效转化为现实。",109154,"2026-04-18T11:18:24",[14,15,13],{"id":55,"name":56,"github_repo":57,"description_zh":58,"stars":59,"difficulty_score":32,"last_commit_at":60,"category_tags":61,"status":17},6121,"gemini-cli","google-gemini\u002Fgemini-cli","gemini-cli 是一款由谷歌推出的开源 AI 命令行工具，它将强大的 Gemini 大模型能力直接集成到用户的终端环境中。对于习惯在命令行工作的开发者而言，它提供了一条从输入提示词到获取模型响应的最短路径，无需切换窗口即可享受智能辅助。\n\n这款工具主要解决了开发过程中频繁上下文切换的痛点，让用户能在熟悉的终端界面内直接完成代码理解、生成、调试以及自动化运维任务。无论是查询大型代码库、根据草图生成应用，还是执行复杂的 Git 操作，gemini-cli 都能通过自然语言指令高效处理。\n\n它特别适合广大软件工程师、DevOps 人员及技术研究人员使用。其核心亮点包括支持高达 100 万 token 的超长上下文窗口，具备出色的逻辑推理能力；内置 Google 搜索、文件操作及 Shell 命令执行等实用工具；更独特的是，它支持 MCP（模型上下文协议），允许用户灵活扩展自定义集成，连接如图像生成等外部能力。此外，个人谷歌账号即可享受免费的额度支持，且项目基于 Apache 2.0 协议完全开源，是提升终端工作效率的理想助手。",100752,"2026-04-10T01:20:03",[45,13,15,14],{"id":63,"github_repo":64,"name":65,"description_en":66,"description_zh":67,"ai_summary_zh":68,"readme_en":69,"readme_zh":70,"quickstart_zh":71,"use_case_zh":72,"hero_image_url":73,"owner_login":74,"owner_name":65,"owner_avatar_url":75,"owner_bio":76,"owner_company":77,"owner_location":77,"owner_email":77,"owner_twitter":77,"owner_website":77,"owner_url":78,"languages":79,"stars":117,"forks":118,"last_commit_at":119,"license":120,"difficulty_score":121,"env_os":122,"env_gpu":123,"env_ram":124,"env_deps":125,"category_tags":132,"github_topics":134,"view_count":32,"oss_zip_url":77,"oss_zip_packed_at":77,"status":17,"created_at":145,"updated_at":146,"faqs":147,"releases":148},9678,"OwlAIProject\u002FOwl","Owl","A personal wearable AI that runs locally","Owl 是一款旨在探索人机交互新前沿的开源项目，它打造了一个可全天候运行的个人穿戴式 AI 助手。与传统依赖云端的智能设备不同，Owl 强调数据本地化处理，能够倾听并观察用户生活中的音频与环境信息，从而提供记忆增强、主动生活协助及分布式知识收集等服务。\n\nOwl 主要解决了用户在隐私安全与智能化服务之间的权衡难题。通过支持完全本地推理，它让用户在享受 AI 带来的生产力提升和自我认知深化时，无需担忧敏感生活数据上传至第三方服务器。同时，它打破了硬件限制，允许用户利用 ESP 开发板、Sony Spresense 甚至 Apple Watch 等多种设备作为数据采集端，实现了高度灵活的个性化部署。\n\n这款工具特别适合热衷于隐私计算的开发者、研究人机交互的研究人员以及喜欢折腾硬件的极客用户。虽然普通用户也能从中受益，但目前更需要一定的技术动手能力来搭建服务器和配置设备。\n\n其技术亮点在于强大的兼容性与多模态处理能力：不仅支持通过 Ollama 运行各类本地大语言模型（LLM）和视觉模型（VLM），还具备说话人验证、基于语音活动检测（VAD）的对话理解以及流式\u002F离线双模式切换功能。Owl 正","Owl 是一款旨在探索人机交互新前沿的开源项目，它打造了一个可全天候运行的个人穿戴式 AI 助手。与传统依赖云端的智能设备不同，Owl 强调数据本地化处理，能够倾听并观察用户生活中的音频与环境信息，从而提供记忆增强、主动生活协助及分布式知识收集等服务。\n\nOwl 主要解决了用户在隐私安全与智能化服务之间的权衡难题。通过支持完全本地推理，它让用户在享受 AI 带来的生产力提升和自我认知深化时，无需担忧敏感生活数据上传至第三方服务器。同时，它打破了硬件限制，允许用户利用 ESP 开发板、Sony Spresense 甚至 Apple Watch 等多种设备作为数据采集端，实现了高度灵活的个性化部署。\n\n这款工具特别适合热衷于隐私计算的开发者、研究人机交互的研究人员以及喜欢折腾硬件的极客用户。虽然普通用户也能从中受益，但目前更需要一定的技术动手能力来搭建服务器和配置设备。\n\n其技术亮点在于强大的兼容性与多模态处理能力：不仅支持通过 Ollama 运行各类本地大语言模型（LLM）和视觉模型（VLM），还具备说话人验证、基于语音活动检测（VAD）的对话理解以及流式\u002F离线双模式切换功能。Owl 正以开放透明的方式，邀请社区共同探索穿戴式 AI 的无限可能。","# Owl - Always-on Wearable AI\r\n\r\n[![](https:\u002F\u002Fdcbadge.vercel.app\u002Fapi\u002Fserver\u002FBSMSJgFQTv?style=flat)](https:\u002F\u002Fdiscord.gg\u002FBSMSJgFQTv)\r\n[![License: MIT](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FLicense-MIT-yellow.svg)](https:\u002F\u002Fopensource.org\u002Flicenses\u002FMIT)\r\n[![Twitter](https:\u002F\u002Fimg.shields.io\u002Ftwitter\u002Furl\u002Fhttps\u002Ftwitter.com\u002Fethansutin.svg?style=social&label=Follow%20%40ethansutin)](https:\u002F\u002Ftwitter.com\u002Fethansutin)\r\n[![Twitter](https:\u002F\u002Fimg.shields.io\u002Ftwitter\u002Furl\u002Fhttps\u002Ftwitter.com\u002FBartronPolygon.svg?style=social&label=Follow%20%40BartronPolygon)](https:\u002F\u002Ftwitter.com\u002FBartronPolygon)\r\n[![PRs Welcome](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FPRs-welcome-brightgreen.svg)](http:\u002F\u002Fmakeapullrequest.com)\r\n\r\n\u003Cp align=\"center\">\r\n\u003Cimg alt=\"Capture devices\" src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002FOwlAIProject_Owl_readme_faf0dedacdb8.jpg\"> \u003Cimg alt=\"Home Depot conversation\" src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002FOwlAIProject_Owl_readme_4dae753a1721.png\">\r\n\u003C\u002Fp>\r\n\r\nWhat would you do with an AI that listens to and observes everything that happens in your life? **Owl** aims to explore this idea using always-on wearable devices. The convergence of powerful LLM and VLM models with low-power wearable devices opens up entirely new frontiers for human-computer interaction, including memory augmentation, pro-active life assistance, and distributed knowledge gathering. We believe in exploring this transparently and openly.\r\n\r\n### Key Features\r\n* 📱 **Broad Capture Device Support:** Capture your life using custom devices based on ESP platforms, Sony Spresense, or consumer hardware like the Apple Watch. Additional device support is continually added, so anything with a sensor will be able to send data to Owl.\r\n* 🧠 **Flexible Inference Options:** Run completely **locally** or leverage commercial models. Perform inference using any model available on **Ollama**, or use commercial models like GPT-4. Utilize TTS with **Whisper** or choose commercial services like Deepgram.\r\n* 🌐 **Capture from the Web:** Easily capture content from your desktop or any mobile phone.\r\n* 🎙️ **Multimodal Capture:** Engage in continuous capture of location and audio. Support for images and video coming very soon!\r\n* 📶 **Wide Connectivity Options:** Capture with devices supporting BLE, LTE, or WiFi.\r\n* 🚶‍♂️ **Interactive AI on the Go:** Interact with your AI effortlessly through native iOS and web interfaces (Android support coming soon!).\r\n* 🔊 **Speaker Verification:** Your AI learns your voice so it knows when it’s you talking.\r\n* 📡 **Streaming and Offline Modes:** Stream your life to your AI in real-time for proactive assistance, or switch to offline mode in network-constrained environments.\r\n* 💬 **Advanced Conversation Understanding:** Utilize VAD-based conversation endpointing to segment and understand your interactions.\r\n\r\n\r\n## Table of Contents\r\n\r\n- [Overview](#overview)\r\n  - [Project Objectives](#project-objectives)\r\n- [Contact](#contact)\r\n- [Privacy and Security](#privacy-and-security)\r\n- [Setup Guide](#setup-guide)\r\n  - [Server Setup](#server-setup)\r\n  - [iOS and watchOS Application Build Instructions](#ios-and-watchos-application-build-instructions)\r\n  - [Capture Device Setup](#capture-device-setup)\r\n- [Technical Guide](#technical-guide)\r\n  - [A *Tour de Source*](#a-tour-de-source)\r\n  - [Capture Storage](#capture-storage)\r\n- [Contributing](#contributing)\r\n\r\n\r\n## Overview\r\n\r\n### Project Objectives\r\n\r\n**Owl** is an experiment in human-computer interaction using wearable devices to observe our lives and extract information and insights from them using AI. Presently, only audio and location are captured, but we plan to incorporate vision and other modalities as well. The objectives of the project are, broadly speaking:\r\n\r\n1. Develop an always-on AI system that is *useful*, unlocking new ways to enhance our productivity, our understanding of ourselves and the world around us, and ability to connect with others.\r\n2. Implement specific use cases for always-on AI (e.g., productivity and memory enhancement, knowledge capture and sharing, health, etc.)\r\n3. Explore human-computer interaction questions: user experience, interface design, privacy, security.\r\n\r\nThere are three major components to this project:\r\n\r\n1. Wearable capture devices. These include semi-custom development [boards](docs\u002Fdevelopment_boards.md) (with some assembly required) as well as off-the-shelf products like Apple Watch. We would like to develop fully custom open source hardware.\r\n2. AI server.\r\n3. Presentation clients. Applications that display information gathered by the system (e.g., transcripts, conversation summaries) and allow interaction with an online assistant. Currently, a mobile app and web app are included.\r\n\r\n## Introducing Our Reference Hardware Device: Bee 🐝\r\n\r\n\u003Cp align=\"center\">\r\n  \u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002FOwlAIProject_Owl_readme_dc7bf5fbc48e.png\" alt=\"Bee Device\" width=\"200\"\u002F>\r\n\u003C\u002Fp>\r\n\r\nWe are thrilled to unveil \"Bee,\" our pioneering reference hardware device tailored for AI wearable developers and aficionados. Bee distinguishes itself with a remarkable fifty-hour battery life and a sleek, compact form factor, spanning merely 1.2 inches in diameter.\r\n\r\n### Key Features of Bee:\r\n- 🔋 **Fifty-Hour Battery Life**: Engineered for longevity, Bee empowers you to unlock new potential by feeding your entire life as context for your personal AI, which is always by your side ready to assist.\r\n- 🤏 **Compact Size**: At just 1.2 inches in diameter, Bee is designed to integrate seamlessly into a myriad of wearable contexts.\r\n- 🌍 **Community Testing Program**: We are offering Bee to select contributors and those keen to delve into its potential and unlocking new use cases around productivity, memory, and agents.\r\n\r\n### Join Us\r\nFor detailed information about Bee, opportunities for participation in its testing, or to engage with a community of like-minded AI wearable enthusiasts, we invite you to [join our Discord](https:\u002F\u002Fdiscord.gg\u002Fa2UJkDbTBt).\r\n\r\nWe are eager to see what you build with Bee. 🌟\r\n\r\n## Contact\r\n\r\nPlease [join our Discord](https:\u002F\u002Fdiscord.gg\u002Fa2UJkDbTBt)!\r\n\r\nSocial media:\r\n- Ethan Sutin ([Twitter](https:\u002F\u002Ftwitter.com\u002Fethansutin), [GitHub](https:\u002F\u002Fgithub.com\u002Fetown), [LinkedIn](https:\u002F\u002Fwww.linkedin.com\u002Fin\u002Fethan-sutin-ba598b6\u002F))\r\n- Bart Trzynadlowski ([Twitter](https:\u002F\u002Ftwitter.com\u002Fbartronpolygon), [GitHub](https:\u002F\u002Fgithub.com\u002Ftrzy), [LinkedIn](https:\u002F\u002Fwww.linkedin.com\u002Fin\u002Fbart-trzynadlowski-9b41938))\r\n\r\n\r\n## Privacy and Security\r\n\r\n- **Respect local privacy and recording laws.** Regardless of what is legally permitted, we ask that users **inform other parties when recording conversations** and comply with their wishes. We ask that users be respectful and fully transparent as they explore use cases for this exciting technology. We welcome feedback and contributions that explore making the user experience more safety and privacy aware.\r\n\r\n- Depending on how the server is hosted, **sensitive data may be transmitted and stored in the open**. For example, if running on a home server over HTTP with an exception domain entered into the iOS and Watch Xcode projects, all audio data sent to the server will be unencrypted and conversation transcripts will be readable as plaintext to anyone intercepting packets along the route. Furthermore, HTTP connections allow the user authorization token to be intercepted, allowing access to all conversations stored on the server. Recommended practices to improve security:\r\n\r\n  - Servers should be hosted over HTTPS on domains with valid SSL certificates.\r\n  - Use a reverse proxy (such as [ngrok](https:\u002F\u002Fngrok.com\u002F)) when running on a personal server, which will encrypt traffic using HTTPS.\r\n  - If you absolutely insist on running an unprotected home server, change your authorization token regularly and consider frequently deleting your database and capture directory so as not to leave a large number of conversations exposed.\r\n\r\n\r\n## Setup Guide\r\n\r\n### Server Setup\r\n\r\nPlatform-specific instructions for installing and running the server:\r\n\r\n- [macOS and Linux instructions](docs\u002Fmacos_and_linux_setup.md).\r\n- [Windows instructions](docs\u002Fwindows_setup.md).\r\n- [Docker instructions](docs\u002Fdocker_setup.md).\r\n\r\nOnce the server is installed, it can be completely customized:\r\n\r\n- [Configuring the server](docs\u002Fserver_configuration.md)\r\n\r\n### iOS and watchOS Application Build Instructions\r\n\r\nThe iOS app is the primary way to view and interact with conversations. The Xcode project also includes a watchOS capture client app that allows Apple Watch to be used as a wearable capture device.\r\n\r\n- [iOS and watchOS Application Build Instructions](docs\u002Fios_instructions.md)\r\n\r\n### Capture Device Setup\r\n\r\nMultiple capture devices are supported:\r\n\r\n- [Apple Watch](docs\u002Fapple_watch_setup.md)\r\n- [XIAO ESP32S3 Sense Board](docs\u002Fxiao_esp32s3_sense_setup.md)\r\n- [Sony Spresense LTE-M Board](docs\u002Fsony_spresense_setup.md)\r\n\r\n## Technical Guide\r\n\r\n### A *Tour de Source*\r\n\r\nTo help orient newcomers to the code base, we will trace the complete path that data takes through the system, from speech to displayed summary.\r\n\r\n#### Streaming Bluetooth Device Example: XIAO ESP32S3 Sense\r\n\r\nBluetooth-based devices, like the XIAO ESP32S3 Sense board in this example, connect to the iOS client application (`clients\u002Fios`) and communicate with it continuously.\r\n\r\n1. Audio is continuously picked up by the Sense board's microphone at 16 KHz and encoded to AAC. This reduces packets to a third of their original size, which is important because transmission consumes the most power. Packets are broadcast via BLE as fast as they are recorded in the board firmware's `loop()` function found in `clients\u002Fxiao-esp32s3-sense\u002Ffirmware\u002Fsrc\u002Fmain.cpp`.\r\n\r\n2. Packets enter the iOS app in `peripheral(_:,didUpdateValueFor:,error:)` in `clients\u002Fios\u002FOwl\u002FServices\u002FBLEManager.swift`. The iOS app passes complete frames to the server via a socket. *Frame* here refers to an AAC frame and there is a sequence numbering mechanism used to detect dropped BLE packets. AAC frames are independent, allowing us to drop incomplete frames that would cause downstream transcription models to choke.\r\n\r\n3. Frames enter the server socket in `on_audio_data()` in `owl\u002Fserver\u002Fcapture_socket.py`. The `CaptureSocketApp` object is created with the FastAPI server in `main.py`. The capture session's UUID is used to look up the appropriate `StreamingCaptureHandler` and the data is forwarded there.\r\n\r\n4. In `owl\u002Fserver\u002Fstreaming_capture_handler.py`, the audio data is appended to files on disk and then passed along to a transcription service for real-time transcription and conversation endpoint detection. A `Capture` object, which is recorded in the persistent database, is created and represents the capture session and file on disk. Capture files contain all audio recorded during a session. As conversations are detected, they are written out to capture *segment* files with associated `CaptureSegment` objects to represent them. These can be thought of as \"children\" of the parent capture file. `Conversation` objects are produced to store the conversations themselves (transcript, summaries, processing state, etc.) Whenever a conversation is created by the conversation service, a notification is pushed to the server over the socket connection to the iOS app.\r\n\r\n5. The transcription service uses a streaming transcription model (Deepgram at the time of this writing, with a local option planned) that delivers utterances to `handle_utterance()`. This in turn passes the utterance, which includes timestamps, to the endpointing service. When the endpointing service determines a conversation has ended, `on_endpoint()` is invoked. The completed conversation segment file is then transcribed more thoroughly and summarized. A task is created and dispatched to the server's async background processing queue, which is drained continuously in `main.py` (`process_queue()`). The task, still in `streaming_capture_handler.py`, simply calls `process_conversation_from_audio()` on `ConversationService`, an instance of which was created as part of the server app's shared state (`AppState`).\r\n\r\n6. `ConversationService` in `owl\u002Fservices\u002Fconversation\u002Fconversation_service.py` transcribes the conversation audio using a non-streaming model, creates summaries, and associates a location with the conversation based on location data sent to the server from the iOS app. All this is committed to the database as well as the local capture directory in the form of JSON files for easy inspection. Finally, a notification is sent via `send_notification()` on a `NotificationService` instance (defined in `owl\u002Fservices\u002Fnotification\u002Fnotification_service.py`). This uses the socket connection to push the newly-created conversation to the iOS app.\r\n\r\n7. Back in the iOS app: `ConversationsViewModel` in `clients\u002Fios\u002FOwl\u002FViewModels\u002FConversationsViewModel.swift` subscribes to conversation messages and updates a published property whenever they arrive. The view model object is instantiated in `ContentView`, the top-level SwiftUI view, and handed to `ConversationsView`.\r\n\r\n8. `ConversationsView` observes the view model and updates a list view whenever it changes, thereby displaying conversations to the user.\r\n\r\nThat sums up the end-to-end process, which begins in a capture device client, transits through the server, and ends at the iOS client.\r\n\r\n#### Chunked and Spooled Audio Example: Apple Watch\r\n\r\nThe server also supports non-real time syncing of capture data in chunks, which uses a different server route than the real-time streaming case. These can be uploaded long after a capture session has finished. Apple Watch has support for both streaming and spooling with opportunistic chunked uploads.\r\n\r\n1. In the Watch app's `ContentView` (`clients\u002Fios\u002FOwl Watch App\u002FViews\u002FContentView.swift`), tapping the record button starts a capture session using the `CaptureManager` singleton object.\r\n\r\n2. `CaptureManager` (`clients\u002Fios\u002FOwl Watch App\u002FServices\u002FCaptureManager.swift`) starts recording by setting up an `AVAudioSession` and installing a tap to receive audio samples in `startAudioEngine()`. The tap downsamples to 16 KHz and passes the audio to an `AudioFileWriter` instance, which writes to disk. Even entry level Watch models have 32GB of disk space!\r\n\r\n3. `AudioFileWriter` (`clients\u002Fios\u002FShared\u002FFiles\u002FAudioFileWriter.swift`) writes multiple sequential files named with the capture timestamp and UUID plus a sequential chunk number. After some time (e.g., 30 seconds), the current chunk is completed and the next file is created. Files contain raw PCM data and are equivalent to a header-less wave file.\r\n\r\n4. Meanwhile, the Watch app runs an asynchronous task (see `clients\u002Fios\u002FShared\u002FFileUploadTask.swift`), spawned when the app launches, monitoring for files to upload. Files are uploaded sequentially via a POST to the server and deleted when this succeeds. Once all current files are uploaded, a special empty sentinel file is checked to determine whether the capture is actually finished and a processing request is sent to the server. The details of this process are explained in comment blocks in `FileUploadTask.swift`. Because files are stored on disk, they can be transferred while the recording is in progress or even hours or days later. Uploading can be disabled altogether via a setting in the app.\r\n\r\n5. On the server, the `\u002Fcapture\u002Fupload_chunk` route receives files. Files with the same `capture_uuid` are simply appended sequentially in the order they arrive. This happens in `owl\u002Fserver\u002Froutes\u002Fcapture.py`.\r\n\r\n6. Each chunk of data is handed off to a background task, `ProcessAudioChunkTask`, processed asynchronously (`process_queue()` in `owl\u002Fserver\u002Fmain.py`). This task runs conversation detection incrementally to find conversation beginning and end timestamps. This process differs from the streaming version, although we hope to unify them somehow. A voice activity detector (VAD) is used to look for long stretches of silence to segment conversations, which is a naive and unreliable heuristic. Once conversations are identified, they are extracted into their own files and then sent off for processing using `process_conversation_from_audio()` on `ConversationService`. From this point onwards, the flow is the same as for the streaming case described above. It is important to note that conversations are detected as soon as possible by inspecting chunks.\r\n\r\n7. Lastly, if the capture session ends and the `\u002Fprocess_capture` route is used, a final `ProcessAudioChunkTask` is submitted to finalize any remaining conversation that may have been ongoing in the final chunk.\r\n\r\nChunked uploads enter the server differently than streaming audio, use a different conversation endpointing method, but then follow the same path back to the iOS app.\r\n\r\n### Capture Storage\r\n\r\nCaptures are stored in the directory specified by the `capture_dir` key in the YAML configuration file. They are organized by date and capture\r\ndevice to make manual inspection easy. When conversations are detected within a capture, they are extracted into a subdirectory named after the capture file. The subdirectory will contain conversation audio files as well as transcripts and summaries in JSON form. Conversation detection may sometimes be incorrect; conversations that are too short or contain no dialog at all are not summarized and the corresponding JSON files will be absent.\r\n\r\n\u003Cp align=\"center\">\r\n\u003Cimg alt=\"Capture sessions from February 17, 2024\" src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002FOwlAIProject_Owl_readme_af35ae01f7db.png\">\u003Cbr>\r\n\u003Ci>Apple Watch captures recorded on February 17, 2024, with subdirectories for conversations.\u003C\u002Fi>\r\n\u003C\u002Fp>\r\n\r\n\u003Cp align=\"center\">\r\n\u003Cimg alt=\"Conversations\" src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002FOwlAIProject_Owl_readme_d4b316f0f6b9.png\">\u003Cbr>\r\n\u003Ci>Conversations extracted from a particular capture.\u003C\u002Fi>\r\n\u003C\u002Fp>\r\n\r\n\r\n## Contributing\r\n\r\nWe welcome discussion and contributions. Please [connect with us](#contact). To contribute, we recommend:\r\n\r\n  - [Opening an issue](https:\u002F\u002Fgithub.com\u002FOwlAIProject\u002FOwl\u002Fissues) and describing what you are working on so that everyone is aware and we have a chance to discuss.\r\n  - Forking our repo and making a pull request when ready.\r\n","# Owl - 始终在线的可穿戴人工智能\n\n[![](https:\u002F\u002Fdcbadge.vercel.app\u002Fapi\u002Fserver\u002FBSMSJgFQTv?style=flat)](https:\u002F\u002Fdiscord.gg\u002FBSMSJgFQTv)\n[![许可证：MIT](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002F许可证-MIT-yellow.svg)](https:\u002F\u002Fopensource.org\u002Flicenses\u002FMIT)\n[![Twitter](https:\u002F\u002Fimg.shields.io\u002Ftwitter\u002Furl\u002Fhttps\u002Ftwitter.com\u002Fethansutin.svg?style=social&label=关注%20@ethansutin)](https:\u002F\u002Ftwitter.com\u002Fethansutin)\n[![Twitter](https:\u002F\u002Fimg.shields.io\u002Ftwitter\u002Furl\u002Fhttps\u002Ftwitter.com\u002FBartronPolygon.svg?style=social&label=关注%20@BartronPolygon)](https:\u002F\u002Ftwitter.com\u002FBartronPolygon)\n[![欢迎提交PR](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FPRs-welcome-brightgreen.svg)](http:\u002F\u002Fmakeapullrequest.com)\n\n\u003Cp align=\"center\">\n\u003Cimg alt=\"采集设备\" src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002FOwlAIProject_Owl_readme_faf0dedacdb8.jpg\"> \u003Cimg alt=\"家得宝对话\" src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002FOwlAIProject_Owl_readme_4dae753a1721.png\">\n\u003C\u002Fp>\n\n如果你拥有一款能够倾听并观察你生活中每一件事的人工智能，你会如何利用它呢？**Owl** 旨在通过始终在线的可穿戴设备来探索这一理念。强大的 LLM 和 VLM 模型与低功耗可穿戴设备的结合，为人类与计算机的交互开辟了全新的领域，包括记忆增强、主动式生活辅助以及分布式知识收集等。我们坚信以透明和开放的方式进行探索。\n\n### 核心功能\n* 📱 **广泛的采集设备支持：** 使用基于 ESP 平台、Sony Spresense 或 Apple Watch 等消费级硬件的自定义设备记录你的生活。我们将持续增加对更多设备的支持，任何配备传感器的设备都能将数据发送到 Owl。\n* 🧠 **灵活的推理选项：** 完全在本地运行，或利用商用模型。你可以使用 **Ollama** 上的任意模型进行推理，也可以选择 GPT-4 等商用模型。语音合成方面，既可使用 **Whisper**，也可选用 Deepgram 等商业服务。\n* 🌐 **网页端采集：** 轻松从桌面或任何手机上捕获内容。\n* 🎙️ **多模态采集：** 持续记录位置和音频信息。图像和视频的支持也将很快推出！\n* 📶 **丰富的连接方式：** 支持 BLE、LTE 或 WiFi 的设备均可接入。\n* 🚶‍♂️ **随身互动式 AI：** 通过原生 iOS 和网页界面轻松与你的 AI 互动（Android 支持即将上线！）。\n* 🔊 **说话人验证：** 你的 AI 会学习你的声音，从而识别何时是你本人在交谈。\n* 📡 **流媒体与离线模式：** 可以实时将你的生活数据传输给 AI，获得主动协助；在无网络环境下则切换至离线模式。\n* 💬 **高级对话理解：** 利用基于 VAD 的对话分段技术，对你的交流进行分割和理解。\n\n\n## 目录\n\n- [概述](#overview)\n  - [项目目标](#project-objectives)\n- [联系方式](#contact)\n- [隐私与安全](#privacy-and-security)\n- [设置指南](#setup-guide)\n  - [服务器设置](#server-setup)\n  - [iOS 和 watchOS 应用构建说明](#ios-and-watchos-application-build-instructions)\n  - [采集设备设置](#capture-device-setup)\n- [技术指南](#technical-guide)\n  - [源码之旅](#a-tour-de-source)\n  - [采集存储](#capture-storage)\n- [贡献](#contributing)\n\n\n## 概述\n\n### 项目目标\n\n**Owl** 是一项关于人机交互的实验，利用可穿戴设备观察我们的生活，并借助 AI 从中提取信息和洞见。目前仅采集音频和位置信息，但我们计划逐步加入视觉和其他模态的数据。项目的总体目标如下：\n\n1. 构建一个始终在线且“实用”的 AI 系统，开启提升生产力、加深自我认知与世界理解、以及加强人际连接的新途径。\n2. 实现始终在线 AI 的具体应用场景（例如：生产力与记忆增强、知识采集与共享、健康管理等）。\n3. 探索人机交互相关问题：用户体验、界面设计、隐私保护、安全保障等。\n\n本项目包含三大核心组件：\n\n1. 可穿戴采集设备。这些设备既有需要一定组装的半定制开发板（详见 [开发板文档](docs\u002Fdevelopment_boards.md)），也有像 Apple Watch 这样的现成产品。我们还希望开发完全开源的定制硬件。\n2. AI 服务器。\n3. 展示客户端。用于显示系统收集的信息（如文字稿、对话摘要）并允许用户与在线助手互动的应用程序。目前包括移动端应用和网页端应用。\n\n## 首次亮相：我们的参考硬件设备——Bee 🐝\n\n\u003Cp align=\"center\">\n  \u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002FOwlAIProject_Owl_readme_dc7bf5fbc48e.png\" alt=\"Bee 设备\" width=\"200\"\u002F>\n\u003C\u002Fp>\n\n我们非常高兴地推出“Bee”，这是一款专为 AI 可穿戴开发者及爱好者打造的先锋参考硬件设备。Bee 具有惊人的 50 小时续航能力，同时外形轻巧紧凑，直径仅为 1.2 英寸。\n\n### Bee 的核心特性：\n- 🔋 **50 小时续航：** 专为持久性设计，Bee 让你能将自己的全部生活作为上下文输入个人 AI，使其随时待命，助你一臂之力。\n- 🤏 **小巧便携：** 直径仅 1.2 英寸的 Bee，能够无缝融入各种可穿戴场景。\n- 🌍 **社区测试计划：** 我们将 Bee 提供给部分贡献者以及那些热衷于挖掘其潜力、探索生产力、记忆和智能代理等领域新用例的伙伴。\n\n### 加入我们\n如需了解有关 Bee 的详细信息、参与测试的机会，或与志同道合的 AI 可穿戴爱好者交流，请立即加入我们的 [Discord 社区](https:\u002F\u002Fdiscord.gg\u002Fa2UJkDbTBt)。\n\n我们迫不及待地想看看你用 Bee 打造出什么作品！🌟\n\n## 联系方式\n\n请加入我们的 [Discord 社区](https:\u002F\u002Fdiscord.gg\u002Fa2UJkDbTBt)！\n\n社交媒体：\n- Ethan Sutin ([Twitter](https:\u002F\u002Ftwitter.com\u002Fethansutin), [GitHub](https:\u002F\u002Fgithub.com\u002Fetown), [LinkedIn](https:\u002F\u002Fwww.linkedin.com\u002Fin\u002Fethan-sutin-ba598b6\u002F))\n- Bart Trzynadlowski ([Twitter](https:\u002F\u002Ftwitter.com\u002Fbartronpolygon), [GitHub](https:\u002F\u002Fgithub.com\u002Ftrzy), [LinkedIn](https:\u002F\u002Fwww.linkedin.com\u002Fin\u002Fbart-trzynadlowski-9b41938))\n\n## 隐私与安全\n\n- **尊重当地的隐私和录音法律法规。** 无论法律如何规定，我们仍建议用户在录制对话时**提前告知对方**，并尊重对方的意愿。在探索这一令人兴奋的技术的应用场景时，我们希望用户能够保持尊重和充分透明的态度。我们也欢迎针对如何提升用户体验的安全性和隐私保护方面的反馈与贡献。\n\n- 根据服务器的托管方式，**敏感数据可能会以明文形式传输和存储**。例如，如果在家庭服务器上通过 HTTP 协议运行，并且 iOS 和 Watch Xcode 项目中配置了例外域名，则所有发送到服务器的音频数据都将未加密，而对话转录文本将以纯文本形式被沿途任何拦截数据包的人读取。此外，HTTP 连接还可能导致用户授权令牌被截获，从而获得对服务器上所有对话的访问权限。为提高安全性，建议采取以下措施：\n\n  - 服务器应使用 HTTPS 协议托管，并配备有效的 SSL 证书。\n  - 在个人服务器上运行时，请使用反向代理（如 [ngrok](https:\u002F\u002Fngrok.com\u002F)），它将通过 HTTPS 加密流量。\n  - 如果您坚持使用未加密的家庭服务器，请定期更换授权令牌，并考虑频繁删除数据库和捕获目录，以避免大量对话暴露在外。\n\n\n## 设置指南\n\n### 服务器设置\n\n各平台安装和运行服务器的具体说明：\n\n- [macOS 和 Linux 指南](docs\u002Fmacos_and_linux_setup.md)。\n- [Windows 指南](docs\u002Fwindows_setup.md)。\n- [Docker 指南](docs\u002Fdocker_setup.md)。\n\n服务器安装完成后，可以进行完全自定义配置：\n\n- [服务器配置](docs\u002Fserver_configuration.md)\n\n### iOS 和 watchOS 应用程序构建说明\n\niOS 应用程序是查看和交互对话的主要方式。Xcode 项目中还包含一个 watchOS 捕获客户端应用，允许 Apple Watch 作为可穿戴式捕获设备使用。\n\n- [iOS 和 watchOS 应用程序构建说明](docs\u002Fios_instructions.md)\n\n### 捕获设备设置\n\n支持多种捕获设备：\n\n- [Apple Watch](docs\u002Fapple_watch_setup.md)\n- [XIAO ESP32S3 Sense 开发板](docs\u002Fxiao_esp32s3_sense_setup.md)\n- [索尼 Spresense LTE-M 开发板](docs\u002Fsony_spresense_setup.md)\n\n## 技术指南\n\n### 一次“源代码之旅”\n\n为了帮助新加入的开发者快速熟悉代码库，我们将追踪数据在整个系统中从语音到最终显示摘要的完整流程。\n\n#### 流式蓝牙设备示例：XIAO ESP32S3 Sense\n\n基于蓝牙的设备，例如本示例中的 XIAO ESP32S3 Sense 开发板，会连接到 iOS 客户端应用（`clients\u002Fios`），并与之持续通信。\n\n1. Sense 开发板上的麦克风以 16 kHz 的采样率持续采集音频，并将其编码为 AAC 格式。这样可以将数据包大小压缩至原来的三分之一，这一点非常重要，因为传输是耗电最多的环节。在开发板固件的 `loop()` 函数中（位于 `clients\u002Fxiao-esp32s3-sense\u002Ffirmware\u002Fsrc\u002Fmain.cpp`），数据包会以与录制速度相同的速度通过 BLE 广播出去。\n\n2. 数据包会在 iOS 应用的 `peripheral(_:,didUpdateValueFor:,error:)` 方法中进入应用（路径为 `clients\u002Fios\u002FOwl\u002FServices\u002FBLEManager.swift`）。iOS 应用会通过套接字将完整的帧传递给服务器。“帧”在这里指一个 AAC 帧，并且使用了序列号机制来检测是否丢失了 BLE 数据包。由于 AAC 帧是独立的，我们可以丢弃不完整的帧，从而避免下游转写模型因处理异常而崩溃。\n\n3. 帧数据会进入服务器的套接字，在 `owl\u002Fserver\u002Fcapture_socket.py` 中的 `on_audio_data()` 方法中被接收。`CaptureSocketApp` 对象是在 `main.py` 中与 FastAPI 服务器一同创建的。系统会根据捕获会话的 UUID 查找对应的 `StreamingCaptureHandler`，并将数据转发到该处理器。\n\n4. 在 `owl\u002Fserver\u002Fstreaming_capture_handler.py` 中，音频数据会被追加到磁盘上的文件中，随后传递给转写服务进行实时转写和对话端点检测。同时会创建一个 `Capture` 对象，并将其记录在持久化数据库中，用于表示当前的捕获会话及磁盘上的文件。捕获文件包含了会话期间录制的所有音频。当检测到对话时，这些对话会被写入单独的“片段”文件中，并生成相应的 `CaptureSegment` 对象来表示它们，可以将其视为父级捕获文件的“子文件”。此外，还会生成 `Conversation` 对象来存储对话的具体内容（转写文本、摘要、处理状态等）。每当对话服务创建一个新的对话时，都会通过与 iOS 应用的套接字连接向服务器推送一条通知。\n\n5. 转写服务使用流式转写模型（目前采用 Deepgram，未来计划支持本地部署），该模型会将话语片段传递给 `handle_utterance()` 方法。后者再将包含时间戳的话语片段传递给端点检测服务。当端点检测服务判断对话结束时，就会调用 `on_endpoint()` 方法。随后，完成的对话片段文件会被更彻底地转写并生成摘要。系统会创建一个任务并将其放入服务器的异步后台处理队列中，该队列会在 `main.py` 中的 `process_queue()` 方法中被持续处理。这个任务仍然位于 `streaming_capture_handler.py` 文件中，它只是简单地调用 `ConversationService` 实例上的 `process_conversation_from_audio()` 方法，而 `ConversationService` 实例则是作为服务器应用共享状态的一部分（`AppState`）创建的。\n\n6. `ConversationService` 位于 `owl\u002Fservices\u002Fconversation\u002Fconversation_service.py` 文件中，它会使用非流式模型对对话音频进行转写，生成摘要，并根据 iOS 应用发送到服务器的位置信息为对话关联位置。所有这些信息都会被提交到数据库以及本地的捕获目录中，以 JSON 文件的形式保存，便于检查。最后，系统会通过 `NotificationService` 实例上的 `send_notification()` 方法发送通知（定义在 `owl\u002Fservices\u002Fnotification\u002Fnotification_service.py` 文件中）。该方法利用套接字连接将新创建的对话推送到 iOS 应用。\n\n7. 回到 iOS 应用端：`ConversationsViewModel` 位于 `clients\u002Fios\u002FOwl\u002FViewModels\u002FConversationsViewModel.swift` 文件中，它会订阅对话消息，并在收到消息时更新其公开属性。视图模型对象在 SwiftUI 的顶级视图 `ContentView` 中被实例化，并传递给 `ConversationsView`。\n\n8. `ConversationsView` 会观察视图模型的变化，并在变化发生时更新列表视图，从而将对话展示给用户。\n\n以上就是从捕获设备客户端开始、经过服务器中转、最终到达 iOS 客户端的端到端流程。\n\n#### 分块与缓冲式音频示例：Apple Watch\n\n服务器还支持以分块方式对捕获数据进行非实时同步，这种方式使用与实时流式传输不同的服务器路由。这些数据可以在捕获会话结束后很长时间才上传。Apple Watch 同时支持流式传输和分块上传两种模式，并且能够根据网络状况进行机会性分块上传。\n\n1. 在 Watch 应用的 `ContentView` 中（路径为 `clients\u002Fios\u002FOwl Watch App\u002FViews\u002FContentView.swift`），点击录制按钮会使用 `CaptureManager` 单例对象启动一个捕获会话。\n\n2. `CaptureManager`（路径为 `clients\u002Fios\u002FOwl Watch App\u002FServices\u002FCaptureManager.swift`）会通过设置 `AVAudioSession` 并安装一个音频样本捕捉器来开始录音（位于 `startAudioEngine()` 方法中）。该捕捉器会将音频降采样至 16 kHz，并将音频传递给 `AudioFileWriter` 实例，由其写入磁盘。即使是入门级的 Apple Watch 也拥有 32 GB 的存储空间！\n\n3. `AudioFileWriter`（路径为 `clients\u002Fios\u002FShared\u002FFiles\u002FAudioFileWriter.swift`）会按顺序创建多个文件，文件名包含捕获的时间戳、UUID 以及一个递增的分块编号。每隔一段时间（例如 30 秒），当前分块就会完成，然后创建下一个文件。这些文件包含原始的 PCM 数据，相当于没有头部信息的 WAV 文件。\n\n4. 同时，Watch 应用会运行一个异步任务（见 `clients\u002Fios\u002FShared\u002FFileUploadTask.swift` 文件），该任务在应用启动时被创建，用于监控待上传的文件。文件会按顺序通过 POST 请求上传到服务器，上传成功后即被删除。一旦所有当前文件都上传完毕，系统会检查一个特殊的空标记文件，以确定捕获是否真正结束，并向服务器发送处理请求。这一过程的详细说明已在 `FileUploadTask.swift` 文件的注释中给出。由于文件存储在磁盘上，因此即使在录音进行中，或者数小时甚至数天之后，都可以继续传输文件。此外，用户还可以通过应用内的设置完全禁用上传功能。\n\n5. 在服务器端，`\u002Fcapture\u002Fupload_chunk` 路由会接收这些文件。具有相同 `capture_uuid` 的文件会按照到达顺序依次追加在一起。这一过程发生在 `owl\u002Fserver\u002Froutes\u002Fcapture.py` 文件中。\n\n6. 每个分块的数据会被交给一个后台任务 `ProcessAudioChunkTask`，以异步方式处理（位于 `owl\u002Fserver\u002Fmain.py` 中的 `process_queue()` 方法）。该任务会逐步进行对话检测，以找到对话的开始和结束时间戳。这一处理方式与流式版本有所不同，尽管我们希望将来能够将两者统一起来。系统会使用语音活动检测器（VAD）来寻找长时间的静音段落，以此分割对话，但这种方法较为简单且可靠性较低。一旦识别出对话，就会将其提取到单独的文件中，然后调用 `ConversationService` 上的 `process_conversation_from_audio()` 方法进行进一步处理。从这一点开始，流程与上述流式传输的情况相同。需要注意的是，系统会尽早通过检查各个分块来检测对话。\n\n7. 最后，如果捕获会话结束并使用 `\u002Fprocess_capture` 路由，则会提交最后一个 `ProcessAudioChunkTask` 任务，以完成对最后一个分块中可能仍在进行的对话的处理。\n\n分块上传进入服务器的方式与流式音频不同，使用的对话端点检测方法也有所区别，但后续的流程与流式传输一致，最终同样会返回到 iOS 应用。\n\n### 捕获存储\n\n捕获文件会存储在 YAML 配置文件中 `capture_dir` 键所指定的目录下。它们按日期和捕获设备进行组织，以便于手动检查。当捕获文件中检测到对话时，这些对话会被提取到以该捕获文件命名的子目录中。子目录内将包含对话音频文件以及 JSON 格式的转录本和摘要。需要注意的是，对话检测有时可能会出现误判；过短或完全不含对话的片段不会被生成摘要，相应的 JSON 文件也会缺失。\n\n\u003Cp align=\"center\">\n\u003Cimg alt=\"2024年2月17日的捕获会话\" src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002FOwlAIProject_Owl_readme_af35ae01f7db.png\">\u003Cbr>\n\u003Ci>2024年2月17日录制的 Apple Watch 捕获文件，每个文件都有对应的对话子目录。\u003C\u002Fi>\n\u003C\u002Fp>\n\n\u003Cp align=\"center\">\n\u003Cimg alt=\"对话\" src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002FOwlAIProject_Owl_readme_d4b316f0f6b9.png\">\u003Cbr>\n\u003Ci>从某一捕获文件中提取出的对话。\u003C\u002Fi>\n\u003C\u002Fp>\n\n\n## 贡献\n\n我们欢迎讨论和贡献。请 [联系我们](#contact)。如需贡献，我们建议：\n\n  - [提交一个问题](https:\u002F\u002Fgithub.com\u002FOwlAIProject\u002FOwl\u002Fissues)，并描述您正在开展的工作，以便团队成员了解情况并共同讨论。\n  - 分支我们的仓库，并在准备就绪时提交拉取请求。","# Owl 快速上手指南\n\nOwl 是一个始终在线的可穿戴 AI 项目，旨在通过可穿戴设备（如 Apple Watch、ESP32 开发板等）持续采集音频和位置数据，利用大语言模型（LLM）和多模态模型（VLM）进行实时分析、记忆增强和主动生活辅助。\n\n## 环境准备\n\n### 系统要求\n- **服务器端**：\n  - 操作系统：macOS, Linux, 或 Windows (推荐 Linux\u002FmacOS 以获得最佳兼容性)\n  - Python 3.9+\n  - Docker (可选，用于容器化部署)\n- **客户端（iOS\u002FwatchOS）**：\n  - macOS (需安装 Xcode)\n  - iOS 15+ \u002F watchOS 8+\n- **硬件采集设备（任选其一）**：\n  - Apple Watch\n  - Seeed Studio XIAO ESP32S3 Sense\n  - Sony Spresense LTE-M Board\n  - 或其他支持 BLE\u002FWiFi\u002FLTE 的传感器设备\n\n### 前置依赖\n- **Python 依赖**：`pip`, `virtualenv` (推荐)\n- **AI 模型推理**：\n  - 本地方案：安装 [Ollama](https:\u002F\u002Follama.com) 并拉取所需模型\n  - 云端方案：准备好 OpenAI API Key 或 Deepgram API Key\n- **网络工具**：若在内网部署，建议使用 [ngrok](https:\u002F\u002Fngrok.com) 进行内网穿透以提供 HTTPS 支持。\n\n> **注意**：国内开发者若访问 GitHub 或 HuggingFace 受限，建议配置代理或使用国内镜像源加速 Python 包下载（如 `pip install -i https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple ...`）。\n\n---\n\n## 安装步骤\n\n### 1. 克隆项目代码\n```bash\ngit clone https:\u002F\u002Fgithub.com\u002Fethansutin\u002Fowl.git\ncd owl\n```\n\n### 2. 服务器端设置\n\n#### 方案 A：使用 Docker (推荐)\n```bash\ndocker-compose up --build\n```\n*启动后，服务默认运行在 `http:\u002F\u002Flocalhost:8000`。*\n\n#### 方案 B：手动安装 (Linux\u002FmacOS)\n```bash\n# 创建虚拟环境\npython3 -m venv venv\nsource venv\u002Fbin\u002Factivate\n\n# 安装依赖\npip install -r requirements.txt\n\n# 配置环境变量 (复制示例文件并编辑)\ncp .env.example .env\n# 编辑 .env 文件，填入你的 LLM API Key (如 OPENAI_API_KEY) 或其他配置\n\n# 启动服务器\npython -m uvicorn owl.server.main:app --reload --host 0.0.0.0 --port 8000\n```\n\n> **安全提示**：生产环境或外网访问请务必配置 HTTPS。若在本地测试且使用 iOS 真机调试，建议使用 ngrok 穿透：\n> ```bash\n> ngrok http 8000\n> ```\n> 将生成的 `https:\u002F\u002Fxxxx.ngrok.io` 地址填入 iOS 项目的配置中。\n\n### 3. iOS 和 watchOS 应用构建\n1. 打开 `clients\u002Fios\u002FOwl.xcodeproj`。\n2. 在 Xcode 中登录你的 Apple ID。\n3. 修改 `Owl\u002FConfig\u002FEnvironment.swift` (或相应配置文件)，将服务器地址指向你的服务器 IP 或 ngrok 地址。\n4. 选择目标设备（iPhone 或 Apple Watch），点击 **Run** (⌘R) 进行编译和安装。\n\n### 4. 采集设备设置 (以 XIAO ESP32S3 Sense 为例)\n1. 安装 Arduino IDE 或 PlatformIO。\n2. 打开固件项目：`clients\u002Fxiao-esp32s3-sense\u002Ffirmware`。\n3. 在代码中配置 WiFi 信息和服务器地址。\n4. 烧录固件到开发板。\n5. 设备上电后，通过蓝牙与 iOS App 配对。\n\n---\n\n## 基本使用\n\n### 1. 启动数据采集\n- 佩戴好已配置的设备（如 Apple Watch 或 ESP32 胸牌）。\n- 打开 iOS 端的 **Owl** App。\n- 确保 App 显示\"Connected\"状态，此时设备开始通过蓝牙或网络向服务器流式传输音频数据。\n\n### 2. 进行对话测试\n- 对着设备麦克风正常说话（例如：“记得我明天下午三点有个会议”或“我现在在 Home Depot 买锤子”）。\n- Owl 会自动检测语音活动（VAD），分割对话片段。\n\n### 3. 查看结果\n- **实时转录**：在 iOS App 主界面即可看到实时的语音转文字内容。\n- **智能总结**：对话结束后，后台任务会自动调用 LLM 对对话进行总结、提取关键信息或执行指令。\n- **历史回顾**：在 App 的\"Historical\"或\"Memory\"板块查看过往的记录和 AI 生成的洞察。\n\n### 4. 交互式查询\n- 在 App 的聊天界面输入问题，例如：“我这周去过哪些地方？”或“上次提到的会议时间是什么时候？”。\n- AI 将基于采集到的历史上下文（音频、位置、转录文本）进行回答。\n\n---\n\n**隐私与安全提醒**：\n本项目涉及持续的音频和环境数据采集。请严格遵守当地法律法规，在录制他人对话前务必告知并获得同意。建议在部署服务器时启用 HTTPS 加密传输，并定期更换授权令牌，以防敏感数据泄露。","自由职业设计师林浩在外出拜访客户、参观建材市场时，需要随时记录灵感碎片和沟通细节，以便后续整理成方案。\n\n### 没有 Owl 时\n- 手忙脚乱地掏手机录音或打字，容易打断与客户自然的对话节奏，显得不专业。\n- 依赖事后回忆补全会议重点，常因记忆模糊而遗漏关键的尺寸数据或材质偏好。\n- 采集的音频文件散落在不同设备中，缺乏上下文关联，整理时需反复听录音确认时间地点。\n- 担心隐私泄露，不敢使用云端录音服务，导致无法利用强大的 AI 模型即时分析内容。\n- 在信号不佳的仓库或地下室，云端 AI 服务完全不可用，错失现场决策辅助机会。\n\n### 使用 Owl 后\n- 佩戴支持本地运行的穿戴设备自动全程记录，林浩只需专注交流，Owl 在后台无感捕捉音频与位置。\n- Owl 利用本地大模型实时提取关键信息（如“客户偏好哑光金属”），并主动推送相关案例供现场参考。\n- 所有数据按时间线和地理位置自动归档，林浩可随时询问\"上周三在建材市场聊了什么”，Ow l 即刻还原场景。\n- 采用说话人验证技术，Owl 仅响应林浩的指令且数据完全本地化处理，彻底消除隐私顾虑。\n- 即使在无网络的施工现场，Owl 的离线模式仍能持续运行并进行基础推理，返回网络后自动同步深度分析结果。\n\nOwl 将原本碎片化、高负担的记忆工作转化为流畅的主动式智能辅助，让创作者真正实现了“所思即所得”。","https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002FOwlAIProject_Owl_faf0deda.jpg","OwlAIProject","https:\u002F\u002Foss.gittoolsai.com\u002Favatars\u002FOwlAIProject_eeeaa04c.png","",null,"https:\u002F\u002Fgithub.com\u002FOwlAIProject",[80,84,88,92,96,100,103,107,111,114],{"name":81,"color":82,"percentage":83},"Python","#3572A5",52.8,{"name":85,"color":86,"percentage":87},"Swift","#F05138",21.9,{"name":89,"color":90,"percentage":91},"C","#555555",11.2,{"name":93,"color":94,"percentage":95},"JavaScript","#f1e05a",6,{"name":97,"color":98,"percentage":99},"Kotlin","#A97BFF",5.6,{"name":101,"color":102,"percentage":32},"C++","#f34b7d",{"name":104,"color":105,"percentage":106},"Dockerfile","#384d54",0.3,{"name":108,"color":109,"percentage":110},"Mako","#7e858d",0.1,{"name":112,"color":113,"percentage":110},"CSS","#663399",{"name":115,"color":116,"percentage":110},"CMake","#DA3434",634,55,"2026-04-09T12:13:59","MIT",4,"Linux, macOS, Windows","未说明 (支持完全本地运行或调用商业模型，若本地运行大模型需自行配置对应硬件)","未说明",{"notes":126,"python":124,"dependencies":127},"该项目架构分为采集设备、AI 服务器和展示客户端。服务器支持完全本地部署（通过 Ollama 和 Whisper）或使用商业 API（如 GPT-4, Deepgram）。若选择本地运行大语言模型 (LLM) 或视觉语言模型 (VLM)，具体的 GPU 和内存需求取决于所选用的模型大小，README 中未给出固定指标。支持多种采集硬件（如 Apple Watch, ESP32, Sony Spresense）。出于安全考虑，建议服务器通过 HTTPS 部署或使用内网穿透工具（如 ngrok），避免明文传输音频数据。",[128,129,130,131],"FastAPI","Ollama (可选)","Whisper (可选)","Deepgram (可选)",[35,13,133,15,14],"音频",[135,136,137,138,139,140,141,142,143,144],"ai","esp32","llama2","nrf52840","ollama","wearable","whisper","ble","bluetooth","mistral","2026-03-27T02:49:30.150509","2026-04-20T04:04:30.134352",[],[]]