Move the panorama keypoint detector onto the engine, and probe with a detector

XFeat's two exports are a Keypoints role now; the crate no longer names
tract, and the app compiles TensorRT engines for both ahead of the
first merge. The probe picks the smallest *detector* rather than the
smallest file: the tablet's first run chose the 112 KB eye classifier,
which has no int8 form, and reported the Hexagon as failed for want of
one.
This commit is contained in:
2026-09-19 16:05:08 +02:00
parent 76bc5652d7
commit 7a436e2549
10 changed files with 157 additions and 130 deletions
+6 -5
View File
@@ -12,11 +12,12 @@ thiserror.workspace = true
log.workspace = true
# Inference for the learned keypoint detector, on the same footing as
# `dr-segment`: `ort` is the API, tract is the engine, and both are optional
# so that the geometry — matching, the rotation solve, the projections — is a
# dependency-free crate that tests without a model.
# `dr-segment`: `ort` is the API, `dr-inference-engine` decides what runs
# it (docs/inference.md), and both are optional so that the geometry —
# matching, the rotation solve, the projections — is a dependency-free crate
# that tests without a model.
ort = { workspace = true, optional = true }
ort-tract = { workspace = true, optional = true }
dr-inference-engine = { workspace = true, optional = true }
ndarray = { workspace = true, optional = true }
[dev-dependencies]
@@ -30,7 +31,7 @@ default = ["xfeat", "embedded-model"]
# The XFeat detector (FR-MRG-8). Off, the crate has no model and no runtime,
# and `Detector` has no implementation — a build that only wants the geometry.
xfeat = ["dep:ort", "dep:ort-tract", "dep:ndarray"]
xfeat = ["dep:ort", "dep:dr-inference-engine", "dep:ndarray"]
# Compile the weights into the binary, for the same reason `dr-segment` does:
# Android hands the app no path to read a model from (ARCH §6.9).