Ports the pipeline from the C++ reference in ../scene-actor-extraction (MIT, same author). End to end on real portraits it separates identities the way the reference's fitted calibration says it should: 0.596 between distinct photographs of one person, 0.05 between different people, either side of MBF's 0.267 boundary. Three things are structural rather than incidental: Aligned112 can only be built by align::warp, so Embedder::embed cannot be handed an unaligned bounding-box crop. That mistake yields 512 plausible unit-norm numbers and no error, so the type system refuses it instead. Embedding carries its ModelId and cosine() returns None across models, because a cross-model similarity is the one mistake that produces plausible garbage rather than a failure. The model-free half -- alignment, embedding arithmetic, f16 storage -- sits outside the inference feature and is covered by 11 tests that need no weights on the machine. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
48 lines
1.6 KiB
TOML
48 lines
1.6 KiB
TOML
[package]
|
|
name = "dr-face"
|
|
version.workspace = true
|
|
edition.workspace = true
|
|
rust-version.workspace = true
|
|
license.workspace = true
|
|
|
|
[dependencies]
|
|
thiserror.workspace = true
|
|
log.workspace = true
|
|
|
|
# Inference. `ort` is the API; **tract is the engine** — see the workspace
|
|
# manifest, and docs/faces.md §3, for why the C++ ONNX Runtime is not linked.
|
|
ort = { workspace = true, optional = true }
|
|
ort-tract = { workspace = true, optional = true }
|
|
ndarray = { workspace = true, optional = true }
|
|
|
|
[dev-dependencies]
|
|
zune-jpeg.workspace = true
|
|
env_logger.workspace = true
|
|
# The M1 probe drives `ort` directly so it can print the raw load error.
|
|
ort = { workspace = true }
|
|
ort-tract = { workspace = true }
|
|
|
|
[[example]]
|
|
name = "probe"
|
|
required-features = ["inference"]
|
|
|
|
[[example]]
|
|
name = "faces"
|
|
required-features = ["inference"]
|
|
|
|
[features]
|
|
# Nothing on by default, and in particular **no `embedded-model`**: the weights
|
|
# are not a build input and never become one (docs/faces.md §2.2). A feature
|
|
# flag that *could* embed them is a flag someone eventually sets in a packaging
|
|
# script, and the InsightFace grant does not survive that.
|
|
default = []
|
|
|
|
# The ONNX runtime, and the two stages that need it.
|
|
#
|
|
# Separable because the accuracy of this subsystem lives in `calibrate` and
|
|
# `cluster`, which are arithmetic over embeddings with no model in them. They
|
|
# must be testable against synthetic embeddings on a machine with no weights on
|
|
# it — a test suite that needs a research-licensed download is a test suite
|
|
# that does not run in CI.
|
|
inference = ["dep:ort", "dep:ort-tract", "dep:ndarray"]
|