Inspiration
I run TPlus, a small launch-alert tool for friends who care about spaceflight but cannot watch multi-hour webcasts. Timeline + OCR already decide when a milestone fires (liftoff, MECO, stage sep, landing…). The painful failure mode was the still image on the alert: black frames, HUD cards, wrong phase, or fireball mush that does not actually show the event. A misleading thumbnail is worse than no image.
That mapped cleanly to a computer-vision question for the OpenCV × AWS contest: does this frame show named event X? If not, do not post it.
What it does
Around each milestone, TPlus extracts a short window of frames (not the full VOD). OpenCV 5 scores those frames. We treat the product gate as binary:
Does this image show [liftoff / MECO / stage sep / …]? → yes / no
If the answer is not a confident yes, the alert stays text-only. Schedule + OCR remain authoritative for timing; vision only decides whether a still is allowed.
Frames, human picks, and score artifacts live in Amazon S3. The same batch_score.py path runs locally or on EC2 (OpenCV 5.0.0 on a short-lived t3.micro; terminate-after).
How we built it
- Window extract:
yt-dlp -g+ ffmpeg around milestone times - Gold: human best-still picks + yes/no shows-event labels (
shows_event.jsonl) - OpenCV 5 heuristics: HSV plume / coast, sharpness, mid-contrast, HUD and low-value penalties → label + rank (
score_frame.py,batch_score.py) - AWS: S3 pack store (
tplus-vision-scenicmind, us-east-2) + EC2 batch; summaries record OpenCV version, host, and timing - Eval: precision on
yesfirst (false posts hurt); high threshold prefers refusing a still over attaching a wrong one
Code and writeup are in the Cue/TPlus monorepo under apps/tplus/src/webcast/vision/
Challenges we ran into
- "Pretty still" ≠ "shows the event." Ranking for aesthetics over-fit fireballs and under-served coast / MECO. Reframing labels as yes/no shows event X matched the product pain.
- Webcast noise: logos, replay cards, and telemetry HUDs look "informative" but fail the post test — they must be hard negatives.
- AWS account friction: a managed Free Tier org SCP blocked some EC2 shapes; we still landed a real OpenCV 5 batch on
t3.micro+ S3 and terminated the instance. - Honest metrics: top-k vs human picks is still weak; we report that and optimize precision on yes for the gate instead of claiming solved detection.
Accomplishments that we're proud of
- Reframed the problem as a product gate, not a leaderboard chase: “Does this frame show event X?” — so TPlus can refuse misleading alert stills.
- Shipped a real OpenCV 5 path (
score_frame/batch_score) on authentic webcast windows, not toy images. - Ran the same scorer on AWS: frames in S3, batch on EC2 with OpenCV 5.0.0 (~420 frames / ~4s per flight), then terminated the instance.
- Built human gold that matches the pain: best-still picks plus yes/no shows-event labels, with HUD / wrong-phase frames as hard negatives.
- Kept the system honest: timeline + OCR still own alert timing; vision only decides whether an image may post — and we report weak top-k instead of papering over it.
What we learned
- Product-shaped labels beat generic scene taxonomies when the user harm is specific.
- Soft enrichment (text alert always OK; image optional) is the right first ship for sparse ops tools.
- Reproducible cloud proof for this contest is boring on purpose: same scorer, S3 in/out, short EC2 run, kill the VM.
What's next for TPlus Vision Enrichment
Grow yes/no gold across more flights, raise gate precision, then optionally reuse the same evidence for "schedule lag" overrides (e.g. visual MECO before a late clock) — without letting vision fire alerts alone.
Built With
- amazon-ec2
- amazon-linux
- amazon-web-services
- cloudflare-workers
- ffmpeg
- jsonl
- numpy
- opencv5
- python
- yt-dlp
Log in or sign up for Devpost to join the conversation.