Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -110,7 +110,7 @@ class MlKitEkspresiAnalyzer(private val onExpressionDetected: (String) -> Unit)
mouthOpen && smilingProbability < 0.3f && face.headEulerAngleZ > 15 -> "kaget dan miringkan kepala ke kanan"
mouthOpen && smilingProbability < 0.3f && face.headEulerAngleZ < -15 -> "kaget dan miringkan kepala ke kiri"
mouthOpen && smilingProbability < 0.3f &&
leftEyeOpenProbability > 0.6f && rightEyeOpenProbability > 0.6f -> "kaget"
leftEyeOpenProbability > 0.6f && rightEyeOpenProbability > 0.6f -> "kaget (buka mulut)"
smilingProbability > 0.5 && pitchAngle > 15 -> "senyum dan angkat kepala"
rightEyeOpenProbability < 0.4 && face.headEulerAngleZ > 15 -> "tutup mata kiri dan miringkan kepala ke kanan"
smilingProbability > 0.5 && eyeClosed -> "senyum dan kedip"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -72,11 +72,12 @@ class FaceProcessorActivity : AppCompatActivity() {
private lateinit var binding: ActivityCaptureFaceBinding
private lateinit var cameraEkspresi: CameraEkspresi
private lateinit var ekspresiRecognizer: EkspresiRecognizer
private val EMBEDDING_THRESHOLD = 0.8f
private val EMBEDDING_THRESHOLD = 0.6f
private lateinit var profileViewModel: ProfileViewModel
private var expressionTimeoutHandler: Handler? = null
private var expressionTimeoutRunnable: Runnable? = null
private val MAX_EXPRESSION_TIME_MS = 7000L
private val STATIC_EXPRESSION_TIME_MS = 5000L
private var isCameraChanging = false
private var pausedExpression: String? = null
private var pausedIndex = 0
Expand All @@ -86,7 +87,16 @@ class FaceProcessorActivity : AppCompatActivity() {
"senyum dan angkat kepala", "kaget dan miringkan kepala ke kanan",
"senyum dan kedip", "senyum dan miringkan kepala ke kiri",
"senyum dan miringkan kepala ke kanan", "kaget dan miringkan kepala ke kiri",
"kaget", "hadap kiri",
"kaget (buka mulut)", "hadap kiri",
"hadap kanan", "angkat kepala",
"tunduk (angguk)", "kedip dua kali",
"miringkan kepala ke kanan", "miringkan kepala ke kiri",
"senyum", "kedip",
"tutup mata kanan", "tutup mata kiri"
)

private val staticExpressions = listOf(
"kaget (buka mulut)", "hadap kiri",
"hadap kanan", "angkat kepala",
"tunduk (angguk)", "kedip dua kali",
"miringkan kepala ke kanan", "miringkan kepala ke kiri",
Expand Down Expand Up @@ -404,7 +414,6 @@ class FaceProcessorActivity : AppCompatActivity() {
"""Keren kamu berhasil menyelesaikan tantangan, sebelum verifikasi wajah pastikan:
- Rapikan rambut
- Ekspresi datar
- Tidak memakai kacamata
- Wajah agak dekat kamera
""".trimIndent(),
"Verifikasi wajah",
Expand Down Expand Up @@ -501,7 +510,7 @@ class FaceProcessorActivity : AppCompatActivity() {
private fun startFaceVerification() {
Log.d("FaceVerification", "Mulai verifikasi wajah (5 kali auto capture)...")
runOnUiThread {
binding.expressionCommandText.text = "Tolong tahan posisi HP dan wajah Anda dengan ekspresi datar, tanpa memakai kacamata, selama beberapa detik."
binding.expressionCommandText.text = "Tolong tahan posisi HP dan wajah Anda dengan ekspresi datar, selama beberapa detik."
binding.imageViewPreview.visibility = View.GONE
binding.previewView.visibility = View.VISIBLE
binding.verifyButton.visibility = View.GONE
Expand Down Expand Up @@ -672,7 +681,11 @@ class FaceProcessorActivity : AppCompatActivity() {
private fun startExpressionTimeout() {
cancelExpressionTimeout()
// if (currentIndex == 0) return

val timeout = if (selectedExpressions[currentIndex] in staticExpressions) {
STATIC_EXPRESSION_TIME_MS // 3 detik untuk ekspresi statis
} else {
MAX_EXPRESSION_TIME_MS // 7 detik untuk ekspresi dinamis
}
expressionTimeoutHandler = Handler(Looper.getMainLooper())
expressionTimeoutRunnable = Runnable {
timeoutWarningCount++
Expand Down Expand Up @@ -701,7 +714,7 @@ class FaceProcessorActivity : AppCompatActivity() {
}
}
}
expressionTimeoutHandler?.postDelayed(expressionTimeoutRunnable!!, MAX_EXPRESSION_TIME_MS)
expressionTimeoutHandler?.postDelayed(expressionTimeoutRunnable!!, timeout)
Log.d("FaceProcessor", "Timeout dimulai untuk tahap ekspresi ke-${currentIndex + 1}")
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -313,7 +313,6 @@ class Simpanwajah : AppCompatActivity(), CameraManager.OnTakeImageCallback {
findViewById<TextView>(R.id.tvMessage).text = """
- Rapikan rambut
- Ekspresi datar
- Tidak memakai kacamata
- Wajah agak dekat kamera
""".trimIndent()

Expand Down
Binary file modified Backend/mfa_presensi.db
Binary file not shown.