Skip to content

Instantly share code, notes, and snippets.

View qichuan's full-sized avatar

Qichuan (Sean) ZHANG qichuan

View GitHub Profile
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<com.otaliastudios.cameraview.CameraView
android:id="@+id/camera_view"
override fun onCreate(savedInstanceState: Bundle?) {
checkAndRequestCameraPermission()
}
private fun checkAndRequestCameraPermission() {
if (ActivityCompat.checkSelfPermission(this, android.Manifest.permission.CAMERA)
!= PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(this, arrayOf(android.Manifest.permission.CAMERA),
PERMISION_REQUEST_CODE)
implementation 'com.google.firebase:firebase-core:16.0.1'
implementation 'com.google.firebase:firebase-ml-vision:16.0.0'
implementation "android.arch.lifecycle:extensions:1.1.1"
implementation 'com.otaliastudios:cameraview:1.5.1'
override fun onRequestPermissionsResult(requestCode: Int, permissions: Array<out String>, grantResults: IntArray) {
if (requestCode == PERMISION_REQUEST_CODE) {
if (android.Manifest.permission.CAMERA == permissions[0] &&
grantResults[0] == PackageManager.PERMISSION_GRANTED) {
startFaceProcessor()
}
}
super.onRequestPermissionsResult(requestCode, permissions, grantResults)
}
lifecycle.addObserver(MainActivityLifecycleObserver(camera_view))
//MainActivityLifecycleObserver.class
class MainActivityLifecycleObserver(private val cameraView: CameraView) : LifecycleObserver {
@OnLifecycleEvent(Lifecycle.Event.ON_RESUME)
fun startCamera() {
cameraView.start()
}
cameraView.addFrameProcessor { frame ->
// Processes frame here
}
// Initialize the face detection option, and we need all the face landmarks
private val options = FirebaseVisionFaceDetectorOptions.Builder()
.setLandmarkType(FirebaseVisionFaceDetectorOptions.ALL_LANDMARKS)
.build()
// Obtain the FirebaseVisionFaceDetector instance
private val detector = FirebaseVision.getInstance().getVisionFaceDetector(options)
// Build a image meta data object
val metadata = FirebaseVisionImageMetadata.Builder()
.setFormat(FirebaseVisionImageMetadata.IMAGE_FORMAT_NV21)
.setWidth(frame.size.width)
.setHeight(frame.size.height)
.setRotation(rotation)
.build()
// Create vision image object, and it will be consumed by FirebaseVisionFaceDetector
// for face detection
val firebaseVisionImage = FirebaseVisionImage.fromByteArray(frame.data, metadata)
// Perform face detection
detector.detectInImage(firebaseVisionImage).addOnSuccessListener { faceList ->
if (faceList.size > 0) {
// We just need the first face
val face = faceList[0]
// Draw the bitmaps on the detected faces
}
}