คำแนะนำในการจดจำท่าทางสัมผัสสำหรับ Android

งานโปรแกรมรู้จำท่าทางสัมผัส MediaPipe ช่วยให้คุณจำท่าทางสัมผัสของมือได้แบบเรียลไทม์ และ แสดงผลลัพธ์การใช้มือที่จดจำได้ และจุดสังเกตของมือ มือที่ตรวจพบ วิธีการเหล่านี้จะแสดงวิธีใช้การรู้จำท่าทางสัมผัส กับแอป Android ตัวอย่างโค้ดที่อธิบายไว้ในวิธีการเหล่านี้สามารถดูได้ ใน GitHub

คุณสามารถดูการทำงานนี้โดยดูที่ เว็บเดโม สำหรับข้อมูลเพิ่มเติมเกี่ยวกับความสามารถ โมเดล และตัวเลือกการกำหนดค่า ของงานนี้ โปรดดูภาพรวม

ตัวอย่างโค้ด

โค้ดตัวอย่าง MediaPipe Tasks เป็นการใช้งานโปรแกรมรู้จำท่าทางสัมผัสแบบง่ายๆ แอปสำหรับ Android ตัวอย่างนี้ใช้กล้องบนอุปกรณ์ Android จริงเพื่อ ตรวจจับท่าทางสัมผัสของมืออย่างต่อเนื่อง และยังใช้รูปภาพและวิดีโอจาก เพื่อตรวจหาท่าทางสัมผัสแบบคงที่

คุณสามารถใช้แอปนี้เป็นจุดเริ่มต้นสำหรับแอป Android ของคุณเอง หรืออ้างอิงถึงแอปนั้น เมื่อแก้ไขแอปที่มีอยู่ โค้ดตัวอย่างโปรแกรมจดจำท่าทางสัมผัสโฮสต์อยู่ที่ GitHub

ดาวน์โหลดโค้ด

วิธีการต่อไปนี้แสดงวิธีสร้างสำเนาตัวอย่างในเครื่อง โดยใช้เครื่องมือบรรทัดคำสั่ง git

วิธีดาวน์โหลดโค้ดตัวอย่าง

  1. โคลนที่เก็บ Git โดยใช้คำสั่งต่อไปนี้
    git clone https://github.com/google-ai-edge/mediapipe-samples
    
  2. คุณสามารถกำหนดค่าอินสแตนซ์ Git ให้ใช้การชำระเงินแบบกระจัดกระจายได้ เพื่อให้คุณมีเพียงไฟล์สำหรับแอปตัวอย่างการรู้จำท่าทางสัมผัส ดังนี้
    cd mediapipe
    git sparse-checkout init --cone
    git sparse-checkout set examples/gesture_recognizer/android
    

หลังจากสร้างโค้ดตัวอย่างในเวอร์ชันในเครื่องแล้ว คุณจะนำเข้าโปรเจ็กต์ได้ ลงใน Android Studio และเรียกใช้แอป ดูวิธีการได้ที่ คู่มือการการตั้งค่าสำหรับ Android

องค์ประกอบสำคัญ

ไฟล์ต่อไปนี้มีรหัสที่สำคัญสำหรับท่าทางสัมผัสด้วยมือนี้ แอปพลิเคชันตัวอย่างการจดจำ:

  • GestureRecognizerHelper.kt เริ่มต้นระบบจดจำท่าทางสัมผัส แล้วจัดการโมเดลและมอบสิทธิ์ มากมาย
  • MainActivity.kt - นำแอปพลิเคชันไปใช้งาน รวมถึงการเรียกใช้ GestureRecognizerHelper และ GestureRecognizerResultsAdapter
  • GestureRecognizerResultsAdapter.kt แฮนเดิลและจัดรูปแบบผลลัพธ์

ตั้งค่า

ส่วนนี้จะอธิบายขั้นตอนสำคัญในการตั้งค่าสภาพแวดล้อมในการพัฒนาซอฟต์แวร์ และ โปรเจ็กต์โค้ดเพื่อใช้การรู้จำท่าทางสัมผัสโดยเฉพาะ สำหรับข้อมูลทั่วไปเกี่ยวกับ การตั้งค่าสภาพแวดล้อมในการพัฒนาซอฟต์แวร์ของคุณสำหรับการใช้งาน MediaPipe ซึ่งรวมถึง โปรดดูข้อกำหนดเวอร์ชันของแพลตฟอร์ม คู่มือการตั้งค่าสำหรับ Android

