Clock offset (exif_time_infront_real_time) is not applied to Experiment_Time[s]

已关闭 适合新手
#173 0 条评论 0 个 reaction 已指派 0 人 在 GitHub 查看

维护者通常 1 天内回复

@kriboe90 已经在做这个了。

开始于 2026年10月29日。

  • #174 来自 @kriboe90 —— 未关闭

评估

难度
2/5
预计耗时
1-3 小时
新手友好度
78/100
Issue 类型
缺陷
描述清晰度
描述清楚
活跃度
活跃
技术栈
python
领域
data

调研方向

从 ledsa/data_extraction/init_functions.py 中的 _calc_experiment_and_real_time 开始,并将其时间计算与 ledsa/core/ConfigData.py 中的 ConfigData.get_start_time 进行比较。为以下情况添加回归测试:第一张图像的 start_time 来自其 EXIF 时间,以及两台偏移量不同的相机。完成标准是这两种情况都生成预期的实验共享时间轴;更新配置文档,说明手动设置的 start_time 使用实际时钟时间。

由索引模型根据 Issue 内容生成。

描述

bug

Problem

The camera clock offset exif_time_infront_real_time is only applied to Time[s]. It never reaches Experiment_Time[s].

  • ConfigData.get_start_time moves start_time onto the real clock: it subtracts the offset from the EXIF time of the first image (ConfigData.py#L494).
  • _calc_experiment_and_real_time then measures the experiment time from the uncorrected EXIF time (init_functions.py#L130):
experiment_time = date_time_img - config.get_datetime()   # camera clock − real clock
...
time = date_time_img - timedelta(seconds=time_diff)        # only Time[s] is corrected

So every Experiment_Time[s] is off by exif_time_infront_real_time.

Effects

  • One camera: every time moves by the same amount. When start_time comes from the first image, that image sits at t = offset instead of 0. A temperature reduction table built on the lab clock is read that many seconds off.
  • Several cameras: the stacked analysis matches the cameras by Experiment_Time[s] (_load_time_map → read_experiment_times, StackedExtinctionCoefficients.py#L575). Their time axes stay apart by the difference of their offsets, which is the gap the clock photos were meant to remove.

Reproduction

Camera clock 30 s ahead, one image every 10 s, start_time left to be read from image 1 (EXIF times faked):

start_time = 12:00:00
#Count,Name,Time[s],Experiment_Time[s]
1,img0001.jpg,12:00:00.000,30.0
2,img0002.jpg,12:00:10.000,40.0
3,img0003.jpg,12:00:20.000,50.0

Time[s] of image 1 equals start_time, yet its experiment time is 30 s.

Suggested fix

Measure the experiment time from the corrected time, the same way start_time is computed:

     date_time_img = get_exif_datetime(img_path, tag)

-    experiment_time = date_time_img - config.get_datetime()
-    experiment_time = experiment_time.total_seconds()
     time_diff = config.getfloat(build_type, 'exif_time_infront_real_time')
     time = date_time_img - timedelta(seconds=time_diff)
+    # start_time is on the real clock, so the experiment time is measured from the corrected image time
+    experiment_time = (time - config.get_datetime()).total_seconds()
     return experiment_time, time

With this change the reproduction gives 0, 10, 20 s, and the existing unit tests (370) still pass. A regression test should cover two cases:

  1. With start_time derived from the first image, that image is at 0.
  2. Two cameras with offsets of +30 s and −5 s and the same start_time give the same experiment times.

Things to note

  • Semantics of a hand-set start_time: after the fix, start_time is read as a real-clock (lab) time, as it already is when LEDSA derives it. The config docs should say so explicitly.
  • Existing results: image_infos*.csv written before the fix, and everything built on them, are shifted by the offset. They must be regenerated, and so must any temperature reduction table that was aligned to the old axis. The demo has time_diff_to_image_time = -1, so its times move by 1 s.
  • Multi-camera, out of scope here: even after the fix, cameras share a time axis only when their start_time is the same real time. If each camera derives start_time from its own first image, the axes still differ by the gap between those first images. It may be worth a check or a warning in the stacked analysis.
主要语言
Python
星标
7
派生
4
平均合并
3 小时 58 分钟
30 天内合并 PR
35

环境准备

这个项目没有提供开发容器、Dockerfile 或贡献指南,环境需要你自己搭建:先看它的 README,通用步骤见我们的新手贡献指南。

从这里开始

  1. 先读完整个 Issue,再读项目的贡献指南。
  2. 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
  3. Fork 仓库,在一个分支上完成修改。
  4. 提交 Pull Request,并在描述里引用这个 Issue 编号。

FireDynamics/LEDSmokeAnalysis 的其他 Issue

查看 FireDynamics/LEDSmokeAnalysis 的全部 Issue

相似的 Issue

更多 Python Issue

把新 issue 发到你的邮箱

精选适合新手参与的 GitHub issue 摘要。