Lab Internal · Research Proposal

Dart Throw
Biomechanics
Dataset

A 1-month sprint to build the first multi-view, skill-stratified dataset of dart throw mechanics — and the foundation for an AI coaching assistant. Looking for collaborators.

Timeline
4 weeks
Target throws
300+ labeled
Camera setup
2-view · 60 fps · 1080p
Pose model
MediaPipe · 33 keypoints
Potential venue
ACCV 2026 — Datasets track
Status
Seeking collaborators
§ 00 — Overview

Why darts, and what we're building

Darts is a precision sport where the entire outcome depends on a single, repeatable upper-limb motion. Unlike team sports, there's no scene complexity — just one player, one throw, one outcome. That makes it an unusually clean testbed for pose analysis, action quality assessment, and sports coaching AI.

No public dataset exists for dart throw biomechanics at the keypoint level. We're building one from scratch in 4 weeks, with the infrastructure to support coaching model training on top of it.

Phase 01
Dataset
Collection
Weeks 1–2
Camera rigs, filming sessions, per-throw metadata logging. Targeting 5+ players across skill levels.
Phase 02
Pose
Extraction
Weeks 3–4
MediaPipe Pose on all footage. Extract 33 keypoints per frame, detect release frame, compute kinematic features.
Phase 03
Coaching
Model
Month 2–3
Train fault-detection classifier. Build natural-language feedback layer via LLM. Deploy as real-time assistant.
What we have already: Camera equipment, programming skills, and access to players for filming. What we need are collaborators with pose estimation experience, sports biomechanics interest, or help recruiting more players.
§ 01 — Week 1

Equipment setup & environment prep

Everything in week 1 is physical setup. The goal is to have a reproducible, consistent filming environment ready before a single player arrives.

Week 1 Equipment setup & environment prep Goal: filming-ready rig by day 7
Camera setup
  • Camera A — lateral view Mount on rigid tripod, 2–3m from player, shoulder height, exactly 90° to the throwing line. This is your primary biomechanics angle.
  • Camera B — frontal view Position beside or just behind the board, facing the player head-on. Captures body sway, shoulder tilt, and head position.
  • Settings Set both cameras to 1080p / 60 fps. Lock focus and exposure manually — auto-adjust mid-session breaks pose estimation. Turn off any digital stabilisation.
  • Sync method At the start of each session, clap hands clearly in frame of both cameras simultaneously. This gives you a sync reference frame for alignment in post.
Environment & markers
  • Lighting Set up a bright, diffuse LED panel (e.g. Godox SL60 or Elgato Key Light). Aim for even, shadow-free illumination on the player. No windows behind the player — backlighting destroys pose estimation.
  • Floor marking Tape the regulation oche at exactly 2.37m from the board. Also tape the exact tripod foot positions — this ensures spatial consistency across every session.
  • Body markers Stick small neon-coloured adhesive dots on each player's wrist, elbow, and fingertips before filming. This dramatically improves MediaPipe keypoint accuracy at the joints that matter most.
  • Test recording Do a full dry-run session before week 2. Check: both cameras capture the full throw arc, lighting is even, markers are visible, sync clap is in frame.

Equipment shopping list

Item Spec / model Notes
Cameras ×2 Sony ZV-E10 / GoPro Hero 12 / iPhone 14 Pro+ 1080p @ 60fps minimum. iPhone Pro is genuinely sufficient to start.
Tripods ×2 Manfrotto 290 Xtra or equivalent Ball-head, centre column lock. Adjust height 80–170cm.
LED lighting panel Godox SL60 / Elgato Key Light Bi-colour 5600K. Aim for flat, even coverage on player.
SD cards ×4 UHS-I V30 or better, 64GB each 2 per camera. Swap between sessions; back up same day.
External hard drive Samsung T7 2TB USB-C ~4 GB/hour at 1080p60. Budget 2TB for the full month.
Neon body markers Adhesive neon tape / stickers Apply to wrist, elbow, fingertips per player per session.
Floor tape Coloured gaffer tape Mark oche position + tripod feet. Do not move between sessions.
Camera placement diagram Bird's-eye view: player stands at oche (2.37m mark). Camera A is directly to their right or left at 90°, 2–3m away. Camera B is directly in front, just behind the board line, at face height.
Common mistake to avoid Do not film near windows or with mixed lighting colour temperatures. Even a slight shadow across the throwing arm will cause MediaPipe to lose the elbow keypoint intermittently.
§ 02 — Week 2

First filming sessions

Week 2 is about collecting your first 150+ throws. Aim for 3 players minimum, different skill levels. The metadata you record here is just as important as the video.