การอ้างอิง

งานการจดจำท่าทางสัมผัสจะใช้ com.google.mediapipe:tasks-vision ไลบรารี เพิ่มทรัพยากร Dependency นี้ลงในไฟล์ build.gradle ของแอป Android

dependencies {
    implementation 'com.google.mediapipe:tasks-vision:latest.release'
}

รุ่น

งานการจดจำท่าทางสัมผัส MediaPipe ต้องการแพ็กเกจโมเดลที่ผ่านการฝึกซึ่งสามารถทำงานร่วมกับ งานนี้ สำหรับข้อมูลเพิ่มเติมเกี่ยวกับโมเดลที่ผ่านการฝึกอบรมเกี่ยวกับการจดจำท่าทางสัมผัส ดูภาพรวมงานส่วนโมเดล

เลือกและดาวน์โหลดโมเดล และเก็บไว้ในไดเรกทอรีโปรเจ็กต์ของคุณ:

<dev-project-root>/src/main/assets

ระบุเส้นทางของโมเดลภายในพารามิเตอร์ ModelAssetPath ใน โค้ดตัวอย่าง มีการกำหนดโมเดลใน GestureRecognizerHelper.kt ไฟล์:

baseOptionBuilder.setModelAssetPath(MP_RECOGNIZER_TASK)

สร้างงาน

งานการรู้จำท่าทางสัมผัสของ MediaPipe ใช้ฟังก์ชัน createFromOptions() เพื่อตั้งค่า สร้างงาน ฟังก์ชัน createFromOptions() ยอมรับค่าของ ตัวเลือกการกำหนดค่า สำหรับข้อมูลเพิ่มเติมเกี่ยวกับตัวเลือกการกำหนดค่า ดูตัวเลือกการกำหนดค่า

ตัวจดจำท่าทางสัมผัสรองรับอินพุต 3 ประเภท ได้แก่ ภาพนิ่ง ไฟล์วิดีโอ และ สตรีมวิดีโอสด คุณต้องระบุโหมดการทำงานที่สอดคล้องกับ ประเภทข้อมูลอินพุตเมื่อสร้างงาน เลือกแท็บที่ตรงกับ ประเภทข้อมูลอินพุตเพื่อดูวิธีสร้างงานและเรียกใช้การอนุมาน

รูปภาพ

val baseOptionsBuilder = BaseOptions.builder().setModelAssetPath(MP_RECOGNIZER_TASK)
val baseOptions = baseOptionBuilder.build()

val optionsBuilder =
    GestureRecognizer.GestureRecognizerOptions.builder()
        .setBaseOptions(baseOptions)
        .setMinHandDetectionConfidence(minHandDetectionConfidence)
        .setMinTrackingConfidence(minHandTrackingConfidence)
        .setMinHandPresenceConfidence(minHandPresenceConfidence)
        .setRunningMode(RunningMode.IMAGE)

val options = optionsBuilder.build()
gestureRecognizer =
    GestureRecognizer.createFromOptions(context, options)
    

วิดีโอ

val baseOptionsBuilder = BaseOptions.builder().setModelAssetPath(MP_RECOGNIZER_TASK)
val baseOptions = baseOptionBuilder.build()

val optionsBuilder =
    GestureRecognizer.GestureRecognizerOptions.builder()
        .setBaseOptions(baseOptions)
        .setMinHandDetectionConfidence(minHandDetectionConfidence)
        .setMinTrackingConfidence(minHandTrackingConfidence)
        .setMinHandPresenceConfidence(minHandPresenceConfidence)
        .setRunningMode(RunningMode.VIDEO)

val options = optionsBuilder.build()
gestureRecognizer =
    GestureRecognizer.createFromOptions(context, options)
    

สตรีมแบบสด

val baseOptionsBuilder = BaseOptions.builder().setModelAssetPath(MP_RECOGNIZER_TASK)
val baseOptions = baseOptionBuilder.build()

val optionsBuilder =
    GestureRecognizer.GestureRecognizerOptions.builder()
        .setBaseOptions(baseOptions)
        .setMinHandDetectionConfidence(minHandDetectionConfidence)
        .setMinTrackingConfidence(minHandTrackingConfidence)
        .setMinHandPresenceConfidence(minHandPresenceConfidence)
        .setResultListener(this::returnLivestreamResult)
        .setErrorListener(this::returnLivestreamError)
        .setRunningMode(RunningMode.LIVE_STREAM)

