Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
f4610abcb9 | ||
|
|
e357930bee | ||
|
|
5744fca1bd |
No files matched your search
+1
-1
@@ -3,8 +3,8 @@ __pycache__/
|
||||
run.log
|
||||
captures/
|
||||
backups/
|
||||
runtime/
|
||||
.vscode/
|
||||
.codex
|
||||
.codex/
|
||||
|
||||
# Local SDK/cache artifacts
|
||||
|
||||
@@ -20,7 +20,7 @@ Windows 侧密码 SSH 自动化使用 Paramiko。编辑中文时必须保持 UTF
|
||||
|
||||
## 项目边界
|
||||
|
||||
- 当前应用版本和发布标签均为 `v2.0.3`。
|
||||
- 当前应用版本和发布标签均为 `v2.1.1`。
|
||||
- 版本字符串始终保留前导 `v`。
|
||||
- 序列号使用 `PGU5A-` 加大写以太网 MAC。
|
||||
- Core 不包含 PLC/Modbus、运动、水肥、业务自动化、计划任务、业务路径、Hikrobot/MVS/GenICam 或任何应用专属身份。
|
||||
@@ -39,7 +39,7 @@ Windows 侧密码 SSH 自动化使用 Paramiko。编辑中文时必须保持 UTF
|
||||
http://107.173.157.41:3000/clear/PGU5-Core.git
|
||||
```
|
||||
|
||||
现场配置是实际设备配置。发布时如果用户要求提交当前现场状态,应保留并审查配置差异,不得直接丢弃。
|
||||
现场配置是实际设备配置。每次提交、推送或发布前都必须重新读取 `192.168.101.172:/root/PGU5-Core/pgu5a_config.json`,以当前调试机运行参数为提交基线,不得直接丢弃现场差异。密码、AuthKey、令牌等设备私有认证值只保留在现场,不写入公开仓库;部署时也不得用公开配置覆盖这些值。
|
||||
|
||||
## 服务
|
||||
|
||||
@@ -58,6 +58,7 @@ OLED 是独立服务,OLED 故障不得影响主服务。
|
||||
- `pgu5a_base.py` 内嵌 HTML、CSS 和 JavaScript,没有独立前端构建。
|
||||
- 前端修改后提取脚本做 JavaScript 语法检查;一个语法错误会导致时钟、按钮和状态刷新同时失效。
|
||||
- UI 保持紧凑、现场可操作,移动端不得横向溢出,DCL 必须完整显示画面。
|
||||
- 管理中心“多光谱控制”页面通过 `GET/POST /api/ms602/detection` 管理开流检测时长、抖动、撕裂和帧率检测;保存后必须持久化并立即更新运行中的 worker,不得重启整机或全部通道。
|
||||
- 配置写入保持格式化 UTF-8 JSON 和一个结尾换行。
|
||||
- 不进行与用户请求无关的大范围重构。
|
||||
|
||||
@@ -65,9 +66,19 @@ OLED 是独立服务,OLED 故障不得影响主服务。
|
||||
|
||||
- MS602 和 DCL 立即启动。
|
||||
- MS602 六通道按 `open_stagger_sec` 错开启动,各通道独立重连。
|
||||
- MS602 连续读帧失败或满足反向垂直抖动阈值时,只重启受影响通道。
|
||||
- MS602 连续读帧失败时始终允许独立重连;抖动和撕裂检测只在每次通道成功打开后的 `startup_detection_window_sec` 内运行。
|
||||
- 首次启动、休眠唤醒和错误重连都会为对应通道开启新检测窗口;窗口通过后必须停止昂贵图像分析,且不得由状态轮询或保存配置重新启动检测。
|
||||
- 每个通道的检测样本、截止时间和代次必须独立并受锁保护,旧开流代次的计算结果不得影响新通道实例。
|
||||
- 抖动位移是在 `160x100` 检测样本上计算,现场 720 上下抖动实测约为 `0.04..0.20` 像素;不得恢复按原始分辨率误设的 `0.4` 最小位移和 `2.0` 累计位移。
|
||||
- 撕裂检测同时使用跨帧低相关度大帧差和单帧横向/纵向梯度比例,避免已经撕裂且持续撕裂时因缺少连续切换而漏检。
|
||||
- 启动窗口内的大幅位移按次数检测,极大位移单次触发;默认阈值分别为 `0.8`、`2` 次和 `1.0`,只恢复对应通道。
|
||||
- 帧率检测是持续运行的轻量监控,不属于昂贵图像分析窗口;默认低于 `2.0 FPS` 连续 `2` 次后只重连对应通道,正常间隔必须清空连续异常次数。
|
||||
- MS602 保存必须拒绝缺失、恢复中、过期或跨通道时间偏差过大的帧组;默认 `frame_max_age_sec=2.0`、`frame_max_skew_sec=1.0`。
|
||||
- 通道打开后在启动检测完成前使用 `CHECKING`,通过后才转为 `CONNECTED`。
|
||||
- `last_jitter_trigger_*` 和 `last_integrity_trigger_*` 必须跨通道重开保留,便于区分真实故障与阈值误判;保存检测参数不得清空已完成窗口的诊断证据。
|
||||
- M3Lite 使用 GPIO 8 异步唤醒;UVC-RGB 使用 GPIO 9 异步唤醒。
|
||||
- UVC-RGB 在视频节点消失、被替换或持续无新帧时重连。
|
||||
- DCL 默认严格自动发现 `ClearDCLXXXXX` 视频设备名称;`camera_name` 仅作为兼容优先提示,不得要求换机时必须修改公开配置。
|
||||
- 休眠递增 `sensor_wake_token`,取消旧延时唤醒线程。
|
||||
- 定时保存或保存队列工作时暂停自动休眠。
|
||||
|
||||
@@ -78,7 +89,8 @@ OLED 是独立服务,OLED 故障不得影响主服务。
|
||||
| M3 startup NUC check | `3.0 s` |
|
||||
| M3 wake delay | `2.0 s` |
|
||||
| UVC-RGB wake delay | `1.0 s` |
|
||||
| MS602 open stagger | `0.5 s` |
|
||||
| MS602 open stagger | `0.3 s` |
|
||||
| MS602 startup detection | `5.0 s` |
|
||||
|
||||
## M3/L640 控制
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
# PGU5-Core API
|
||||
|
||||
本文档对应 PGU5-Core `v2.0.3`,以 `pgu5a_base.py` 中的实际路由为准。
|
||||
本文档对应 PGU5-Core `v2.1.1`,以 `pgu5a_base.py` 中的实际路由为准。
|
||||
|
||||
## 基本约定
|
||||
|
||||
@@ -47,6 +47,7 @@
|
||||
| `/api/syncthing/identity-init/status` | Syncthing 身份初始化进度 |
|
||||
| `/api/ota/status` | OTA 当前状态 |
|
||||
| `/api/m3/control` | M3/L640 热成像 USB 控制状态 |
|
||||
| `/api/ms602/detection` | MS602 抖动、撕裂、帧率检测参数和六通道诊断 |
|
||||
| `/api/ssh/read` | 读取 Web SSH PTY 输出 |
|
||||
| `/api/config` | 读取当前 JSON 配置文本 |
|
||||
| `/api/logs` | 获取内存运行日志 |
|
||||
@@ -58,6 +59,10 @@
|
||||
| `/frame/m3lite.jpg` | M3Lite 预览 |
|
||||
| `/frame/dcl.jpg` | DCL 预览 |
|
||||
| `/frame/uvc_rgb.jpg` | UVC-RGB 预览 |
|
||||
| `/assets/logo.png` | 产品 Logo |
|
||||
| `/assets/xterm.js` | Web SSH 终端脚本,按需加载 |
|
||||
| `/assets/xterm.css` | Web SSH 终端样式,按需加载 |
|
||||
| `/assets/xterm.LICENSE` | xterm.js 许可证文本 |
|
||||
|
||||
### POST
|
||||
|
||||
@@ -72,6 +77,7 @@
|
||||
| `/api/sensors/power` | 唤醒或休眠传感器 |
|
||||
| `/api/sensors/auto_sleep` | 设置自动休眠时间 |
|
||||
| `/api/m3/auto_nuc` | 设置并保存自动 NUC |
|
||||
| `/api/ms602/detection` | 保存并立即应用 MS602 抖动、撕裂、帧率检测参数 |
|
||||
| `/api/network/scan` | 扫描 Wi-Fi |
|
||||
| `/api/network/ap` | 修改 AP |
|
||||
| `/api/network/sta/connect` | 连接 STA |
|
||||
@@ -252,7 +258,7 @@ curl -X POST http://127.0.0.1:8080/api/save -d "target=all"
|
||||
"used_gb": 118.0,
|
||||
"total_gb": 238.5,
|
||||
"refresh_ms": 5000,
|
||||
"app_version": "v2.0.3",
|
||||
"app_version": "v2.1.1",
|
||||
"auto_cleanup": {}
|
||||
}
|
||||
```
|
||||
@@ -389,6 +395,104 @@ curl -X POST http://127.0.0.1:8080/api/files/download \
|
||||
|
||||
定时采集开启或保存队列仍有任务时,`paused` 和 `activity_running` 为 `true`,自动休眠倒计时暂停。
|
||||
|
||||
### `GET /api/ms602/detection`
|
||||
|
||||
返回当前运行中的检测参数和六通道实时诊断:
|
||||
|
||||
```json
|
||||
{
|
||||
"ok": true,
|
||||
"config": {
|
||||
"startup_detection_window_sec": 5.0,
|
||||
"jitter_detection_enabled": true,
|
||||
"jitter_shift_min": 0.04,
|
||||
"jitter_shift_max": 0.5,
|
||||
"jitter_horizontal_max": 0.25,
|
||||
"jitter_restart_reversals": 3,
|
||||
"jitter_window_sec": 3.0,
|
||||
"jitter_cancellation_ratio": 0.35,
|
||||
"jitter_total_shift_min": 0.35,
|
||||
"jitter_large_shift_min": 0.8,
|
||||
"jitter_large_shift_events": 2,
|
||||
"jitter_extreme_shift_min": 1.0,
|
||||
"frame_integrity_detection_enabled": true,
|
||||
"frame_integrity_phase_response_min": 0.55,
|
||||
"frame_integrity_delta_min": 8.0,
|
||||
"frame_integrity_restart_events": 2,
|
||||
"frame_integrity_window_sec": 3.0,
|
||||
"frame_tearing_gradient_ratio_min": 2.0,
|
||||
"frame_tearing_row_diff_min": 5.5,
|
||||
"frame_rate_detection_enabled": true,
|
||||
"frame_rate_min": 2.0,
|
||||
"frame_rate_memory": 2,
|
||||
"frame_max_age_sec": 2.0,
|
||||
"frame_max_skew_sec": 1.0
|
||||
},
|
||||
"channels": {
|
||||
"480": {
|
||||
"status": "CONNECTED",
|
||||
"device_index": 20,
|
||||
"restart_count": 1,
|
||||
"jitter_count": 0,
|
||||
"frame_integrity_count": 1,
|
||||
"frame_rate_count": 0,
|
||||
"frame_rate_fps": 8.1,
|
||||
"frame_rate_low_streak": 0,
|
||||
"frame_rate_result": "ok",
|
||||
"detection_active": false,
|
||||
"detection_remaining_sec": 0.0,
|
||||
"detection_result": "passed",
|
||||
"detection_run_count": 1,
|
||||
"detection_sample_count": 24,
|
||||
"last_phase_response": 0.98,
|
||||
"last_frame_delta": 1.2,
|
||||
"last_tearing_gradient_ratio": 1.31,
|
||||
"last_tearing_row_diff": 4.58,
|
||||
"last_integrity_trigger_events": 2,
|
||||
"last_integrity_trigger_gradient_ratio": 2.64,
|
||||
"last_integrity_trigger_row_diff": 8.01
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### `POST /api/ms602/detection`
|
||||
|
||||
表单字段与范围:
|
||||
|
||||
| 字段 | 范围 | 说明 |
|
||||
| --- | --- | --- |
|
||||
| `startup_detection_window_sec` | `1.0..60.0` | 每次成功打开通道后的检测时长,默认 `5.0` 秒 |
|
||||
| `jitter_detection_enabled` | 布尔值 | 开关小抖动检测 |
|
||||
| `jitter_shift_min` | `0.01..10.0` | `160x100` 检测样本上的最小上下位移 |
|
||||
| `jitter_shift_max` | `0.1..20.0` | 最大上下位移,必须不小于最小值 |
|
||||
| `jitter_horizontal_max` | `0.01..10.0` | 允许的最大左右位移 |
|
||||
| `jitter_restart_reversals` | `2..20` | 反向次数阈值 |
|
||||
| `jitter_window_sec` | `1.0..30.0` | 抖动统计窗口,秒 |
|
||||
| `jitter_cancellation_ratio` | `0.05..0.8` | 来回位移抵消比例阈值 |
|
||||
| `jitter_total_shift_min` | `0.05..50.0` | 累计位移阈值 |
|
||||
| `jitter_large_shift_min` | `0.1..20.0` | 启动窗口内大幅垂直位移阈值 |
|
||||
| `jitter_large_shift_events` | `1..20` | 大幅位移累计达到此次数后恢复当前通道 |
|
||||
| `jitter_extreme_shift_min` | `0.1..20.0` | 单次极大垂直位移阈值,必须不小于大幅位移阈值 |
|
||||
| `frame_integrity_detection_enabled` | 布尔值 | 开关撕裂检测 |
|
||||
| `frame_integrity_phase_response_min` | `0.1..0.95` | 相位相关度阈值;调高更敏感 |
|
||||
| `frame_integrity_delta_min` | `1.0..100.0` | 帧差阈值;调低更敏感 |
|
||||
| `frame_integrity_restart_events` | `2..20` | 窗口内异常次数阈值 |
|
||||
| `frame_integrity_window_sec` | `1.0..30.0` | 撕裂统计窗口,秒 |
|
||||
| `frame_tearing_gradient_ratio_min` | `1.1..5.0` | 单帧纵向变化与横向变化的比例阈值 |
|
||||
| `frame_tearing_row_diff_min` | `1.0..30.0` | 单帧横向断层强度阈值 |
|
||||
| `frame_rate_detection_enabled` | 布尔值 | 开关运行期轻量帧率检测 |
|
||||
| `frame_rate_min` | `0.1..60.0` | 单通道最低成功读帧 FPS |
|
||||
| `frame_rate_memory` | `1..20` | 连续低帧率间隔达到此次数后恢复当前通道 |
|
||||
|
||||
`frame_max_age_sec` 和 `frame_max_skew_sec` 用于保存前校验六通道帧组是否新鲜、时间是否足够同步。它们当前通过配置文件管理,不由检测页面修改。
|
||||
|
||||
保存成功后先写入 `pgu5a_config.json`,再更新运行中的 MS602 worker 并清空当前检测样本。参数立即用于仍在进行的开流自检;已经通过的通道不会因为保存配置而重新开始检测。该操作不重启服务、不重启整机,也不会主动重启正常通道。
|
||||
|
||||
每个通道只在首次启动、休眠唤醒或错误重连后开启独立图像检测窗口。窗口结束且未触发异常时,`detection_result` 变为 `passed`,后续预览帧在进入灰度转换、缩放、相位相关和帧差计算前直接返回。帧率检测只记录成功读帧间隔,运行期间持续生效;低帧率累计达到阈值时也只请求重启对应通道。
|
||||
|
||||
管理中心诊断表只显示 `device_index` 的数字节点编号,例如 `12`;API 仍返回完整的 `device_index` 和通道状态消息,后台设备路径与相机打开逻辑不变。
|
||||
|
||||
### `GET /api/m3/control`
|
||||
|
||||
返回低频轮询缓存:
|
||||
@@ -576,20 +680,40 @@ POST /api/ssh/close
|
||||
|
||||
```json
|
||||
{
|
||||
"open_stagger_sec": 0.5,
|
||||
"open_stagger_sec": 0.3,
|
||||
"read_fail_restart_count": 5,
|
||||
"channel_reconnect_delay_sec": 0.8,
|
||||
"startup_detection_window_sec": 5.0,
|
||||
"jitter_detection_enabled": true,
|
||||
"jitter_shift_min": 0.4,
|
||||
"jitter_shift_max": 2.5,
|
||||
"jitter_horizontal_max": 0.5,
|
||||
"jitter_shift_min": 0.04,
|
||||
"jitter_shift_max": 0.5,
|
||||
"jitter_horizontal_max": 0.25,
|
||||
"jitter_restart_reversals": 3,
|
||||
"jitter_window_sec": 3.0,
|
||||
"jitter_cancellation_ratio": 0.35,
|
||||
"jitter_total_shift_min": 2.0
|
||||
"jitter_total_shift_min": 0.35,
|
||||
"jitter_large_shift_min": 0.8,
|
||||
"jitter_large_shift_events": 2,
|
||||
"jitter_extreme_shift_min": 1.0,
|
||||
"frame_integrity_detection_enabled": true,
|
||||
"frame_integrity_phase_response_min": 0.55,
|
||||
"frame_integrity_delta_min": 8.0,
|
||||
"frame_integrity_restart_events": 2,
|
||||
"frame_integrity_window_sec": 3.0,
|
||||
"frame_tearing_gradient_ratio_min": 2.0,
|
||||
"frame_tearing_row_diff_min": 5.5,
|
||||
"frame_rate_detection_enabled": true,
|
||||
"frame_rate_min": 2.0,
|
||||
"frame_rate_memory": 2,
|
||||
"frame_max_age_sec": 2.0,
|
||||
"frame_max_skew_sec": 1.0
|
||||
}
|
||||
```
|
||||
|
||||
小幅反向垂直抖动继续使用位移方向、抵消比例和累计位移判断,位移值基于 `160x100` 检测样本。大幅位移按窗口内次数判断,极大位移单次即可触发。对于画面撕裂、错行等坏帧,检测器同时统计跨帧低相位相关度大帧差,以及单帧横向断层梯度;这些昂贵分析只在开流检测窗口运行。帧率监控持续记录成功读帧间隔,连续低 FPS 时只重启对应 MS602 通道。`ms602_channels` 会附带检测状态、恢复计数、相位相关度、帧差、断层、当前 FPS 和低帧率连续次数等诊断字段。
|
||||
|
||||
`dcl.auto_detect=true` 时运行时严格匹配 `ClearDCLXXXXX` 视频设备名称。`dcl.camera_name` 如存在仅作为优先提示;未配置或更换设备时无需修改发布配置。
|
||||
|
||||
### 服务和电源接口
|
||||
|
||||
| 接口 | 行为 |
|
||||
|
||||
@@ -1,14 +1,14 @@
|
||||
# PGU5-Core
|
||||
|
||||
PGU5-Core 是运行在 Orange Pi 4 Pro 上的 PGU5A 开放管理平台核心程序,提供相机采集、预览与保存、传感器电源管理、文件管理、网络配置、OTA、Web SSH、OLED、RTC 和 NVMe 集成。
|
||||
PGU5-Core 是运行在 Orange Pi 4 Pro 上的 PGU5 开放平台核心程序,提供相机采集、预览与保存、传感器电源管理、文件管理、网络配置、OTA、Web SSH、OLED、RTC 和 NVMe 集成。
|
||||
|
||||
## 项目标识
|
||||
|
||||
| 项目 | 当前值 |
|
||||
| --- | --- |
|
||||
| 产品 | PGU5A 开放管理平台 |
|
||||
| 应用版本 | `v2.0.3` |
|
||||
| 发布标签 | `v2.0.3` |
|
||||
| 产品 | PGU5 开放平台 |
|
||||
| 应用版本 | `v2.1.1` |
|
||||
| 发布标签 | `v2.1.1` |
|
||||
| 设备序列号 | `PGU5A-` + 大写以太网 MAC |
|
||||
| 现场目录 | `/root/PGU5-Core` |
|
||||
| Web | `http://192.168.101.172:8080/` |
|
||||
@@ -20,13 +20,14 @@ PGU5-Core 是运行在 Orange Pi 4 Pro 上的 PGU5A 开放管理平台核心程
|
||||
|
||||
当前 Core 功能:
|
||||
|
||||
- MS602 六通道采集、预览、保存和独立通道恢复。
|
||||
- MS602 六通道采集、预览、保存,以及开流自检阶段的小幅反向抖动、大幅/极大位移、低相关度撕裂帧检测和持续低成本帧率监控;异常时只恢复对应通道。
|
||||
- M3Lite 热成像采集、温度数据保存和 PyUSB 控制。
|
||||
- DCL 与 UVC-RGB/IMX766 采集、预览和保存。
|
||||
- DCL 严格按 `ClearDCLXXXXX` 序列号名称自动发现;DCL 与 UVC-RGB/IMX766 均支持采集、预览和保存。
|
||||
- 单次保存、在线定时保存、保存队列和自动休眠。
|
||||
- 文件浏览、预览、ZIP 下载、后台永久删除和空间自动清理。
|
||||
- AP、STA、以太网、HS/Headscale 和 Syncthing 管理。
|
||||
- Web SSH、配置编辑、服务重启、安全关机和 OTA。
|
||||
- 管理中心提供多光谱控制页,可开关并调节小抖动、大幅/极大位移、撕裂和帧率检测,保存后即时生效并持久化,同时查看六通道实时恢复诊断。
|
||||
- 独立 OLED、DS3231 和 NVMe 服务。
|
||||
|
||||
不属于 Core 的功能:
|
||||
@@ -36,6 +37,29 @@ PGU5-Core 是运行在 Orange Pi 4 Pro 上的 PGU5A 开放管理平台核心程
|
||||
- Hikrobot/MVS/GenICam。
|
||||
- 任何应用专属产品身份、业务页面或部署路径。
|
||||
|
||||
## v2.1.1
|
||||
|
||||
- 同步 `v2.0.5..v2.1.1` 通用平台能力,不包含 PLC、运动、水肥、业务自动化、计划任务或 MVS/GenICam。
|
||||
- MS602 新增启动期大幅/极大垂直位移检测,解决短时高幅跳动画面可能越过小抖动上限而漏检的问题。
|
||||
- MS602 新增持续低成本单通道帧率监控;连续低于阈值时只重连对应波段,不持续执行灰度缩放、相位相关或撕裂分析。
|
||||
- 开流后先显示 `CHECKING`,通过启动检测窗口后再转为 `CONNECTED`,避免画面尚未完成自检时过早显示正常。
|
||||
- DCL 支持严格 `ClearDCLXXXXX` 名称自动发现,现场 `camera_name` 仅作为优先提示,不再是换机必须修改的绑定项。
|
||||
- DCL 预览宽度同步为 `720`,刷新间隔调整为 `350ms`,在提升预览细节的同时控制浏览器和网络刷新负载。
|
||||
|
||||
## v2.0.5
|
||||
|
||||
- 多光谱六通道诊断表的“设备”列仅显示视频节点编号,例如 `/dev/video12` 显示为 `12`,减少现场界面的实现细节。
|
||||
- 后端 `device_index`、设备路径、运行日志和通道打开逻辑保持不变,不影响设备识别、恢复和 API 诊断。
|
||||
|
||||
## v2.0.4
|
||||
|
||||
- 新增管理中心“多光谱控制”页面,可持久化调整 MS602 开流检测时长、小抖动和撕裂检测参数,并查看六通道诊断。
|
||||
- MS602 昂贵图像分析只在首次启动、休眠唤醒或错误重连后的短暂窗口内运行;通过后停止检测,读帧失败仍保持独立通道恢复。
|
||||
- 增强持续撕裂和 720 通道轻微上下抖动识别,使用通道代次、独立锁和诊断证据避免旧线程影响新实例。
|
||||
- 管理中心所有页面统一可滚动高度链;多光谱诊断表完整显示通道、设备节点和检测指标,移动端改为无横向溢出的分组布局。
|
||||
- 修复暗色主题移动端导航按钮、系统设置菜单、根页面白边和多处文字/组件样式,统一非业务管理界面。
|
||||
- 清理空响应式规则、Python 缓存和历史部署临时备份,保留现场配置、配置备份、运行日志和 OTA 状态。
|
||||
|
||||
## v2.0.3
|
||||
|
||||
- 全面升级桌面与移动端 Web UI,统一浅色/深色主题、弹窗、导航、文件管理和管理工具布局。
|
||||
@@ -62,7 +86,7 @@ PGU5-Core 是运行在 Orange Pi 4 Pro 上的 PGU5A 开放管理平台核心程
|
||||
| `backups/config/` | 配置编辑器备份,不提交 |
|
||||
| `backups/ota_state.json` | OTA 运行状态,不提交 |
|
||||
|
||||
现场 `pgu5a_config.json` 是配置事实来源,不应当作普通本地差异丢弃。
|
||||
现场 `pgu5a_config.json` 是配置事实来源,不应当作普通本地差异丢弃。每次提交、推送或发布前必须重新读取 `192.168.101.172:/root/PGU5-Core/pgu5a_config.json`,以当前调试机运行参数更新仓库配置。密码、AuthKey、令牌等设备私有认证值只保留在现场,部署时不得使用公开配置覆盖。
|
||||
|
||||
## 服务
|
||||
|
||||
@@ -79,7 +103,12 @@ PGU5-Core 是运行在 Orange Pi 4 Pro 上的 PGU5A 开放管理平台核心程
|
||||
## 相机与电源
|
||||
|
||||
- MS602 和 DCL 唤醒时立即启动。
|
||||
- MS602 六通道按 `ms602.open_stagger_sec` 间隔启动,当前默认 `0.5` 秒。
|
||||
- MS602 六通道按 `ms602.open_stagger_sec` 间隔启动,当前现场值 `0.3` 秒。
|
||||
- MS602 每个通道仅在首次启动、休眠唤醒或错误重连后执行昂贵的开流图像自检,默认持续 `5.0` 秒;通过后停止灰度、缩放、相位相关和帧差分析。
|
||||
- 开流自检期间判断小幅反向垂直抖动、大幅/极大位移、跨帧低相关度大帧差和单帧横向断层;达到阈值时只重启受影响通道,并在重新打开后开始新一轮独立自检。
|
||||
- 轻量帧率监控在通道运行期间持续工作,默认最低 `2.0 FPS`、连续 `2` 次低帧率后恢复对应通道;正常间隔会清空连续异常计数。
|
||||
- 保存 MS602 六通道数据前校验缺失、恢复中、过期和跨通道时间偏差,默认最大帧龄 `2.0` 秒、最大时间偏差 `1.0` 秒。
|
||||
- 管理中心的“多光谱控制”页面可调整全部检测参数;保存写入 `pgu5a_config.json`,无需重启服务或整机。
|
||||
- M3Lite 使用 GPIO 8 延时上电,当前唤醒延迟 `2.0` 秒。
|
||||
- UVC-RGB 使用 GPIO 9 延时上电,当前唤醒延迟 `1.0` 秒。
|
||||
- 休眠会递增唤醒令牌,取消尚未完成的延时启动。
|
||||
@@ -90,8 +119,8 @@ PGU5-Core 是运行在 Orange Pi 4 Pro 上的 PGU5A 开放管理平台核心程
|
||||
界面当前版本来自:
|
||||
|
||||
```python
|
||||
APP_VERSION = "v2.0.3"
|
||||
APP_RELEASE_TAG = "v2.0.3"
|
||||
APP_VERSION = "v2.1.1"
|
||||
APP_RELEASE_TAG = "v2.1.1"
|
||||
```
|
||||
|
||||
Git 信息只用于诊断。在线升级先检查 Gitea Release,只有发现更新后才启用升级按钮。OTA 状态包括:
|
||||
|
||||
+1472
-126
File diff suppressed because it is too large.
Load diff
+24
-7
@@ -26,11 +26,11 @@
|
||||
"stream_fps": 10,
|
||||
"ms602_preview_width": 280,
|
||||
"m3lite_preview_width": 320,
|
||||
"dcl_preview_width": 480,
|
||||
"dcl_preview_width": 720,
|
||||
"uvc_rgb_preview_width": 240,
|
||||
"ms602_refresh_ms": 200,
|
||||
"m3lite_refresh_ms": 200,
|
||||
"dcl_refresh_ms": 200,
|
||||
"dcl_refresh_ms": 350,
|
||||
"uvc_rgb_refresh_ms": 480,
|
||||
"disk_refresh_sec": 5.0,
|
||||
"capture_interval_sec": 1.0,
|
||||
@@ -45,17 +45,33 @@
|
||||
"target_fps": 8,
|
||||
"gain": 8,
|
||||
"d12": 0,
|
||||
"open_stagger_sec": 0.5,
|
||||
"open_stagger_sec": 0.3,
|
||||
"read_fail_restart_count": 5,
|
||||
"channel_reconnect_delay_sec": 0.8,
|
||||
"startup_detection_window_sec": 5.0,
|
||||
"jitter_detection_enabled": true,
|
||||
"jitter_shift_min": 0.4,
|
||||
"jitter_shift_max": 2.5,
|
||||
"jitter_horizontal_max": 0.5,
|
||||
"jitter_shift_min": 0.04,
|
||||
"jitter_shift_max": 0.5,
|
||||
"jitter_horizontal_max": 0.25,
|
||||
"jitter_restart_reversals": 3,
|
||||
"jitter_window_sec": 3.0,
|
||||
"jitter_cancellation_ratio": 0.35,
|
||||
"jitter_total_shift_min": 2.0
|
||||
"jitter_total_shift_min": 0.35,
|
||||
"jitter_large_shift_min": 0.8,
|
||||
"jitter_large_shift_events": 2,
|
||||
"jitter_extreme_shift_min": 1.0,
|
||||
"frame_integrity_detection_enabled": true,
|
||||
"frame_integrity_phase_response_min": 0.55,
|
||||
"frame_integrity_delta_min": 8.0,
|
||||
"frame_integrity_restart_events": 2,
|
||||
"frame_integrity_window_sec": 3.0,
|
||||
"frame_tearing_gradient_ratio_min": 2.0,
|
||||
"frame_tearing_row_diff_min": 5.5,
|
||||
"frame_rate_detection_enabled": true,
|
||||
"frame_rate_min": 2.0,
|
||||
"frame_rate_memory": 2,
|
||||
"frame_max_age_sec": 2.0,
|
||||
"frame_max_skew_sec": 1.0
|
||||
},
|
||||
"m3lite": {
|
||||
"width": 640,
|
||||
@@ -75,6 +91,7 @@
|
||||
"control_timeout_ms": 2500
|
||||
},
|
||||
"dcl": {
|
||||
"auto_detect": true,
|
||||
"camera_name": "ClearDCL00011",
|
||||
"width": 3840,
|
||||
"height": 1080,
|
||||
|
||||
Reference in new issue
Block a user