Не могу обнаружить лица с помощью ML Kit на Android с помощью CameraView
Я пытаюсь запустить этот пример обнаружения лиц с помощью Firebase MLkit на Android. Вместо встроенного в CameraView я использую библиотеку CameraView. При запуске кода в журналах говорится: Faces: [], поэтому лица не были найдены в камере.
код:
camera = findViewById<CameraView>(R.id.camera)
camera.setLifecycleOwner(this)
val realTimeOpts = FirebaseVisionFaceDetectorOptions.Builder()
.setContourMode(FirebaseVisionFaceDetectorOptions.ALL_CONTOURS)
.build()
FirebaseApp.initializeApp(this);
camera.addFrameProcessor { frame ->
val data = frame.data
val rotation = frame.rotation
val metadata = FirebaseVisionImageMetadata.Builder()
.setWidth(480) // 480x360 is typically sufficient for
.setHeight(360) // image recognition
.setFormat(FirebaseVisionImageMetadata.IMAGE_FORMAT_YV12)
.setRotation(3)
.build()
val image = FirebaseVisionImage.fromByteArray(data, metadata)
val detector = FirebaseVision.getInstance()
.getVisionFaceDetector(realTimeOpts)
val result = detector.detectInImage(image)
.addOnSuccessListener { faces ->
// Task completed successfully
// ...
Log.e("Faces",faces.toString())
for (face in faces) {
val bounds = face.boundingBox
val rotY = face.headEulerAngleY // Head is rotated to the right rotY degrees
val rotZ = face.headEulerAngleZ // Head is tilted sideways rotZ degrees
// If landmark detection was enabled (mouth, ears, eyes, cheeks, and
// nose available):
val leftEar = face.getLandmark(FirebaseVisionFaceLandmark.LEFT_EAR)
leftEar?.let {
val leftEarPos = leftEar.position
}
// If contour detection was enabled:
val leftEyeContour = face.getContour(FirebaseVisionFaceContour.LEFT_EYE).points
val upperLipBottomContour = face.getContour(FirebaseVisionFaceContour.UPPER_LIP_BOTTOM).points
// If classification was enabled:
if (face.smilingProbability != FirebaseVisionFace.UNCOMPUTED_PROBABILITY) {
val smileProb = face.smilingProbability
}
if (face.rightEyeOpenProbability != FirebaseVisionFace.UNCOMPUTED_PROBABILITY) {
val rightEyeOpenProb = face.rightEyeOpenProbability
}
// If face tracking was enabled:
if (face.trackingId != FirebaseVisionFace.INVALID_ID) {
val id = face.trackingId
}
}
}.addOnFailureListener(
object : OnFailureListener {
override fun onFailure(e: Exception) {
// Task failed with an exception
// ...
}
})
}}
в activity_main.xml:
<com.otaliastudios.cameraview.CameraView
android:id="@+id/camera"
app:cameraFacing="front"
android:keepScreenOn="true"
android:layout_width="280dp"
android:layout_height="280dp" />
Пробовал то же самое и с фотоаппаратом, тот же результат: лица не найдены. Что мне здесь не хватает?
0 ответов
Попробуйте получить высоту и ширину из frame
программно, а не жестко их кодировать.
Думаю, проблема в значении frame.rotation. Возможно, вы можете использовать FirebaseVisionImageMetadata.ROTATION_90 для FirebaseVisionImageMetadata
Вы должны использовать "CameraSourcePreview" для проверки обнаружения найти здесь