Skip to content

Commit

Permalink
#11 안되나요
Browse files Browse the repository at this point in the history
  • Loading branch information
comye1 committed Mar 1, 2022
1 parent 3876b38 commit beaac8a
Show file tree
Hide file tree
Showing 2 changed files with 80 additions and 12 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
package com.comye1.dontsleepdriver.analyzer

import android.content.Context
import android.graphics.*
import android.media.Image
import android.util.Log
import androidx.camera.core.ImageAnalysis
import androidx.camera.core.ImageProxy
import com.comye1.dontsleepdriver.ml.SleepModel
import org.tensorflow.lite.support.image.TensorImage
import java.io.ByteArrayOutputStream


@androidx.camera.core.ExperimentalGetImage
class SleepAnalyzer(context: Context) : ImageAnalysis.Analyzer {

private val model: SleepModel by lazy {
SleepModel.newInstance(context)
}

override fun analyze(image: ImageProxy) {
Log.d("SleepAnalyzer", "image : ${image.image}")
if (image.image != null) {
Log.d("SleepAnalyzer", "image : ${image.image}")
val tfImage = TensorImage.fromBitmap(image.image!!.toBitmap())
//


// Log.d("SleepAnalyzer", "model : ${model is SleepModel}")
val output = model.process(tfImage.tensorBuffer)
Log.d("SleepAnalyzer", output.toString())

Log.d("SleepAnalyzer", tfImage.toString())

image.close()
}
}

private fun Image.toBitmap(): Bitmap {
val yBuffer = planes[0].buffer // Y
val vuBuffer = planes[2].buffer // VU

val ySize = yBuffer.remaining()
val vuSize = vuBuffer.remaining()

val nv21 = ByteArray(ySize + vuSize)

yBuffer.get(nv21, 0, ySize)
vuBuffer.get(nv21, ySize, vuSize)

val yuvImage = YuvImage(nv21, ImageFormat.NV21, this.width, this.height, null)
val out = ByteArrayOutputStream()
yuvImage.compressToJpeg(Rect(0, 0, yuvImage.width, yuvImage.height), 50, out)
val imageBytes = out.toByteArray()
return BitmapFactory.decodeByteArray(imageBytes, 0, imageBytes.size)
}
}

34 changes: 22 additions & 12 deletions app/src/main/java/com/comye1/dontsleepdriver/main/CameraView.kt
Original file line number Diff line number Diff line change
Expand Up @@ -70,8 +70,6 @@ fun DetectionView(
val previewView = PreviewView(ctx)
cameraProviderFuture.addListener({

val cameraProvider: ProcessCameraProvider = cameraProviderFuture.get()

// preview = ImageAnalysis.Builder()
// .setTargetResolution(Size(224, 224))

Expand All @@ -82,20 +80,32 @@ fun DetectionView(
val imageAnalysis = ImageAnalysis.Builder()
.setBackpressureStrategy(ImageAnalysis.STRATEGY_KEEP_ONLY_LATEST)
.build()
.also { imageAnalysis ->
imageAnalysis.setAnalyzer(executor, analyzer)
.also {
it.setAnalyzer(executor, SleepAnalyzer(ctx))
}
// .apply {
// setAnalyzer(executor, analyzer)
// }

val cameraSelector = CameraSelector.Builder()
.requireLensFacing(CameraSelector.LENS_FACING_BACK)
.build()
cameraProvider.unbindAll()
cameraProvider.bindToLifecycle(
lifecycleOwner,
cameraSelector,
imageAnalysis,
preview
)
}, executor)

try {
cameraProvider.unbindAll()
cameraProvider.bindToLifecycle(
lifecycleOwner,
cameraSelector,
preview,
imageAnalysis
)

} catch (exception: Exception) {
Log.d("CameraView", "use case binding failed $exception")
}

}, ContextCompat.getMainExecutor(ctx))

preview = Preview.Builder().build().also {
it.setSurfaceProvider(previewView.surfaceProvider)
}
Expand Down

0 comments on commit beaac8a

Please sign in to comment.