Lab Camera Comparison

DJI Action 6 · GoPro HERO 13 · Basler ace 2
DJI
Action 6
Action Camera · RGB
Sensor1/1.1" square CMOS
Resolution8K@30 · 4K@120
Aperturef/2.0–f/4.0 variable
FOV155° (182° w/ boost lens)
ColorRGB · 10-bit D-Log M
Battery~240 min · 50GB built-in
AppExcellent
OverheatNo issues
GoPro
HERO 13 Black
Action Camera · RGB
Sensor1/1.9" CMOS
Resolution5.3K (5312×2988)
Max FPS4K@120 · 1080@240
FOV156° diagonal
ColorRGB · 10-bit HLG
Battery~90 min (4K)
AppPoor
OverheatCuts at 4K
Basler
ace 2 a2A1920-165g5m
Machine Vision · Monochrome
SensorSony IMX392 (3.45µm)
Resolution1920×1200 (2.3MP)
Max FPS165 fps continuous
FOV58°×39° (6mm lens)
ColorMono · 12-bit
RecordingUnlimited (disk-bound)
ShutterGlobal
SyncHW trigger
Quick Verdict for Animal Tracking
DJI Action 6
Best all-round choice. Reliable app, no overheating, long battery. Great for top-down recording where 4K is sufficient.
GoPro HERO 13
Highest raw resolution (5.3K) but poor app reliability (50% connection failure), overheating at 4K cuts recordings. Best as backup.
Basler ace 2
Gold standard for precision. Global shutter, 165fps continuous, hardware trigger sync. Mono only. Requires PC + 5GigE.
SpecificationDJI Action 6GoPro HERO 13Basler a2A1920-165g5m
Sensor & Optics
Sensor size1/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µm3.45µm
Focal length~1.6mm (155° FOV)~2.9mm (156° FOV)6mm C-mount (swappable)
Aperturef/2.0–f/4.0 variablef/2.5Lens-dependent
FOV (diagonal)155° (182° w/ boost)156°~72° (with 6mm)
ShutterRollingRollingGlobal (no motion artifacts)
Resolution & Frame Rate
Max resolution8K (7680×4320)5.3K (5312×2988)1920×1200
Full-res max fps30 fps (8K)30 fps (5.3K)168 fps
4K max fps120 fps120 fpsN/A
Sustained high fps120 fps (stable)Overheats165 fps unlimited
Color & Sensitivity
Color modeRGBRGBMonochrome
Bit depth8/10-bit8/10-bit8/10/12-bit
Low lightGoodFairExcellent (large pixels, no Bayer)
IR sensitivityBlockedBlockedFull spectrum
Recording
Max record time~4 hrs~90 min (4K)Unlimited
OverheatingNo issuesCuts at 4K50°C rated
Synchronization
Multi-cam syncApp (Wi-Fi)UnreliableHW trigger (sub-µs)
External triggerNoNoOpto-isolated GPIO
Physical
Weight146g154g<105g (body)
Waterproof20m10mNo
Price~$436~$359~$985 + lens
DJI Mimo
iOS / Android · Free
Connection★★★★★
Responsiveness★★★★★
Preview★★★★★
Ease of use★★★★★
Strengths: Synchronized live preview + recording. Quick response. Zero connection failures. Intuitive.
GoPro Quik
iOS / Android · Free
Connection★★★★★
Responsiveness★★★★★
Preview★★★★★
Ease of use★★★★★
Issues: ~50% connection failure. Phone preview OR camera view only. Recording button lags seconds. Overheats at 4K without warning.
Pylon + Multi-Cam Sync
Desktop · GitHub →
Connection★★★★★
Responsiveness★★★★
Multi-camera★★★★★
Ease of use★★★★★
Setup: Lab-built Electron + Python + Arduino app for 2–4 camera synchronized recording with sub-µs hardware trigger. Requires PC with 5GigE NIC. Source code on GitHub.
When to Use Each Camera
ExperimentDJIGoProBasler
Single-cam behavioralRecommendedOK (watch heat)Overkill unless fps needed
Multi-cam sync (<5ms)PossibleUnreliableRecommended
Multi-cam sync (<100µs)NoNoOnly option
Dark-cycle / IRNoNoYes
Long recording (>2hr)YesNo (overheats)Yes
Portable / fieldSelf-containedSelf-containedNeeds PC
SLEAP pose estimationGoodGoodBest (global shutter)
Camera & Lens
Arena
Recording Estimator
Distance115 cm
Drag camera icon or use slider · Hover top view for pixel info
Setup Checklist
    Step 1 of 7
    Arena
    Cameras
    Click and drag cameras to reposition · Colored zones show coverage

    1. Field of View (FOV)

    FOV is the angular extent a camera captures. It depends on sensor size and focal length.

    FOV = 2 × arctan( sensor_size / (2 × focal_length) )

    Larger sensor or shorter focal length → wider FOV. Action cameras use ~2–3mm lenses for ultra-wide views.

    Horizontal FOV

    Uses sensor width. DJI: ~145° · Basler+6mm: ~58°

    Vertical FOV

    Uses sensor height. DJI: ~122° · Basler+6mm: ~39°

    2. Distance & Coverage

    coverage = 2 × distance × tan( FOV / 2 )
    distance = object_size / ( 2 × tan( FOV / 2 ) )

    Add 10–20% margin to the minimum distance for practical mounting.

    3. Pixel Density (GSD)

    pixel_density = resolution / coverage   (px/cm)

    For SLEAP, aim for ≥15 pixels across the animal body (≥5 px/cm for a 3cm-wide mouse).

    4. Global vs Rolling Shutter

    Global (Basler): all pixels exposed simultaneously — no motion artifacts. Rolling (DJI, GoPro): row-by-row readout causes skew with fast motion.

    5. Lens Distortion

    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.

    DJI Action 6 · Wide
    GoPro HERO 13 · Linear
    Basler · 6mm lens
    Custom Distortion Coefficients
    From vibing.calibration.check_video() or OpenCV calibration
    Your calibration · k1=0, k2=0 (no distortion)

    How to get real distortion data:

    from vibing.calibration import check_video
    result = check_video("your_video.mp4")
    print(result.reprojection_error)  # lower = better calibration

    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

    6. Top-Down vs Bottom-Up Mounting

    Top-Down

    Most common. Camera on ceiling/rig above arena. 60–200cm typical.

    Bottom-Up

    Under transparent floor. For paw/gait tracking. 20–60cm typical.