แอปของคุณสามารถดึงข้อมูลเชิงลึกผ่าน 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