Calibration (Per Stream)
The Calibration tab manages calibration workflows for a stream.
What You Get From Calibration
HeliOS calibration is standard camera intrinsics + distortion:
- Intrinsics:
fx,fy,cx,cy - Distortion:
k1,k2,k3,p1,p2 - Lens model (for example: pinhole vs fisheye)
- Undistort iterations (used by some calibrated decode paths)
When you Save, these values are stored on the stream manifest as manifest.calibration and are applied to the running stream without a capture restart.
Core Workflow
- Generate/print a calibration board (ChArUco).
- Capture calibration snapshots from the live stream.
- Select which snapshots to use.
- Solve calibration and review results (reprojection error, per-image debug).
- Save (and optionally Apply) the solved calibration.
Guided Mode
Guided mode overlays help you spread samples across the image during capture.
- Enable guided mode for on-preview helpers.
- Optionally accumulate guided coverage live while you capture.
- Reset coverage if you want to start a new capture session.
Calibration Boards (ChArUco)
The tab can generate a ChArUco calibration board as PNG or PDF.
Defaults and parameters (high level):
- Board geometry:
squaresX,squaresY - Physical sizing for PDF:
squareMm,markerMm, plus margin/dpi/paper - Dictionary: defaults to
4x4_1000
Tip: the board must print at the physical size you tell the solver. If your PDF viewer “fit to page” changes scale, your squareMm/markerMm will be wrong.
When printing the PDF, do not use "Fit to page" or any scaling. Print at 100% (actual size).
Capture Snapshots
Click the snapshot action to store a JPEG in Media (kind calibration) tied to the stream id.
Implementation detail that matters operationally:
- The snapshot path temporarily forces the stream graph output to
frameso the engine captures a usable annotated image, then restores your previous output selection.
Practical capture advice:
- Fill a large portion of the frame with the board, but vary distance.
- Vary pose: tilt, rotate, and move the board across the full image (center + corners).
- Avoid motion blur; lock exposure if your device/settings make the board flicker.
Solve Calibration
Solving is done by the backend calibration solver endpoint (POST /calibration/solve) using:
- The list of snapshot filenames you selected
- The board parameters (squares + physical sizes + dictionary)
- Optional solve config (for example lens model)
If include overlays is enabled, the solver can also emit overlay/debug images as additional Media items to help you understand which views were used and where detections failed.
Import And Reuse
The tab can also:
- copy calibration from another stream
- import calibration JSON from a file
- review current saved calibration values before solving
Save Vs Apply
After you solve:
- Save writes the solved calibration to the stream manifest (
manifest.calibration) and updates the running stream calibration state without restarting capture. - Apply patches the stream's pipeline graph calibration constants and restarts the stream in-place so calibrated pipeline nodes immediately use the solved values.
Apply currently updates calibration constants for these node ids when they exist in the stream pipeline graph:
cv:aruco:decode_quads_calibratedcv:aruco:tag_posescv:image:undistort
Color / IPA (Advanced)
When enabled, the tab includes CCM tooling:
- Pick a chart image.
- Click corners TL → TR → BR → BL.
- Solve and apply a CCM to the device.
- Generate printable color chart PNG/PDF assets directly from the tab.