Prepare LaserLab v2 release pipeline - #1
Conversation
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: beff46ccf9
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| group_key = (sample.get("capture_id") or sample.get("parent_capture_id") or sample["sample_id"], processed.variant_name) | ||
| masks_for_persistence.setdefault(group_key, []).append( | ||
| (int(sample.get("frame_index") or 0), result_record["sample_id"], processed.image) |
There was a problem hiding this comment.
Keep controls out of laser persistence comparisons
When a laser capture is present, _build_samples adds generated controls whose parent_capture_id equals the laser capture. This key puts those controls in the same persistence group as the real laser frames, and for equal frame_index the sort falls back to the random blind order, so a laser frame can be scored against a blank/rotated/block-shuffled control instead of the next laser frame. Because laser_mean_persistence gates the “repeatable candidate” ladder, normal laser runs can be misclassified.
Useful? React with 👍 / 👎.
| import numpy as np | ||
|
|
||
| binary = binary_for_structure(image) | ||
| num_labels, labels, stats, _ = cv2.connectedComponentsWithStats(255 - binary, connectivity=8) |
There was a problem hiding this comment.
Preserve bright laser structures as components
For bright-on-dark laser footage or the synthetic positive, Otsu thresholding marks the bright structure as 255; inverting here makes the dark background the foreground passed to connected-components, so the actual bright signal is discarded/filtered and text_like_count (and thus structure_score) is biased down. The foreground polarity needs to match the bright structures or be selected adaptively before scoring.
Useful? React with 👍 / 👎.
Adds the LaserLab v2 CLI validation pipeline, bundled redistributable optical fixture media, release demo data dumps, release screenshots, Windows executable build scripts, and GitHub Actions for CI plus tagged Windows releases. Validated locally with .venv310 tests, fixture wide-profile run, screenshot generation, PyInstaller bundle build, and LaserLab.exe startup checks.