ดึงข้อมูลเชิงลึกในแอปด้วย ARCore สำหรับ Jetpack XR

อุปกรณ์ XR ที่รองรับ
คำแนะนำนี้จะช่วยคุณสร้างประสบการณ์การใช้งานสำหรับอุปกรณ์ XR ประเภทนี้
ชุดหูฟัง XR
แว่นตา XR แบบใช้สาย

แอปของคุณสามารถดึงข้อมูลความลึกผ่าน ARCore สำหรับ Jetpack XR เพื่อระบุว่าวัตถุจริงอยู่ใกล้กับอุปกรณ์มากน้อยเพียงใด

สร้างเซสชัน ARCore สำหรับ Jetpack XR

รับข้อมูลความลึกผ่าน ARCore สำหรับ Jetpack XR Session หากคุณกำลังปรับปรุง UI เชิงมิติพื้นที่โดยใช้ Jetpack Compose สำหรับ XR ให้เข้าถึงเซสชันจาก Jetpack Compose สำหรับ XR หากคุณทำงานกับเอนทิตีเชิงพื้นที่จากไลบรารี Jetpack SceneCore ให้เข้าถึงเซสชันจาก Jetpack XR Runtime

กำหนดค่าเซสชัน

ระบบไม่ได้เปิดใช้การดึงข้อมูลแผนที่ความลึกโดยค่าเริ่มต้นในเซสชัน XR หากต้องการเปิดใช้การดึงข้อมูลแผนที่ความลึก ให้กำหนดค่าเซสชันและตั้งค่า DepthEstimationMode ดังนี้

val newConfig = Config.Builder(session.config)
    .setDepthEstimation(DepthEstimationMode.SMOOTH_ONLY)
    .build()
when (val result = session.configure(newConfig)) {
    is SessionConfigureSuccess -> TODO(/* Success! */)
    else ->
        TODO(/* The session could not be configured. See SessionConfigureResult for possible causes. */)
}

ค่า DepthEstimationMode ที่ใช้ได้มีดังนี้

  • DISABLED: ไม่มีการระบุข้อมูลเกี่ยวกับความลึกของฉาก
  • RAW_ONLY: เปิดใช้การประมาณความลึกด้วยค่าความลึกดิบและค่าความเชื่อมั่น
  • SMOOTH_ONLY: เปิดใช้การประมาณความลึกด้วยค่าความลึกและความเชื่อมั่นที่ราบรื่น
  • SMOOTH_AND_RAW: เปิดใช้การประมาณความลึกด้วยค่าความลึกและค่า Confidence ทั้งแบบข้อมูลดิบและแบบปรับให้ราบรื่น

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

ตรวจสอบความสามารถของแผนที่แสดงความลึก

อุปกรณ์แต่ละเครื่องมีความสามารถแตกต่างกัน อุปกรณ์ที่มีการกำหนดค่ากล้องสเตอริโออาจให้แผนที่การประมาณความลึกสำหรับกล้องซ้ายและขวา ในทำนองเดียวกัน อุปกรณ์ที่มีกล้องตัวเดียวจะแสดงแผนที่การประมาณความลึกสำหรับกล้องโมโนเท่านั้น

หากต้องการตรวจสอบว่าอุปกรณ์รองรับแผนที่ความลึกใดบ้าง ให้ใช้ XrDevice.isRenderingModeSupported ดังนี้

val xrDevice = XrDevice.getCurrentDevice(context)
val hasMonoDepth = xrDevice.isRenderingModeSupported(RenderingMode.MONO)
val hasStereoDepth = xrDevice.isRenderingModeSupported(RenderingMode.STEREO)

ดึงข้อมูลความลึก

หากต้องการรับข้อมูลความลึกสำหรับกล้องที่กำหนด ให้ใช้ Depth ดังนี้

if (hasStereoDepth) {
    val depthMap = Depth.left(session)
}

คำนวณค่าความลึก

คุณสามารถดูค่าความลึกและค่า Confidence ได้จากแผนที่ความลึกที่ได้ ดังนี้

if (hasStereoDepth) {
    val depthMap = Depth.left(session)
}

เข้าถึงแผนที่ความลึกที่เกี่ยวข้องโดยใช้ smoothDepthMap หรือ rawDepthMap ทั้งนี้ขึ้นอยู่กับการตั้งค่าการกำหนดค่าที่ใช้ การวัดที่อยู่ในแผนที่เหล่านี้จะแสดงเป็นเมตร นอกจากนี้ คุณยังเข้าถึงค่า Confidence ได้โดยใช้ smoothConfidenceMap และ rawConfidenceMap ค่าเหล่านี้มีตั้งแต่ 0 ถึง 255 โดย 255 แสดงถึงความเชื่อมั่นสูงสุด

หากต้องการแสดงผลแผนที่ความลึกเพื่อวัตถุประสงค์ในการแก้ไขข้อบกพร่องหรือการแสดงภาพ โปรดดูส่วนความลึกของแอปทดสอบ ARCore