Add comprehensive README for LiveCompose#1
Merged
JettyCoffee merged 2 commits intoMay 14, 2026
Merged
Conversation
Agent-Logs-Url: https://github.com/LiveCompose/.github/sessions/f59339da-71f1-49bf-9921-9f81339af4c7 Co-authored-by: JettyCoffee <61529233+JettyCoffee@users.noreply.github.com>
Copilot
AI
changed the title
[WIP] Add design motivation and advantages section
Add comprehensive README for LiveCompose
May 14, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
The repository had a near-empty
README.md(# .githubonly). This PR replaces it with full project documentation derived from the mid-term presentation material.Structure
Original prompt
构妙 LiveCompose 中期答辩 PPT 方案
一、设计动机与优势
1.1 项目的动机是什么?解决了现有拍照方案的哪些痛点?
我们观察到,虽然现在的智能手机拍照功能很强大,但很多普通用户并不了解专业的摄影构图知识,比如“三分法”或者如何突出主体。他们拍出的照片常常构图平庸,或者抓不住重点。现有的相机应用大多只提供静态的辅助线,比如九宫格,但这并不能主动告诉用户“应该怎么移动手机才能构图更好”。用户仍然需要自己判断和调整,这既费时又容易错过精彩瞬间。我们的项目动机就是解决这个痛点,我们希望通过 AI 技术,实时分析画面内容,并主动引导用户移动手机,轻松获得构图更优良的照片,甚至在对齐时自动完成拍摄,让好照片的诞生更加“智能”和“轻松”。
1.2 产品的目标用户与核心目标是什么?用户通过产品能获得哪些提升?
我们的目标用户主要是那些希望提高手机摄影水平,但又缺乏专业摄影知识的广大普通用户,比如喜欢在社交媒体分享生活的年轻人,或者希望为家人拍出更好照片的父母。产品的核心目标是成为一个“智能构图助手”,通过实时反馈和引导,帮助用户在拍摄当下就完成出色的构图。用户通过使用我们的产品,最直接的提升就是照片的构图质量会显著改善,画面主体更突出,视觉效果更专业。同时,由于引导是实时的,用户可以在拍摄过程中潜移默化地学习到一些构图技巧。对于开启了自动拍照功能的用户,他们还能更专注于捕捉对象的表情和动作,将按下快门的时机交给应用判断,从而可能捕捉到更自然的瞬间。
1.3 对比同类 APP,项目的主要创新点和优势?
目前市场上的相机应用,要么是专注于滤镜和后期处理美颜相机,要么是提供静态的构图辅助线的系统相机。我们的主要创新点在于“实时动态引导”和“智能追踪”。我们不仅通过 AI 模型分析画面,确定一个理想的构图区域,更关键的是,我们结合了设备的陀螺仪数据实现了一个物理上更准确、体验更流畅的追踪系统,实时在屏幕上显示目标点,引导用户移动手机去对齐。这种“检测-追踪-引导-拍摄”的闭环是我们的核心优势。相比于简单的网格线,我们的引导是动态的、交互式的,这让获得一张构图良好的照片不再需要复杂的思考和调整,操作门槛大大降低,实现摄影的普惠化与大众化
二、技术实现
2.1 项目的整体系统架构图?说明各个模块的功能与交互方式
系统架构图:

我们在 ios 平台上设计应用,并将 LiveCompose 构图模型内置于应用中,系统采用了四层设计
我们的架构基础是第一层,也就是数据采集层。这一层直接和硬件打交道。它主要包含两个模块:一个是
CameraManager,它利用苹果的 AVFoundation 框架来管理相机,负责捕捉实时的视频帧数据流 和拍摄最终的照片;另一个是MotionStabilityMonitor,它通过 CoreMotion 框架持续获取设备的陀螺仪和加速度数据。这一层的工作就是为上层提供原始图像和运动数据。拿到原始数据后,就进入了第二层,智能决策与追踪层。这一层是实现智能化的关键。它包括了我们的核心
AdacropModel,这是一个通过 CoreML 运行的强化学习模型,它负责分析视频帧,计算出最佳的构图建议。同时,这一层还有BoxCenterManager,它获取第一层的陀螺仪数据,实现一个基于物理的追踪模型。这个追踪器不仅能计算目标位置,还带有一个“磁性吸附”功能,当用户接近中心点时能自动吸附,帮助稳定对齐。第三层是核心协调层,它是整个应用的大脑。这一层只有一个关键模块,
CaptureViewModel。它负责管理一个复杂的状态机,比如“等待稳定”、“正在检测”、“准备拍照”等。它从第一层拿到数据,指挥第二层在设备稳定时才启动AdacropModel进行分析。当模型给出结果后,它把目标点交给BoxCenterManager去追踪。它还持续监控追踪状态,一旦发现“已对齐”,就会触发自动拍照逻辑,并根据当前状态生成引导文字给用户看。所有来自界面的操作,比如变焦或切换镜头,也都由它来响应和调度。最上面是第四层,视图与交互层,也就是用户直接看到和操作的界面。这一层完全由 SwiftUI 构建。它包含了
ContentView作为主视图,一个CameraPreview视图来显示底层的相机预览,以及UserGuidanceView和其他 UI 组件,如按钮和变焦环。这一层的所有视图都订阅CaptureViewModel的状态。当ViewModel更新数据时,例如追踪点位置或引导文字变化时,界面会自动刷新,同时,用户的点击操作也会被传递回ViewModel去执行。2.2 选取了什么模型,如何进行训练,数据集如何搭建,模型的参数等等
1. 模型架构
[B, 3, 224, 224]图像张量为 3×224×224,将最长边缩放到224,另一边空白部分用黑色填充,保持原始比例[B, 2048][B, 2048]+ 当前裁剪框状态[B, 4](归一化的 (cx, cy, w, h),分别是裁剪框左上角坐标和宽高,均除以原图尺寸,范围在 0~1)。[B, n_actions]。[B, 1]。[B, 2048]。[B, 4]。训练数据与环境
2. 训练流程
2.1 监督预训练
训练部分:只训练 backbone 和 bbox_head
流程 :
目的:让 backbone 学会裁剪相关特征,bbox_head学会预测合理裁剪框,为后续 RL 提供更好的初始化。
2.2 强化学习
训练部分:用完整的 ActorCritic(backbone + actor + critic)。
环境 CropEnv
状态组成:
[3, img_size, img_size],由当前 box 裁剪 + resize 得到[x/iw, y/ih, w/iw, h/ih]动作集合 self.actions(共 11 个):
left, right, up, down, zoom_in, zoom_out, wider, narrower, taller, shorter, stop
步进逻辑:
根据动作修改 box(平移 / 缩放 / 改变宽高)。
边界裁剪 并 判断最小尺寸约束
评分:new_score = _get_score(new_box)
奖励:
更新 prev_score, best_score, step_count;返回 (img_tensor, state_tensor), reward, done, info
重置 reset()
随机初始化一个可行 box
初始裁剪评分(真实 NIMA 调用)
清理缓存过大时的 score_cache
返回初始状态

真实 NIMA 评分比较耗时,为保证训练进度做了以下处理:
reset() 会调用 NIMA 得到初始分(init_score)。
每次需要评分时,env._get_score 会先查缓存 score_cache;若命中即不调用 NIMA。
否则按间隔决定是否真实调用:当 self.step_count % self.real_score_interval == 0 时调用 _safe_nima...