val options = optionsBuilder.build()
gestureRecognizer =
    GestureRecognizer.createFromOptions(context, options)
    

การใช้โค้ดตัวอย่างโปรแกรมรู้จำท่าทางสัมผัสทำให้ผู้ใช้สามารถเปลี่ยนไปมาระหว่าง โหมดการประมวลผลข้อมูล วิธีนี้ทำให้โค้ดการสร้างงานซับซ้อนขึ้นและ อาจไม่เหมาะกับกรณีการใช้งานของคุณ คุณดูรหัสนี้ได้ใน setupGestureRecognizer() ในฟังก์ชัน GestureRecognizerHelper.kt

ตัวเลือกการกำหนดค่า

งานนี้มีตัวเลือกการกำหนดค่าต่อไปนี้สำหรับแอป Android

ชื่อตัวเลือก คำอธิบาย ช่วงค่า ค่าเริ่มต้น
runningMode ตั้งค่าโหมดการทำงานสำหรับงาน มี 3 แบบ โหมด:

รูปภาพ: โหมดสำหรับอินพุตรูปภาพเดียว

วิดีโอ: โหมดสำหรับเฟรมที่ถอดรหัสของวิดีโอ

LIVE_STREAM: โหมดสำหรับสตรีมแบบสดของอินพุต เช่น ข้อมูลจากกล้อง ในโหมดนี้ resultsListener ต้องเป็น ถูกเรียกให้ตั้งค่า Listener เพื่อรับผลลัพธ์ แบบไม่พร้อมกัน
{IMAGE, VIDEO, LIVE_STREAM} IMAGE
numHands จำนวนมือสูงสุดที่ตรวจจับได้ด้วย GestureRecognizer Any integer > 0 1
minHandDetectionConfidence คะแนนความเชื่อมั่นขั้นต่ำสำหรับการตรวจจับมือ โมเดลการตรวจจับฝ่ามือประสบความสำเร็จ 0.0 - 1.0 0.5
minHandPresenceConfidence คะแนนความเชื่อมั่นขั้นต่ำสำหรับคะแนนการตรวจหาบุคคลในมือ โมเดลการตรวจจับจุดสังเกต ในโหมดวิดีโอและโหมดสตรีมแบบสดของโปรแกรมจดจำท่าทางสัมผัส หากคะแนนความเชื่อมั่นขณะแสดงด้วยมือจากรูปของมือ โมเดลจุดสังเกต อยู่ด้านล่าง เกณฑ์นี้จะทริกเกอร์โมเดลการตรวจจับฝ่ามือ มิเช่นนั้น อัลกอริทึมการติดตามมือน้ำหนักเบาใช้เพื่อระบุตำแหน่ง สำหรับการตรวจหาจุดสังเกตในภายหลัง 0.0 - 1.0 0.5
minTrackingConfidence คะแนนความเชื่อมั่นขั้นต่ำสำหรับการติดตามมือที่จะพิจารณา สำเร็จ นี่คือเกณฑ์ IoU ของกรอบล้อมรอบระหว่างมือใน เฟรมปัจจุบันกับเฟรมสุดท้าย ในโหมดวิดีโอและโหมดสตรีมของ โปรแกรมจดจำท่าทางสัมผัส หากการติดตามล้มเหลว โปรแกรมจดจำท่าทางสัมผัสจะเรียกใช้มือ การตรวจจับ ไม่เช่นนั้นระบบจะข้ามการตรวจจับมือ 0.0 - 1.0 0.5
cannedGesturesClassifierOptions ตัวเลือกสำหรับการกำหนดค่าลักษณะการทำงานของตัวแยกประเภทด้วยท่าทางสัมผัสสำเร็จรูป ท่าทางสัมผัสสำเร็จรูปคือ ["None", "Closed_Fist", "Open_Palm", "Pointing_Up", "Thumb_Down", "Thumb_Up", "Victory", "ILoveYou"]
  • ภาษาของชื่อที่แสดง: ภาษาที่จะใช้สำหรับชื่อที่แสดงที่ระบุผ่านข้อมูลเมตาของโมเดล TFLite หากมี
  • ผลลัพธ์สูงสุด: จำนวนผลลัพธ์การจัดประเภทที่ได้คะแนนสูงสุดที่จะแสดง ถ้า < 0 ระบบจะแสดงผลลัพธ์ที่ใช้ได้ทั้งหมด
  • เกณฑ์คะแนน: คะแนนที่ต่ำกว่าผลลัพธ์ที่จะถูกปฏิเสธ หากตั้งค่าเป็น 0 ระบบจะแสดงผลผลลัพธ์ที่ใช้ได้ทั้งหมด
  • รายการหมวดหมู่ที่อนุญาต: รายการที่อนุญาตของชื่อหมวดหมู่ หากไม่ว่างเปล่า ระบบจะกรองผลลัพธ์การจัดหมวดหมู่ที่ไม่ตรงกับหมวดหมู่ออก พิเศษร่วมกันกับรายการที่ปฏิเสธ
  • รายการหมวดหมู่ที่ปฏิเสธ: รายการหมวดหมู่ที่ปฏิเสธ หากไม่ว่างเปล่า ผลการจัดประเภทที่มีหมวดหมู่ในชุดนี้จะถูกกรองออก มีสิทธิ์พิเศษร่วมกับรายการที่อนุญาต
    • ภาษาของชื่อที่แสดง: any string
    • ผลลัพธ์สูงสุด: any integer
    • เกณฑ์คะแนน: 0.0-1.0
    • หมวดหมู่ที่อนุญาต: vector of strings
    • รายการหมวดหมู่ที่ปฏิเสธ: vector of strings
    • ภาษาของชื่อที่แสดง: "en"
    • ผลลัพธ์สูงสุด: -1
    • เกณฑ์คะแนน: 0
    • หมวดหมู่ที่อนุญาต: ว่างเปล่า
    • รายการหมวดหมู่ที่ปฏิเสธ: ว่างเปล่า
    customGesturesClassifierOptions ตัวเลือกสำหรับการกำหนดค่าลักษณะการทำงานของตัวแยกประเภทด้วยท่าทางสัมผัสที่กำหนดเอง
  • ภาษาของชื่อที่แสดง: ภาษาที่จะใช้สำหรับชื่อที่แสดงที่ระบุผ่านข้อมูลเมตาของโมเดล TFLite หากมี
  • ผลลัพธ์สูงสุด: จำนวนผลลัพธ์การจัดประเภทที่ได้คะแนนสูงสุดที่จะแสดง ถ้า < 0 ระบบจะแสดงผลลัพธ์ที่ใช้ได้ทั้งหมด
  • เกณฑ์คะแนน: คะแนนที่ต่ำกว่าผลลัพธ์ที่จะถูกปฏิเสธ หากตั้งค่าเป็น 0 ระบบจะแสดงผลผลลัพธ์ที่ใช้ได้ทั้งหมด
  • รายการหมวดหมู่ที่อนุญาต: รายการที่อนุญาตของชื่อหมวดหมู่ หากไม่ว่างเปล่า ระบบจะกรองผลลัพธ์การจัดหมวดหมู่ที่ไม่ตรงกับหมวดหมู่ออก พิเศษร่วมกันกับรายการที่ปฏิเสธ
  • รายการหมวดหมู่ที่ปฏิเสธ: รายการหมวดหมู่ที่ปฏิเสธ หากไม่ว่างเปล่า ผลการจัดประเภทที่มีหมวดหมู่ในชุดนี้จะถูกกรองออก มีสิทธิ์พิเศษร่วมกับรายการที่อนุญาต
    • ภาษาของชื่อที่แสดง: any string
    • ผลลัพธ์สูงสุด: any integer
    • เกณฑ์คะแนน: 0.0-1.0
    • หมวดหมู่ที่อนุญาต: vector of strings
    • รายการหมวดหมู่ที่ปฏิเสธ: vector of strings
    • ภาษาของชื่อที่แสดง: "en"
    • ผลลัพธ์สูงสุด: -1
    • เกณฑ์คะแนน: 0
    • หมวดหมู่ที่อนุญาต: ว่างเปล่า
    • รายการหมวดหมู่ที่ปฏิเสธ: ว่างเปล่า
    resultListener ตั้งค่า Listener ผลลัพธ์เพื่อรับผลลัพธ์การจัดประเภท แบบไม่พร้อมกันเมื่อตัวจดจำท่าทางสัมผัสอยู่ในโหมดสตรีมแบบสด ใช้ได้เมื่อตั้งค่าโหมดวิ่งเป็น LIVE_STREAM เท่านั้น ResultListener ไม่มี ไม่มี
    errorListener ตั้งค่า Listener ข้อผิดพลาดที่ไม่บังคับ ErrorListener ไม่มี ไม่มี

    เตรียมข้อมูล

    ตัวจดจำท่าทางสัมผัสทำงานร่วมกับรูปภาพ ไฟล์วิดีโอ และวิดีโอสตรีมแบบสด งาน จัดการการประมวลผลอินพุตข้อมูลล่วงหน้า ซึ่งรวมถึงการปรับขนาด การหมุน และค่า การแปลงเป็นรูปแบบมาตรฐาน

    โค้ดต่อไปนี้แสดงวิธีส่งต่อข้อมูลสำหรับการประมวลผล วิทยานิพนธ์ ตัวอย่างจะให้รายละเอียดเกี่ยวกับวิธีจัดการข้อมูลจากรูปภาพ ไฟล์วิดีโอ และการเผยแพร่ สตรีมวิดีโอ

    รูปภาพ

    import com.google.mediapipe.framework.image.BitmapImageBuilder
    import com.google.mediapipe.framework.image.MPImage
    
    // Convert the input Bitmap object to an MPImage object to run inference
    val mpImage = BitmapImageBuilder(image).build()
        

    วิดีโอ

    import com.google.mediapipe.framework.image.BitmapImageBuilder
    import com.google.mediapipe.framework.image.MPImage
    
    val argb8888Frame =
        if (frame.config == Bitmap.Config.ARGB_8888) frame
        else frame.copy(Bitmap.Config.ARGB_8888, false)
    
    // Convert the input Bitmap object to an MPImage object to run inference
    val mpImage = BitmapImageBuilder(argb8888Frame).build()
        

    สตรีมแบบสด

    import com.google.mediapipe.framework.image.BitmapImageBuilder
    import com.google.mediapipe.framework.image.MPImage
    
    // Convert the input Bitmap object to an MPImage object to run inference
    val mpImage = BitmapImageBuilder(rotatedBitmap).build()
        

    ใน โค้ดตัวอย่างโปรแกรมจดจำท่าทางสัมผัส การเตรียมข้อมูลมีการจัดการใน GestureRecognizerHelper.kt

    เรียกใช้งาน

    โปรแกรมจดจำท่าทางสัมผัสใช้ recognize, recognizeForVideo และ recognizeAsync เพื่อทริกเกอร์การอนุมาน ในการจดจำท่าทางสัมผัส การดำเนินการนี้เกี่ยวข้องกับ ประมวลผลข้อมูลอินพุตล่วงหน้า ตรวจจับมือในรูปภาพ การตรวจจับมือ จุดสังเกต และจดจำท่าทางมือจากจุดสังเกต

    โค้ดต่อไปนี้แสดงวิธีดำเนินการประมวลผลด้วยโมเดลงาน ตัวอย่างเหล่านี้มีรายละเอียดเกี่ยวกับวิธีจัดการข้อมูลจากรูปภาพ ไฟล์วิดีโอ และสตรีมวิดีโอสด

    รูปภาพ

    val result = gestureRecognizer?.recognize(mpImage)
        

    วิดีโอ

    val timestampMs = i * inferenceIntervalMs
    
    gestureRecognizer?.recognizeForVideo(mpImage, timestampMs)
        ?.let { recognizerResult ->
            resultList.add(recognizerResult)
        }
        

    สตรีมแบบสด

    val mpImage = BitmapImageBuilder(rotatedBitmap).build()
    val frameTime = SystemClock.uptimeMillis()
    
    gestureRecognizer?.recognizeAsync(mpImage, frameTime)
        

    โปรดทราบดังต่อไปนี้

    • เมื่อทำงานในโหมดวิดีโอหรือโหมดสตรีมแบบสด คุณต้อง ระบุการประทับเวลาของเฟรมอินพุตในงานโปรแกรมจดจำท่าทางสัมผัส
    • เมื่อใช้งานในโหมดรูปภาพหรือวิดีโอ งานการจดจำท่าทางสัมผัสจะ บล็อกชุดข้อความปัจจุบันจนกว่าจะประมวลผลรูปภาพอินพุตเสร็จสิ้น หรือ เฟรม หากต้องการหลีกเลี่ยงการบล็อกอินเทอร์เฟซผู้ใช้ ให้เรียกใช้การประมวลผลใน เทรดพื้นหลัง
    • เมื่อทำงานในโหมดสตรีมแบบสด งานการจดจำท่าทางสัมผัสจะไม่บล็อก ชุดข้อความปัจจุบันแต่จะแสดงอีกครั้งทันที ระบบจะเรียกใช้ผลลัพธ์ Listener ที่มีผลลัพธ์การจดจำทุกครั้งที่ประมวลผลเสร็จสิ้น เฟรมอินพุต หากมีการเรียกใช้ฟังก์ชันการจดจำเมื่อโปรแกรมรู้จำท่าทางสัมผัส งานไม่ว่างเนื่องจากประมวลผลเฟรมอื่น งานจะไม่สนใจเฟรมอินพุตใหม่

    ใน โค้ดตัวอย่างโปรแกรมจดจำท่าทางสัมผัส ได้แก่ recognize, recognizeForVideo และ มีการกำหนดฟังก์ชัน recognizeAsync ในฟังก์ชัน GestureRecognizerHelper.kt

    จัดการและแสดงผลลัพธ์

    ตัวจดจำท่าทางสัมผัสจะสร้างออบเจ็กต์ผลลัพธ์การตรวจจับท่าทางสัมผัสสำหรับแต่ละ การจดจำเสียง ออบเจ็กต์ผลลัพธ์มีจุดสังเกตของมือในพิกัดรูปภาพ จุดสังเกตในพิกัดโลก มือ(ซ้าย/ขวา) และมือ หมวดหมู่ท่าทางสัมผัสของมือที่ตรวจพบ

    ตัวอย่างต่อไปนี้แสดงตัวอย่างข้อมูลเอาต์พุตจากงานนี้

    GestureRecognizerResult ที่ได้จะมีคอมโพเนนต์ 4 รายการ และคอมโพเนนต์แต่ละรายการเป็นอาร์เรย์ โดยที่แต่ละองค์ประกอบจะให้ผลลัพธ์ที่ตรวจพบจากมือเดียวที่ตรวจพบ

    • ความถนัดของมือ

      ความถนัดของมือแสดงให้เห็นว่ามือที่ตรวจพบเป็นมือซ้ายหรือมือขวา

    • ท่าทางสัมผัส

      หมวดหมู่ท่าทางสัมผัสที่รู้จักของมือที่ตรวจพบ

    • จุดสังเกต

      มีจุดสังเกต 21 จุด แต่ละรายการประกอบด้วยพิกัด x, y และ z พิกัด x และ y จะได้รับการปรับให้เป็น [0.0, 1.0] ตามความกว้างของภาพและ ตามลำดับ พิกัด z แสดงความลึกของจุดสังเกต โดยมี ความลึกที่ข้อมือซึ่งเป็นจุดเริ่มต้น ยิ่งค่าน้อยเท่าไหร่ ก็ยิ่งใกล้ ที่สำคัญคือกล้อง ขนาดของ z ใช้มาตราส่วนใกล้เคียงกับ x

    • สถานที่สำคัญของโลก

      นอกจากนี้ สัญลักษณ์มือ 21 ข้างยังแสดงเป็นพิกัดของโลกด้วย จุดสังเกตแต่ละแห่ง ประกอบด้วย x, y และ z ซึ่งจะแสดงพิกัด 3 มิติตามจริงใน เมตรที่มีจุดกำเนิดอยู่ที่จุดศูนย์กลางเรขาคณิตของมือ

    GestureRecognizerResult:
      Handedness:
        Categories #0:
          index        : 0
          score        : 0.98396
          categoryName : Left
      Gestures:
        Categories #0:
          score        : 0.76893
          categoryName : Thumb_Up
      Landmarks:
        Landmark #0:
          x            : 0.638852
          y            : 0.671197
          z            : -3.41E-7
        Landmark #1:
          x            : 0.634599
          y            : 0.536441
          z            : -0.06984
        ... (21 landmarks for a hand)
      WorldLandmarks:
        Landmark #0:
          x            : 0.067485
          y            : 0.031084
          z            : 0.055223
        Landmark #1:
          x            : 0.063209
          y            : -0.00382
          z            : 0.020920
        ... (21 world landmarks for a hand)
    

    รูปภาพต่อไปนี้แสดงการแสดงภาพเอาต์พุตของงาน

    ใน รหัสตัวอย่างโปรแกรมจดจำท่าทางสัมผัส คลาส GestureRecognizerResultsAdapter ใน GestureRecognizerResultsAdapter.kt จะช่วยจัดการกับผลลัพธ์ที่ได้