processCameraImage method
Future<Face?>
processCameraImage(})
stabilityCount Number of continuous steady shots required.
eyeOpenProbability Probability of eyes being open.
Implementation
Future<Face?> processCameraImage(
InputImage inputImage, {
required Size screenSize,
required Size regionSize,
int stabilityCount = 10,
double eyeOpenProbability = 0.75,
Function(FaceStatus)? onFaceLiveStatusChange,
}) async {
final List<Face> faces = await _faceDetector.processImage(inputImage);
if (faces.isNotEmpty && faces.length == 1) {
Face face = faces.first;
/// Complete organ and part check.
bool isLandmarks = _checkLandmarks(face);
var isFaceRegionInside = _isFaceRegionInside(
boundingBox: face.boundingBox,
screenSize: screenSize,
cameraSize: inputImage.metadata!.size,
regionSize: regionSize);
if (isLandmarks && isFaceRegionInside) {
_tempFaces.add(face);
if (_tempFaces.length > stabilityCount) {
if ((face.leftEyeOpenProbability ?? 0.0) > eyeOpenProbability &&
(face.rightEyeOpenProbability ?? 0.0) > eyeOpenProbability) {
_faceDetector.close();
_tempFaces.clear();
onFaceLiveStatusChange?.call(FaceStatus.finish);
return face;
}
}
if (_tempFaces.isNotEmpty) {
onFaceLiveStatusChange?.call(FaceStatus.inside);
}
}
} else {
_tempFaces.clear();
onFaceLiveStatusChange?.call(FaceStatus.outside);
}
return null;
}