ดึงข้อมูลเชิงลึกในแอปด้วย 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 = session.config.copy(
    depthEstimation = DepthEstimationMode.SMOOTH_ONLY,
)
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: เปิดใช้การประมาณความลึกด้วยทั้งความลึกแบบดิบและความลึกแบบสมูท และค่าความเชื่อมั่น

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

android.permission.SCENE_UNDERSTANDING_FINE

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

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

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

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

เรียกข้อมูลความลึก

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

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

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

คุณสามารถรับค่าความลึกและความเชื่อมั่นจากแผนที่แสดงความลึกที่ได้

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

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

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