Week 2 Filming sessions — 3 players, 50 throws each Goal: 150+ labeled throws, all metadata logged
Session structure (per player)
  • Warm-up (10 throws, unlabeled) Let the player throw freely to warm up. Do not record metadata for these — they are not part of the dataset.
  • Recording batches (5 × 10 throws) Record 50 throws in batches of 10. After each batch, pause, note the scores, and give the player a 5-minute rest. This prevents fatigue-confounded data.
  • Target instruction Tell the player which segment to aim for at the start of each batch (e.g. "aim for triple 20 for this set"). Log the target in your spreadsheet.
  • Log immediately Record each throw's outcome in a spreadsheet row in real time — not from memory after the session. Use the throw ID format: P01-S01-T001 (player-session-throw).
What to log per throw
  • throw_id Format: P[player]-S[session]-T[throw number]. e.g. P02-S01-T034
  • target_segment What the player was aiming at. e.g. "T20", "D16", "Bull"
  • scored_segment + score_value What they actually hit and the numeric score (0–60).
  • Player metadata Player ID, self-rated skill level (1–5), dart weight in grams, grip style (pencil / barrel / front).
  • Session context Session number, batch number, any fatigue notes (e.g. "complained of tired arm after batch 4").

Skill level recruitment target

Beginner (level 1–2)Never played seriously or plays casually. Inconsistent stance and release. High variance throws. Essential for the fault-detection training set.
Intermediate (level 3)Club player or regular pub darter. Has a consistent stance but identifiable mechanical habits. Most accessible to recruit.
Advanced (level 4–5)Competitive league or semi-pro player. Very consistent mechanics — provides the "correct form" baseline for comparison. Worth the extra effort to recruit.
Aim for diversityDifferent grip styles, arm lengths, throwing stances (angled vs. square-on). Diversity in the dataset makes downstream models more robust.
§ 03 — Week 3

Pose extraction + more filming

While week 2 footage processes overnight, you continue filming 2 more players in week 3. Pose extraction runs in the background.

Week 3 MediaPipe extraction on week 2 + add 2 players Goal: 250+ throws total, keypoints extracted for first 150
Pose extraction pipeline
  • Run MediaPipe Pose on all week 2 video Python script processes each throw clip and outputs a CSV: one row per frame, 33 landmarks × (x, y, z, visibility) = 133 columns per row. Can batch-process overnight.
  • Release frame detection Write a simple peak-detection function on wrist velocity (computed from wrist landmark position over time). The release frame is the first local maximum in wrist velocity during the throw.
  • Extract kinematic features at release frame Elbow angle = angle between shoulder, elbow, and wrist landmarks. Wrist velocity = Euclidean distance of wrist landmark between release frame and previous frame. Follow-through = number of frames until wrist landmark decelerates below threshold.
  • Quality check Visually inspect 20 random throws. Flag any throw where >30% of frames have landmark visibility below 0.5 for the elbow or wrist. Mark flagged throws as excluded.
Continue filming
  • Add 2 new players Target different grip styles from week 2 players. Ideally one left-handed player if possible — adds valuable variation.
  • Same session protocol 10 warm-up, 5 × 10 batches, 5-min rest between each. Log metadata in real time.
  • Marker check before each session Confirm neon markers are fresh and well-adhered. Replace any that have faded or peeled.
  • Camera position re-verification Use the tape marks from week 1 to confirm tripods are in identical positions. Even a 10cm shift changes the geometry.

Python stack for extraction

# dependencies pip install mediapipe opencv-python pandas numpy scipy # core extraction loop (pseudocode) import mediapipe as mp import cv2, pandas as pd pose = mp.solutions.pose.Pose( model_complexity=2, # highest accuracy min_detection_confidence=0.7, min_tracking_confidence=0.7 ) for throw_clip in throw_videos: cap = cv2.VideoCapture(throw_clip) rows = [] while cap.isOpened(): ret, frame = cap.read() result = pose.process(cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)) if result.pose_landmarks: row = {f"lm_{i}_{ax}": getattr(lm, ax) for i, lm in enumerate(result.pose_landmarks.landmark) for ax in ["x","y","z","visibility"]} rows.append(row) pd.DataFrame(rows).to_csv(f"keypoints/{throw_clip}.csv")
§ 04 — Week 4

Dataset finalization & write-up

Week 4 Labeling, QC, merging, and paper/report start Goal: final dataset ≥300 clean throws, paper outline done
Dataset assembly
  • Merge pose CSVs with metadata spreadsheet Join on throw_id. Each throw row gets: all per-throw metadata columns + computed kinematic features + path to keypoints CSV and video clips.
  • Quality filter Remove throws with >30% occluded keypoints, failed release frame detection, or camera desync artifacts. Document the exclusion reason for each removed throw.
  • Derived feature computation Compute for every included throw: elbow_angle_deg, wrist_vel_px_s, followthrough_frames, body_sway_px. These become the baseline feature vector.
  • Cross-validate annotation Have a second person spot-check 30 random throws against the video to verify score labels and target segment annotations are correct.
