evaluate method
FaceGateResult
evaluate({
- required FaceBoundingBox boundingBox,
- required int frameWidth,
- required int frameHeight,
- int rotation = 0,
Evaluates a boundingBox against camera frame dimensions (frameWidth, frameHeight).
Implementation
FaceGateResult evaluate({
required FaceBoundingBox boundingBox,
required int frameWidth,
required int frameHeight,
int rotation = 0,
}) {
if (frameWidth <= 0 || frameHeight <= 0) {
return const FaceGateResult(
isValid: false,
status: LivenessStatus.tooFar,
faceAreaRatio: 0.0,
aspectRatio: 1.0,
);
}
final frameArea = (frameWidth * frameHeight).toDouble();
final faceArea = (boundingBox.width * boundingBox.height).abs();
final faceAreaRatio = (faceArea / frameArea).clamp(0.0, 1.0);
final normRotation = ((rotation % 360) + 360) % 360;
final isTransposed = normRotation == 90 || normRotation == 270;
final uprightWidth = isTransposed ? boundingBox.height : boundingBox.width;
final uprightHeight = isTransposed ? boundingBox.width : boundingBox.height;
final safeHeight = uprightHeight > 0 ? uprightHeight : 1.0;
final aspectRatio = uprightWidth / safeHeight;
if (faceAreaRatio < minFaceAreaRatio) {
return FaceGateResult(
isValid: false,
status: LivenessStatus.tooFar,
faceAreaRatio: faceAreaRatio,
aspectRatio: aspectRatio,
);
}
if (faceAreaRatio > maxFaceAreaRatio) {
return FaceGateResult(
isValid: false,
status: LivenessStatus.tooClose,
faceAreaRatio: faceAreaRatio,
aspectRatio: aspectRatio,
);
}
if (aspectRatio < minAspectRatio || aspectRatio > maxAspectRatio) {
return FaceGateResult(
isValid: false,
status: LivenessStatus.invalidAspectRatio,
faceAreaRatio: faceAreaRatio,
aspectRatio: aspectRatio,
);
}
return FaceGateResult.valid(
faceAreaRatio: faceAreaRatio,
aspectRatio: aspectRatio,
);
}