ML Kit
ML Kit의 얼굴 인식 API를 사용하면 이미지 속 얼굴을 인식하고 주요 얼굴 특징을 식별하며 인식된 얼굴에서 윤곽을 가져올 수 있습니다.
얼굴 인식 | ML Kit | Google for Developers
이 페이지는 Cloud Translation API를 통해 번역되었습니다. Switch to English 얼굴 인식 컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요. ML Kit의 얼굴 인식 API를 사용하
developers.google.com
ML Kit 구현하기
1. build.gradle에 의존성 추가
ML Kit를 사용하기 위해서 build.gradle에 ML Kit 라이브러리를 추가합니다.
implementation 'com.google.mlkit:face-detection:16.1.5'
2. Face Detector 객체 생성 및 옵션 설정
FaceDetectorOptions 객체를 사용하여 다양한 설정을 지정하고 detector 객체를 생성합니다.
- setPerformanceMode (성능)
- setLandmarkMode (랜드마크)
- setContourMode (윤곽선)
- setClassificationMode (표정)
- setMinFaceSize (최소 얼굴 크기)
- enableTracking (얼굴에 ID 할당)
private val options = FaceDetectorOptions.Builder()
.setPerformanceMode(FaceDetectorOptions.PERFORMANCE_MODE_ACCURATE)
.setContourMode(FaceDetectorOptions.CONTOUR_MODE_ALL)
.setClassificationMode(FaceDetectorOptions.CLASSIFICATION_MODE_ALL)
.setMinFaceSize(0.4f)
.build()
private val detector = FaceDetection.getClient(options)
3. Input Image 준비 및 처리
Bitmap, Media.Image, ByteBuffer, 바이트 배열, 기기의 파일 등을 통해서 InputImage 객체를 만듭니다.
그 다음, InputImage 객체를 process 메서드에 전달하여 이미지를 처리합니다.
override fun analyze(imageProxy: ImageProxy) {
val mediaImage = InputImage.fromMediaImage(
imageProxy.image as Image,
imageProxy.imageInfo.rotationDegrees
)
detector.process(mediaImage)
.addOnSuccessListener(successListener)
.addOnFailureListener(failureListener)
.addOnCompleteListener {
imageProxy.close()
}
}
4. 감지된 얼굴에 관한 정보 추출
얼굴 인식이 성공하면 Face 객체 목록이 성공 리스너에 전달됩니다.
각 Face 객체는 이미지에서 감지된 얼굴을 나타냅니다.
얼굴별로 입력 이미지의 경계 좌표를 얻을 수 있습니다.
val rect = face.boundingBox
val boxWidth = rect.right - rect.left
val boxHeight = rect.bottom - rect.top
val left = rect.right.translateX() - (boxWidth / 2)
val top = rect.top.translateY() - (boxHeight / 2)
val right = rect.left.translateX() + (boxWidth / 2)
val bottom = rect.bottom.translateY()
val width = right - left
val height = bottom - top
val centerX = left + width / 2
val centerY = top + height / 2
5. ImageAnalysis를 사용하여 얼굴 검출
위의 글을 확장하여 CameraX를 통해 얼굴 검출을 할 수 있습니다.
카메라 이미지를 실시간으로 받아오기 위해 ImageAnalysis.Analyzer를 사용합니다.
먼저, 위의 2번~4번이 담긴 FaceAnalyzer로 imageAnalyzer를 설정합니다.
그 다음, cameraProvider의 bindToLifecycle()에 imageAnalyzer를 연결합니다.
private var cameraExecutor = Executors.newSingleThreadExecutor()
fun startFaceDetect() {
val cameraProvider = cameraProviderFuture.get()
val faceAnalyzer = FaceAnalyzer(
(context as ComponentActivity).lifecycle,
previewView,
listener
)
val imageAnalyzer = ImageAnalysis.Builder()
.build()
.also {
it.setAnalyzer(
cameraExecutor,
faceAnalyzer
)
}
try {
cameraProvider.unbindAll()
cameraProvider.bindToLifecycle(
context as LifecycleOwner,
cameraSelector,
preview,
imageAnalyzer,
)
} catch (e: Exception) {
Log.e("Camera", "binding failed", e)
}
}
'안드로이드 > 활용' 카테고리의 다른 글
[Android] SMS Retriever API를 통해 SMS 자동으로 읽어오기 (0) | 2023.10.11 |
---|---|
[Android] BindingAdapter 사용하기 (0) | 2023.10.09 |
[Android] CameraX 사용하기 (0) | 2023.10.06 |
[Android] ExoPlayer 사용하기 (0) | 2023.10.05 |
[Android] Cloud Firestore와 Cloud Storage 사용하기 (0) | 2023.09.29 |