Analysis + write-up
  • Baseline correlation analysis Plot elbow angle vs. accuracy, wrist velocity vs. accuracy, grouped by skill level. This becomes the core "dataset analysis" section of any paper.
  • Throw repeatability metric Compute standard deviation of elbow_angle_deg and body_sway_px per player. Repeatability σ often correlates more strongly with skill than any single-throw metric.
  • Start paper outline Introduction → Related work → Dataset construction → Annotation schema → Baseline analysis → Limitations → Conclusion. One paragraph per section as a skeleton.
  • GitHub repo setup Push extraction code, feature computation scripts, and analysis notebooks. This is required for any dataset publication.
§ 05 — Full pipeline

End-to-end data flow

This is how a raw throw becomes a training sample — from filming through to coaching model input.

🎥 Film 2-view 60fps
🗂 Log metadata spreadsheet
🦴 MediaPipe 33 keypoints/frame
📍 Release frame wrist vel peak
📐 Features elbow, vel, sway
🤖 Model fault classifier
💬 Coaching cue LLM feedback

Annotation schema

# DartMotion-300 — per-throw CSV schema # Identifiers throw_id str # e.g. "P02-S03-T047" player_id str # anonymised, e.g. "P02" skill_level int # 1–5 self-rated session_num int # index for that player dart_weight_g float # e.g. 21.0, 23.0, 26.0 grip_style str # "pencil" | "barrel" | "front" # Outcome labels target_segment str # e.g. "T20", "D16", "Bull" scored_segment str # actual landing region score_value int # 0–60 hit_target bool # True if scored == target # Kinematic features (computed from keypoints) elbow_angle_deg float # at release frame wrist_vel_px_s float # peak wrist velocity followthrough_fr int # frames after release body_sway_px float # lateral hip displacement throw_sigma float # repeatability (per-player σ) # File references video_lateral str # path to side-view clip video_frontal str # path to frontal clip keypoints_csv str # path to MediaPipe output release_frame int # frame index of dart release qc_passed bool # False if excluded from final set
§ 06 — Publishing

How to release and publish this dataset

The target venue is ACCV 2026 under the Datasets and Performance Analysis track — a natural fit since this is the first dart throw biomechanics dataset at keypoint level. Submission deadline: check the ACCV 2026 site for exact date.

01
Consent forms — do this in week 1

Every player must sign a written consent form covering: use of their footage for research, publication of anonymized keypoint data, and use of short video clips in the paper. If your institution requires IRB / ethics board approval for human subjects research, submit the application in week 1 — it can take 2–4 weeks to clear.

02
Choose a license

Use CC BY 4.0 for the keypoint CSVs and metadata — maximum research usability, attribution only. For video clips use CC BY-NC 4.0 (non-commercial) given privacy considerations. Document both in a LICENSE.txt at the dataset root.

03
Host on Zenodo + GitHub

Upload the CSV data and metadata to Zenodo (free, DOI-minted, 50GB limit — sufficient for CSVs). Host video files separately on Google Drive or an institutional server. Push all code to GitHub, then archive a GitHub release to Zenodo to get a citable DOI for the codebase too.

zenodo.org github.com Google Drive (video)
04
Write a dataset datasheet

ACCV increasingly expects a Gebru et al.-style datasheet covering: motivation, composition, collection process, preprocessing pipeline, intended uses, distribution terms, and maintenance plan. This doubles as the README on Zenodo and supplementary material for the submission.

05
Release code alongside data

Publish the MediaPipe extraction pipeline, feature computation scripts, and baseline analysis notebooks on GitHub. Link the repo in the paper. Strong reproducibility significantly improves review scores for dataset papers.

06
Post to arXiv after submission

Once submitted to ACCV, immediately post to arXiv under cs.CV. Add the arXiv link to the Zenodo record. This creates a bidirectional citation chain and boosts discoverability before conference proceedings are published.

§ 07 — Join the project

Looking for collaborators

The project is self-funded and camera-equipped. What it needs is people. Time commitment is fully flexible — even occasional input on annotation design or model architecture is valuable.

Pose / CV engineer
MediaPipe, OpenPose, or similar. Help refine the extraction pipeline, release frame detection, and feature computation scripts.
5–10 hrs/week · weeks 3–4
Biomechanics advisor
Knowledge of upper-limb throw mechanics, joint angle analysis, or sports science background. Help validate which features actually matter.
Flexible · advisory role
Player recruiter
Know any regular darts players? We need 5+ players across skill levels in the Takasaki / Gunma area. Even one introduction helps.
One-off · any week
ML / coaching model
Interested in action quality assessment or fault-detection classifiers? Phase 2 (months 2–3) needs this. Strong paper contribution angle.
Month 2–3 · flexible
Paper writing
Help with the dataset paper for ACCV 2026. Sections: related work, baseline analysis, dataset datasheet. Co-authorship credited.
Week 4 onward
Open role
Interested but don't fit the above? Bring your own angle. This is early-stage enough that the right person shapes the direction.
DM to discuss
Interested? Drop a reply in the thread or DM me directly. Happy to share the full technical plan, discuss authorship structure, or just answer questions. The filming starts week 1 — the sooner you're in, the more you shape the dataset design.