在我的Android应用程序中使用Google ml-kit进行人脸检测。
我还必须检测眨眼和微笑的活性。
下面是函数:
fun detectLiveness(image: Bitmap, face: Face): Float? {
val aligned = this.faceSquaredAligner.computeImagePatch(face, image, 224)
val token = this.faceSquaredAligner.computeImagePatch(face, image, 448)
val squareData = prepareImage(aligned, 1)
val tokenData = prepareImage(token, 1)
var score: Float? = null
if (face.rightEyeOpenProbability != null) {
Toast.makeText(context,"got it", Toast.LENGTH_SHORT).show()
}else{
Toast.makeText(context,"Right Eye null", Toast.LENGTH_SHORT).show()
}
this.env.use {
var squareTensor = OnnxTensor.createTensor(
this.env, squareData,
this.getTensorShape(aligned)
)
val tokenTensor = OnnxTensor.createTensor(
this.env, tokenData,
this.getTensorShape(token)
)
squareTensor.use {
tokenTensor.use {
var inputs = mutableMapOf("input.1" to tokenTensor, "input.207" to squareTensor)
var outputs = mutableSetOf("718")
val output = this.session.run(inputs, outputs, OrtSession.RunOptions())
output.use {
@Suppress("UNCHECKED_CAST")
val rawOutput = ((output?.get(0)?.value) as Array<FloatArray>)[0]
score = softMax(rawOutput)[0]
}
}
}
}
return score
}
其中我检查了rightEyeOpenProbability,但结果为null。
我们有'OnnxruntimeLivenessDetector'类,它有一个名为'detectLiveness()'的方法,该方法返回score(float value)。
在这两个地方,我试图检查右眼,左眼和微笑的概率,但没有得到任何价值。
我做错了什么?或者有什么不同的方法来检测活性i。即用户的眨眼和微笑值?先谢了。
1条答案
按热度按时间qlfbtfca1#
几天后就解决了,这只是一个愚蠢的错误。以下是设置人脸检测选项的方法,您可以检查:
你可以看到他们的我已经评论了
val classificationMode = FaceDetectorOptions.CLASSIFICATION_MODE_NONE
,而不是使用val classificationMode = FaceDetectorOptions.CLASSIFICATION_MODE_ALL
,它只是解决了这个问题。