builtin-programs/calibrate/load-calibration.folk
When display /disp/ has width /displayWidth/ height /displayHeight/ &\
/nobody/ claims a calibration from camera /cam/ to display /disp/ is /anything/ {
set warning "WARNING: Folk hasn't been calibrated!
Using default (bad) calibration."
puts stderr "calibrate: $warning"
set cx [/ $displayWidth 2.0]
Wish to draw text onto $disp with \
x $cx y [* $displayHeight 0.1] \
text $warning color red scale 40
Wish to draw text onto $disp with \
x $cx y [* $displayHeight 0.7] radians 3.14159 \
text $warning color red scale 40
}
When /nobody/ claims a calibration from camera /cam/ to display /disp/ is /anything/ {
# Fallback: if uncalibrated (_no calibrations at all_ are stored),
# create fake intrinsics and extrinsics.
When display /disp/ has width /displayWidth/ height /displayHeight/ {
Claim display $disp has intrinsics [dict create \
width $displayWidth height $displayHeight \
fx $displayWidth fy $displayWidth \
cx [/ $displayWidth 2.0] cy [/ $displayHeight 2.0] \
s 0 k1 0 k2 0 p1 0 p2 0]
}
When camera /cam/ has width /cameraWidth/ height /cameraHeight/ {
Claim camera $cam has intrinsics [dict create \
width $cameraWidth height $cameraHeight \
fx $cameraWidth fy $cameraWidth \
cx [/ $cameraWidth 2.0] cy [/ $cameraHeight 2.0] \
s 0 k1 0 k2 0 p1 0 p2 0]
}
When display /disp/ has width /any/ height /any/ &\
camera /cam/ has width /any/ height /any/ {
Claim camera $cam to display $disp has extrinsics [dict create \
R {{1 0 0} {0 1 0} {0 0 1}} \
t {0 0 0}]
}
}
When a calibration from camera /camera/ to display /display/ is /calibration/ {
puts "\n\n====NEW CALIBRATION ([string range $calibration 0 100])=====\n\n"
# Backfill p1/p2 for calibrations saved before tangential
# distortion support was added.
foreach device {camera projector} {
foreach key {p1 p2} {
if {![dict exists $calibration $device intrinsics $key]} {
dict set calibration $device intrinsics $key 0
}
}
}
Claim camera $camera has intrinsics \
[dict get $calibration camera intrinsics]
Claim display $display has intrinsics \
[dict get $calibration projector intrinsics]
set extrinsics [dict create \
R [dict get $calibration R_cameraToProjector] \
t [dict get $calibration t_cameraToProjector]]
Claim camera $camera to display $display has extrinsics $extrinsics
}
When the collected results for {/somebody/ claims the default program geometry is /geom/} are /results/ {
set defaultGeometry {tagSize 30mm top 28mm right 28mm left 157mm bottom 80mm}
set shouldClaim false
if {[llength $results] == 0 ||
[llength $results] == 1 && [dict get [lindex $results 0] geom] == $defaultGeometry} {
Claim the default program geometry is $defaultGeometry
}
}