flutter_liveness
Lightweight on-device face liveness detection for Flutter, powered by MobileNetV2 from open liveness research.
β¨ Features
- On-device liveness detection β no server required
- Ships with pre-trained MobileNetV2 model
- Uses TensorFlow Lite β optimized for real-time
- Simple API β plug & play
- Blur & clarity detector (Laplacian filter)
π§ Model Information
This package uses a pre-trained MobileNetV2 face liveness model trained as described in:
Using MobileNetV2 (Zawar, et al., 2023)
From the open-source project: biometric-technologies/liveness-detection-model
Model licensed under MIT, included with attribution.
Class meaning:
- 0 = real
- 1 = spoof
π Usage
Initialize
import 'package:flutter_liveness/flutter_liveness.dart';
import 'package:image/image.dart' as imglib;
late final FlutterLiveness liveness;
Future<void> initLiveness() async {
liveness = await FlutterLiveness.create();
}
Analyze a face image
Future<void> check(Uint8List faceBytes) async {
final img = imglib.decodeImage(faceBytes);
if (img == null) throw Exception("Invalid image");
final result = await liveness.analyze(img);
print("Live: ${result.isLive}");
print("Score (P(spoof)): ${result.score}");
print("Laplacian: ${result.laplacian}");
print("Inference time: ${result.time.inMilliseconds} ms");
}
Cleanup
@override
void dispose() {
liveness.dispose();
super.dispose();
}
π Output Example
Live: true
Score (P(spoof)): 0.023
Clarity (laplacian): 1812
Inference time: 29 ms
βοΈ Settings
You can tune thresholds:
final liveness = await FlutterLiveness.create(
options: LivenessOptions(
threshold: 0.5, // sigmoid cutoff
laplacianThreshold: 1000, // blur block
),
);
β Usage Notes
- Feed cropped face images (not full camera frames)
- Calls are fast (~20β35ms on modern devices)
- Throttle analysis: ~3β5 FPS recommended
- Do not consider this as the only security mechanism for KYC/financial apps β use it as one signal in a trust pipeline
π± Integration Tips
- Use camera plugin to stream frames
- Detect faces with MLKit or any detector
- Crop β send to liveness.analyze()
- Combine with:
- Face presence
- Eye blink / movement (optional future enhancement)
- Anti-tampering / screen detection
π Disclaimer
This library provides liveness estimation, not identity verification. Use responsibly and evaluate for your use-case security requirements.
π€ Acknowledgements
- TensorFlow Lite team
- Biometric Technologies OΓ for the model & research
- Flutter community