builtin-programs/web/apriltag-frame.folk
When the jpeg library is /jpegLib/ {
Wish the web server handles route {/apriltag-frame} with handler {
set frames [Query! camera /cam/ has frame /im/ at timestamp /ts/]
set frame [lindex $frames end]
dict with frame {
StatementAcquire! $__ref
set filename "/tmp/web-image-frame.jpg"
$jpegLib saveAsJpeg $im $filename
set fsize [file size $filename]
set fd [open $filename r]
fconfigure $fd -translation binary
set imageData [read $fd $fsize]
close $fd
set tags [Query! tag /id/ has detection /det/ on camera $cam \
at timestamp $ts]
puts "Tags: $tags"
StatementRelease! $__ref
}
package require base64
html [subst {
<html>
<body>
<img src="data:image/png;base64,[binary encode base64 $imageData]"
style="position:absolute;top:0;left:0">
<svg width="100%" height="100%" style="position:absolute;top:0;left:0;pointer-events:none;">
[join [lmap tag $tags {
set points [dict get $tag det p]
set coords [lmap point $points {
format "%g,%g" [lindex $point 0] [lindex $point 1]
}]
lappend coords [lindex $coords 0]
set id [dict get $tag det id]
subst {
<polyline points="$coords" fill="none" stroke="green" stroke-width="3" />
<text x="[lindex $points 0 0]" y="[lindex $points 0 1]" fill="green" font-size="12">${id}</text>
}
}] "\n"]
</svg>
</body>
</html>
}]
}
}