ดึงข้อมูลเชิงลึกในแอปด้วย 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 = Config.DepthEstimationMode.SMOOTH_ONLY,
)
when (val result = session.configure(newConfig)) {
    is SessionConfigureSuccess -> TODO(/* Success! */)
    is SessionConfigureConfigurationNotSupported ->
        TODO(/* Some combinations of configurations are not valid. Handle this failure case. */)
    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

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

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

val depthMap = DepthMap.left(session) ?: return

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

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

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

val depthMap = DepthMap.left(session) ?: return

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

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