| Specification | DJI Action 6 | GoPro HERO 13 | Basler a2A1920-165g5m |
|---|---|---|---|
| Sensor & Optics | |||
| Sensor size | 1/1.1" square (~10.2×10.2mm) | 1/1.9" (~6.2×4.6mm) | 1/2.3" (6.7×4.2mm, IMX392) |
| Pixel size | ~2.4µm | ~1.55µm | 3.45µm |
| Focal length | ~1.6mm (155° FOV) | ~2.9mm (156° FOV) | 6mm C-mount (swappable) |
| Aperture | f/2.0–f/4.0 variable | f/2.5 | Lens-dependent |
| FOV (diagonal) | 155° (182° w/ boost) | 156° | ~72° (with 6mm) |
| Shutter | Rolling | Rolling | Global (no motion artifacts) |
| Resolution & Frame Rate | |||
| Max resolution | 8K (7680×4320) | 5.3K (5312×2988) | 1920×1200 |
| Full-res max fps | 30 fps (8K) | 30 fps (5.3K) | 168 fps |
| 4K max fps | 120 fps | 120 fps | N/A |
| Sustained high fps | 120 fps (stable) | Overheats | 165 fps unlimited |
| Color & Sensitivity | |||
| Color mode | RGB | RGB | Monochrome |
| Bit depth | 8/10-bit | 8/10-bit | 8/10/12-bit |
| Low light | Good | Fair | Excellent (large pixels, no Bayer) |
| IR sensitivity | Blocked | Blocked | Full spectrum |
| Recording | |||
| Max record time | ~4 hrs | ~90 min (4K) | Unlimited |
| Overheating | No issues | Cuts at 4K | 50°C rated |
| Synchronization | |||
| Multi-cam sync | App (Wi-Fi) | Unreliable | HW trigger (sub-µs) |
| External trigger | No | No | Opto-isolated GPIO |
| Physical | |||
| Weight | 146g | 154g | <105g (body) |
| Waterproof | 20m | 10m | No |
| Price | ~$436 | ~$359 | ~$985 + lens |
| Experiment | DJI | GoPro | Basler |
|---|---|---|---|
| Single-cam behavioral | Recommended | OK (watch heat) | Overkill unless fps needed |
| Multi-cam sync (<5ms) | Possible | Unreliable | Recommended |
| Multi-cam sync (<100µs) | No | No | Only option |
| Dark-cycle / IR | No | No | Yes |
| Long recording (>2hr) | Yes | No (overheats) | Yes |
| Portable / field | Self-contained | Self-contained | Needs PC |
| SLEAP pose estimation | Good | Good | Best (global shutter) |
FOV is the angular extent a camera captures. It depends on sensor size and focal length.
Larger sensor or shorter focal length → wider FOV. Action cameras use ~2–3mm lenses for ultra-wide views.
Uses sensor width. DJI: ~145° · Basler+6mm: ~58°
Uses sensor height. DJI: ~122° · Basler+6mm: ~39°
Add 10–20% margin to the minimum distance for practical mounting.
For SLEAP, aim for ≥15 pixels across the animal body (≥5 px/cm for a 3cm-wide mouse).
Global (Basler): all pixels exposed simultaneously — no motion artifacts. Rolling (DJI, GoPro): row-by-row readout causes skew with fast motion.
Distortion depends on your specific lens, FOV mode, and working distance — not just the camera brand. Action cameras in Wide/SuperView mode have heavy barrel distortion, but Linear mode applies in-camera correction and produces near-zero distortion. Basler distortion depends entirely on the C-mount lens and can range from minimal (quality 12mm+) to significant (cheap wide-angle at close range).
The values below are estimates. For real distortion data, run vibing.calibration.check_video() with a charuco board
and enter your actual k1/k2 coefficients.
vibing.calibration.check_video() or OpenCV calibrationHow to get real distortion data:
Undistortion pipelines:
tmaze-undistort — T-maze lens distortion removal + perspective transformation to top-down views
spacecage-undistort — Fisheye correction for NASA SpaceCage with ROI calibration & SLEAP coordinate transform
Most common. Camera on ceiling/rig above arena. 60–200cm typical.
Under transparent floor. For paw/gait tracking. 20–60cm typical.