A highly customizable Flutter package for face liveness detection with configurable challenge types and auto-capture. Detect real human presence — not a photo, video, or mask — using challenges like smile, blink, and head turns, with animated visual feedback and built-in photo capture on success.
Features
- Real-time face detection via Google ML Kit
- Configurable liveness rule set: smile, blink, look left/right, tilt up/down
- Animated dotted-circle progress indicator around the face frame
- Auto face-centering guidance
- Captures a photo after all liveness rules are passed
- Customizable colors, sizes, and UI overlays
Platform Support
| Android | iOS |
|---|---|
| ✅ | ✅ |
Permissions
Add the following to your platform manifests:
Android — android/app/src/main/AndroidManifest.xml:
<uses-permission android:name="android.permission.CAMERA" />
iOS — ios/Runner/Info.plist:
<key>NSCameraUsageDescription</key>
<string>This app uses the camera for liveness detection.</string>
Installation
Add to your pubspec.yaml:
dependencies:
liveness_capture: ^0.0.1
Then run:
flutter pub get
Usage
import 'package:liveness_capture/liveness_capture.dart';
FaceDetectorScreen(
// Called each time a liveness rule is completed
onRulesetCompleted: (ruleset) {
print('Completed: $ruleset');
},
// Called when all rules pass; provides the CameraController for capture
onValidationDone: (controller) {
return ElevatedButton(
onPressed: () async {
final photo = await controller?.takePicture();
// handle photo
},
child: const Text('Capture'),
);
},
// Builder for the overlay shown during liveness checks
child: ({required state, required countdown, required hasFace}) {
return Text(
hasFace ? 'Hold still... $countdown' : 'Place your face in frame',
style: const TextStyle(color: Colors.white, fontSize: 18),
);
},
);
Customisation
| Parameter | Type | Description |
|---|---|---|
ruleset |
List<Rulesets> |
Ordered list of liveness checks to perform |
progressColor |
Color |
Inactive dot color |
activeProgressColor |
Color |
Active/completed dot color |
totalDots |
int |
Number of dots in the circle |
dotRadius |
double |
Radius of each dot |
cameraSize |
Size |
Size of the camera preview frame |
pauseDurationInSeconds |
int |
Pause between ruleset steps |
backgroundColor |
Color? |
Background color of the detector |
contextPadding |
EdgeInsetsGeometry? |
Padding around the content |
Available Rulesets
enum Rulesets { toLeft, toRight, blink, tiltUp, tiltDown, smiling, normal }
License
MIT
Libraries
- liveness_capture
- A Flutter package for face liveness detection.