1/* ARCHITECTURE §6: ambang Gesture Snap di satu berkas konstanta. Nilai awal
2 PRD §7.2; penyetelan dari uji pakai mengubah berkas ini saja. */
3
4export const GESTURE_SCORE_THRESHOLD = 0.6
5export const HOLD_DURATION_MS = 800 // GS-02
6export const CAPTURE_COOLDOWN_MS = 1500 // GS-04
7export const DETECT_INTERVAL_MS = 80 // sekitar 12,5 inferensi per detik (lantai PRD: 10)
8export const DETECT_FRAME_WIDTH = 320 // bingkai diperkecil (ARCHITECTURE §9)
9
10const GESTURE_ACTIONS = {
11 snap: "Victory",
12 retake: "Open_Palm", // GS-08, P1
13 proceed: "Thumb_Up", // GS-09, P1
14} as const
15
16export type GestureAction = keyof typeof GESTURE_ACTIONS
17
18/** Kebalikan `GESTURE_ACTIONS`: kategori MediaPipe ke aksi produk. */
19export const ACTION_BY_CATEGORY: Record<string, GestureAction> = Object.fromEntries(
20 Object.entries(GESTURE_ACTIONS).map(([action, category]) => [
21 category,
22 action as GestureAction,
23 ])
24)
25