Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
L
libpdafdoc
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
尹洪福
libpdafdoc
Commits
49440e10
Commit
49440e10
authored
Mar 17, 2026
by
尹洪福
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
update
parent
ccd8de6b
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
86 additions
and
328 deletions
+86
-328
s3Camera对焦架构.md
s3Camera对焦架构.md
+27
-1
s3当前对焦架构.txt
s3当前对焦架构.txt
+0
-0
分工g.md
分工g.md
+59
-0
新对焦架构-会议简版.md
新对焦架构-会议简版.md
+0
-327
No files found.
s3
s5 新
对焦架构.md
→
s3
Camera
对焦架构.md
View file @
49440e10
...
...
@@ -432,12 +432,38 @@ moveTo(curPulse + deltaPulse2) // 同样可分步过渡
5. moveTo(peakPos) → 完成
```
**采样形态判断**
(拟合前先判断):
-
中间高两边低(fv_left
<
fv
_center
>
fv_right)→ 正常,执行抛物线拟合
-
单调递增/递减 → 峰值不在采样范围内,往高侧再移一步重新采样(最多重试 2~3 次)
-
三点差异很小 → 无纹理或已在峰顶平台,停在当前位置
**异常处理**
:
-
denom ≈ 0(FV 变化极小)→ 停在当前位置,认为已合焦
-
peakPos 超出 ±2×step → clamp(防跑飞)
-
三点 FV 都很低 → 无纹理,放弃精调
**备选**
:抛物线拟合效果不佳时,改为逐步爬峰或混合方案
**FV 验证**
:
拟合结果不可盲信(实际 FV 曲线不是标准抛物线,存在不对称、噪声、平顶等情况)。
```
moveTo(peakPos) → 读 fv_peak
if (fv_peak >= fv_max_of_3points) → 拟合有效,完成
if (fv_peak < fv_max_of_3points) → 拟合偏了,回到三点中 FV 最大的位置
```
### Phase 3 备选方案 — 多点扫描取最大值
抛物线拟合依赖"FV 曲线近似抛物线"假设,实际可能不成立。备选方案:
```
在粗跳位置附近,固定步长采样 5~7 个点
直接取 FV 最大的那个位置
```
-
不依赖曲线形状假设,结果可靠
-
多花 2~4 帧(约 70~130ms)
-
适合 FV 曲线不规则的场景
**两种方案待实测对比,择优选用。**
### 对焦过程数据记录
...
...
s3当前
的
对焦架构.txt
→
s3当前对焦架构.txt
View file @
49440e10
File moved
分工g.md
0 → 100644
View file @
49440e10
# 输入
-
AI-PD unit @江文杰 重要
1.
各个场景准确度(暗光/竖条纹/小物体..)
2.
不同机器鲁棒性 / 泛化性
3.
置信度
4.
前景ROI- 小对焦窗口/每个小窗口做前景ROI
5.
性能优化加速
6.
ROI可配置/分辨率可变
7.
滤波@跟踪 抗抖/抗噪声/预测。详细设计方案
-
传统PD算子融合?
1.
优化策略
重要:
-
FV unit
1.
接口模块 / hisi /软实现?
-
SAD unit
1.
目标?场景检测
2.
hisi SAD 具体怎么算
3.
时间延迟
-
TOF unit
1.
目标
2.
8828:5
*
5传感器数据,稀疏数据如何结合
3.
标定?映射RGB数据计算
子模块架构详细设计 - 补充
-
帧数据对齐,时间戳对齐
-
各个unit分离
-
插拔式
# 窗口管理
-
具体几个模式
-
如何送给后面的决定
# 决策
重要:
-
融合策略 多unit多角度出发融合决策
-
融合决策策略文档
-
归一化问题 多尺度评分/占比?业界主流方案?
-
子代码模块架构实现
# 执行 (待议)
-
粗对+精对
-
纯CAF
# 整体架构
子模块架构
# PD 拍照功能接入考虑详细 (待议)
讨论点:
1.
ROI/对焦焦点?
2.
触发策略
3.
PD算子优化/传统结合
\ No newline at end of file
新对焦架构-会议简版.md
deleted
100644 → 0
View file @
ccd8de6b
# S3/S5 新对焦架构 — 会议简版
## 一、目标
-
对焦速度:200-300ms(当前 400-700ms)
-
稳定收敛,无来回震荡
-
S3/S5 统一一套 pdaf lib,降低维护成本
-
可调试:运行时调参,不依赖重编译
---
## 二、pdaf lib 定义
> **接受 PD 和 FV 数据流,根据对焦模式和对焦框配置,决策并执行推镜头操作。**
核心三段式:
**输入 → 决策 → 执行**
```
┌─────────────────────────────────────────────────────────────────┐
│ pdaf lib │
│ │
│ ┌─────────────┐ ┌──────────────┐ ┌─────────────────┐ │
│ │ 输入 │ │ 决策 │ │ 执行 │ │
│ │ │ │ │ │ │ │
│ │ ProcessModule│──→│ PolicyModule │──→│ ActuateModule │ │
│ │ ├ PdProcessor│ │ (触发判定) │ │ (镜头控制) │ │
│ │ ├ FvProcessor│ │ │ │ │ │
│ │ └ TofProc...│──→│ WindowManager│ │ PdafActuator │ │
│ │ (预留) │ │ (目标选择) │ │ CdafActuator │ │
│ └─────────────┘ └──────────────┘ └────────┬────────┘ │
│ │ │
│ 配置输入: StateMachine ──┘ │
│ 对焦模式 / 对焦框 / 平台参数 │
└───────────────────────────────────────────────────┬─────────────┘
▼
电机控制指令输出
```
| 阶段 | 模块 | 职责 |
|------|------|------|
|
**输入**
| ProcessModule(PdProcessor + FvProcessor + TofProcessor预留) | 接收 PD/FV 数据流,统一输出 12×6 zone 数据 |
|
**决策**
| PolicyModule + WindowManager | 选择对焦目标,判定是否触发对焦、用哪种策略 |
|
**执行**
| ActuateModule + StateMachine | PD 粗跳 + FV 精调,驱动镜头到位 |
### PDAF 决策链路
```
PD measure — PD 采集
↓
temporal filter — 时域滤波(多帧平滑去噪)
↓
confidence check — 置信度评估(方差、方向一致性、多 zone 投票)
↓
dead zone check — 动态合焦容忍区(依赖 confidence + texture)
↓
trigger decision — 触发决策(四层门控)
↓
lens move — 推镜头(粗跳 + 精调)
```
---
## 三、输入层设计
### PD/FV 统一 12×6 zone,零坐标映射
PD 和 FV 共用 12×6 网格,独立存储、独立更新,用 zone index 关联。
```
PdZoneMap (12×6) FvZoneMap (12×6)
zone[i].pd zone[i].fv
zone[i].conf zone[i].timestamp
zone[i].timestamp
各自按自己帧率更新(PD ~25fps, FV ~30/60fps)
同一 zone index 直接取 PD 和 FV,零坐标映射
```
-
PD 算法双轨:ZnccProcessor(传统)+ AipdProcessor(AI),统一输出 PdZoneMap
-
zone 行列数配置化,不硬编码分辨率和 block 数量
### 坐标系与 zoom 处理
三个坐标系:
```
┌─────────────────────────────────┐
│ Sensor 全图坐标系 │ ← PD raw 始终基于此(不随 zoom 变化)
│ 3840 × 2160 │
│ │
│ ┌───────────────────┐ │
│ │ 可视区域坐标系 │ │ ← zoom 裁剪后的区域
│ │ (VPSS 输出) │ │ 人脸框、用户触摸点等基于此坐标系
│ │ │ │
│ │ AF stats 12×6 │ │ ← ISP 对可视区域重新配置 zone(暂定)
│ │ zone 覆盖此区域 │ │
│ └───────────────────┘ │
│ │
└─────────────────────────────────┘
```
**坐标转换链路**
:
```
VPSS 坐标(用户看到的画面)
↕ 偏移 + 缩放(zoom crop 参数)
Sensor 全图坐标
↕ zone 网格映射
Zone index (row, col)
→ 取 PD(需从全图 PD 中定位对应区域)
→ 取 FV(直接按 zone index,AF stats 已对齐可视区域)
```
**zoom 时的处理**
:
| 数据 | zoom 影响 | 处理方式 |
|------|----------|---------|
| AF stats (FV) | 重新配置到可视区域,zone 数量不变(12×6),单 zone 覆盖面积变小 | ISP 重配 w/h,保持 col=12, row=6 |
| PD raw | 始终全图,不随 zoom 变化 | 需要将可视区域映射到全图,裁剪出对应 PD 区域计算(备选:直接裁剪 PD raw) |
| VPSS 坐标(人脸框等) | 基于可视区域 | WindowManager 负责转换到 zone index |
> **注意**:zoom 后单 zone 内容变少,PD 计算精度可能受影响,需实测验证。
---
## 四、决策层设计
### 目标选择(WindowManager)
| 模式 | 选择策略 |
|------|---------|
| 人脸模式 | AI 人脸框 → 映射到 zone |
| 跟踪模式 | 跟踪目标框 → 映射到 zone |
| 手动选区 | 用户指定区域 → 映射到 zone |
| 中心点对焦 | 直接取中心 zone |
| 大区域自动 | 加权选择最优 zone |
### 触发决策(PolicyModule)— 四层门控
```
第一层:场景变化检测(FV 下降?PD 偏移?)→ 粗筛,大部分帧在此过滤
第二层:稳定性确认(连续 N 帧)→ 防误触发
第三层:PD 分析 → 触发 PDAF 或 FvScan
第四层:合焦门控 → 动态 dead zone,防重复触发
高置信+强纹理 → dead zone 小(精度高)
低置信+弱纹理 → dead zone 大(容忍偏差)
```
对焦抑制信号:AE/AWB/SAD 剧烈变化时暂停触发判定
---
## 五、执行层设计
### 为什么选「粗跳 + 精调」而不是「每步微调」
每步微调(每帧读 PD → 小步推镜头 → 等信号更新 → 再推)的问题:
-
每次推镜头后需等 2-4 帧 PD 信号才稳定
-
DCC 精度不够时需多次迭代才能收敛
-
3-5 次迭代 × 每次 2-3 帧延迟 = 9-15 帧(300-500ms)
粗跳 + 精调的思路:
-
**一次算好目标位置,直接大步跳过去**
,只吃一次延迟
-
到位后用 FV 精调确认峰值,不依赖 PD 收敛
-
总共 1-2 次跳转 + 1 次精调,耗时大幅缩短
这也是业界通用方案(Sony Hybrid AF、libcamera PDAF+CDAF)。
### PD 稳定性 → 步长调节
粗跳前评估连续 N 帧 PD 稳定性:
-
**stable**
(+3, +3, +3):幅度方差小 → 正常步长
-
**noisy**
(+3, +1, +4):方向一致但幅度波动 → 降低步长,避免过冲
### 对焦执行流程
```
Phase 1 (PD 粗跳) → Phase 2 (PD 修正, 可选) → Phase 3 (FV 三点抛物线精调)
```
-
Phase 1:
`deltaPulse = pd × dcc + 重力补偿 + 温度补偿`
,大步跳到目标附近
-
Phase 2:粗跳后 PD 偏差仍大时修正一次(最多 1 次,不无限迭代)
-
Phase 3:三点采样 + 抛物线拟合求 FV 精确峰值(参考 libcamera findPeak)
**预期耗时:200-300ms(典型),最长 400ms**
### 对焦过程数据记录
每次对焦执行过程中,记录完整的 PD/FV 变化序列(独立于历史数据)。
-
粗跳分步过程中虽不等信号同步,但
**被动记录**
每帧的 PD/FV
-
推镜头过程中数据不稳(运动模糊、PD 延迟),
**记录但不依赖**
-
价值:
-
DCC 校准:对比"PD 预测位置" vs "FV 实际峰值位置",累积修正 DCC
-
方向验证:分步中 FV 趋势至少可判断方向对不对
-
调试诊断:dump 完整对焦曲线,排查问题
-
异常检测:PD 突然反向或 FV 骤降时可提前中止
### DCC 补偿:温度 & 重力
VCM 电机受重力和温度影响,同样 pulse 对应不同实际位置:
| 因素 | 影响 | 补偿方式 |
|------|------|---------|
|
**重力**
(影响较大) | 镜头朝上/朝下/水平,磁力抵抗重力不同 |
`sin(angle) × K_gravity`
,K 需标定 |
|
**温度**
| VCM 磁力随温度变化 |
`(T - T_ref) × K_temp`
,K 需标定 |
补偿加入 DCC 计算:
`deltaPulse = pd × dcc + gravityOffset + tempOffset`
### 镜头到位等待
VCM 马达无位置反馈,发 pulse 后不知道何时真正到位。
方案:实测不同移动量下的到位耗时,按移动量分档固定等待。VCM 响应特性稳定,同样移动量到位时间基本一致。
| 移动量 | 等待时间 | 备注 |
|--------|---------|------|
| 小步(<30 pulse) | 待测 | 精调阶段 |
| 中步(30~100) | 待测 | 修正阶段 |
| 大步(>100) | 待测 | 粗跳阶段 |
### 状态机:新增 TRACKING 状态
```
IDLE → FOCUSING → TRACKING → IDLE
↑ │
└─────────┘ (PD 大变 → 重新对焦)
```
-
FOCUSING:完整 Phase 1/2/3
-
TRACKING:对焦完成后持续监测,小步跟随移动目标
-
解决移动目标场景反复全流程对焦的问题
---
## 六、S3/S5 统一设计
### 一套 lib,两个产品
pdaf lib 是纯算法层,不直接操作硬件。S3/S5 差异通过配置解决。
```
pdaf lib(统一算法)
├── ProcessModule / PolicyModule / ActuateModule / WindowManager / ...
└── 平台配置:
├── S3: pulse 0~1024, DCC 表, 12×6 zone, AIPD ~25fps
└── S5: pulse 范围, DCC 表, zone 配置, ...
```
### lib 职责边界
> 接受 PD 和 FV 数据流,根据对焦模式和对焦框设置等配置,输出镜头控制指令。
| 归 pdaf lib | 不归 pdaf lib |
|-------------|--------------|
| PD/FV 数据处理 | PD raw 采集 |
| 触发判定 + 执行算法 | ISP 配置 / 电机驱动 |
| 模式/对焦框管理 | 人脸/目标检测 AI |
### 调试模式
S5 硬件未就绪前,在 S3 上通过 FIFO 命令通道模拟 S5 操作:
```
bash
echo
"mode afs"
>
/tmp/pdaf_cmd
# 切换模式
echo
"key half_press"
>
/tmp/pdaf_cmd
# 模拟快门半按
echo
"motor goto 500"
>
/tmp/pdaf_cmd
# 控制镜头
echo
"dump pd"
>
/tmp/pdaf_cmd
# 查看数据
```
量产后同样可用于现场诊断。
### 日志与数据上报
**问题**
:之前排查对焦问题只能远程看用户电脑屏幕,耗时耗人力,无法定位根因。
**方案**
:
-
**调试日志分级开关**
:可运行时开关,不同级别(关键事件 / 详细数据 / 全量 dump)
-
**debug 绘制开关**
:OSD 叠加 zone 网格、PD 方向箭头、FV 热力图等,开发调试用
-
**对焦流程记录**
:每次对焦完整记录一条结构化数据,包含:
-
触发原因、触发时的 PD/FV 快照
-
各 Phase 耗时、步数、PD/FV 变化序列
-
最终结果(成功/失败)、最终 pulse 位置
-
**数据上报**
:对焦流程记录用于远程数据分析,测试和用户反馈问题时直接拉数据定位,不再依赖远程桌面
---
## 七、开发计划
### 原则:模块独立验证,再组合集成
每个模块先单独测试确认可靠,再组合。避免混到一起后定位不了问题出在哪。
| 模块 | 独立验证内容 |
|------|-------------|
| PD 计算 | 固定镜头位置,采集各 zone 的 PD 值,验证准度和一致性 |
| FV 计算 | 固定镜头位置,验证各 zone 的 FV 值是否反映真实清晰度 |
| DCC | 已知 PD →
`deltaPulse = pd × dcc`
→ 推镜头 → 验证到位精度 |
| 触发模块 | 制造场景变化(遮挡/移物),验证触发是否及时、是否误触发 |
| 执行模块 | 手动触发对焦,验证 Phase 1/2/3 各阶段行为和耗时 |
| 坐标映射 | 不同 zoom 倍数下验证 zone 对齐、VPSS→zone 转换正确性 |
### 开发步骤
| 步骤 | 模块 | 说明 |
|------|------|------|
| 1 | DCC 简化 | 移除物距概念,
`deltaPulse = pd × dcc常量`
,最独立 |
| 2 | FV 优化 | 统一 12×6 zone,理清坐标映射 |
| 3 | AIPD 测试 | 测试工具采集 PD-pulse 曲线,摸清精度 |
| 4 | 触发重写 | 四层门控,信号逐个验证后组合 |
| 5 | 执行重写 | PD 粗跳 + FV 抛物线精调 |
| 6 | 集成测试 | 全链路调优 |
---
## 八、预期收益
| 指标 | 目标 |
|------|------|
| 对焦速度 | 200-300ms |
| 代码维护 | S3/S5 统一 lib |
| 数据可靠性 | PD/FV 独立更新、零坐标映射 |
| 可调试性 | 命令通道实时调参 |
| 移动目标 | TRACKING 小步跟随 |
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment