ทำความเข้าใจสภาพแวดล้อมของผู้ใช้ใน AR Foundation ของ Unity

ดูวิธีใช้ Scene Semantics API ในแอปของคุณเอง

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

จากซ้ายไปขวาคือตัวอย่างรูปภาพอินพุต รูปภาพเชิงอรรถของป้ายกำกับพิกเซล และรูปภาพความเชื่อมั่นที่เกี่ยวข้อง

ตัวอย่างรูปภาพอินพุต รูปภาพเชิงความหมาย และรูปภาพความเชื่อมั่นเชิงความหมาย

ข้อกำหนดเบื้องต้น

โปรดทำความเข้าใจแนวคิดพื้นฐานของ AR และวิธีกำหนดค่าเซสชัน ARCore ก่อนดำเนินการต่อ

เปิดใช้ความหมายของฉาก

ในเซสชัน ARCore ใหม่ ให้ตรวจสอบว่าอุปกรณ์ของผู้ใช้รองรับ Scene Semantics API หรือไม่ อุปกรณ์ที่เข้ากันได้กับ ARCore บางรุ่นไม่รองรับ Scene Semantics API เนื่องจากข้อจำกัดด้านกำลังการประมวลผล

ระบบจะปิดใช้ความหมายของฉากใน ARCore โดยค่าเริ่มต้นเพื่อประหยัดทรัพยากร เปิดใช้โหมดเชิงความหมายเพื่อให้แอปใช้ Scene Semantics API

ใน ARCoreExtensionsConfig ให้ตั้งค่าโหมดความหมายเป็น "เปิดใช้"

ตั้งค่าโหมดความหมายเป็น "เปิดใช้"

หากใช้ iOS จะต้องเปิดใช้ Semantics ในการตั้งค่าโปรเจ็กต์ด้วย โดยทำดังนี้

  1. ไปที่แก้ไข > การตั้งค่าโปรเจ็กต์ > การจัดการปลั๊กอิน XR > ส่วนขยาย ARCore
  2. ในส่วนฟีเจอร์ที่ไม่บังคับ ให้เลือกความหมายใน iOS

Semantics ใน iOS เปิดใช้ในฟีเจอร์เสริม

รับรูปภาพที่สื่อความหมาย

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

ใช้ ArSemanticManager.TryGetSemanticTexture() เพื่อรับรูปภาพที่สื่อความหมาย

if (semanticManager.TryGetSemanticTexture(out Texture2D semanticImage))
{
    using (semanticImage)
    {
        // Use the semantic image here.
    }
}

รูปภาพเชิงความหมายที่เอาต์พุตควรพร้อมใช้งานหลังจากผ่านไปประมาณ 1-3 เฟรมนับจากเริ่มเซสชัน ทั้งนี้ขึ้นอยู่กับอุปกรณ์

รับรูปภาพความมั่นใจ

นอกจากรูปภาพเชิงอรรถศาสตร์ซึ่งระบุป้ายกำกับสำหรับพิกเซลแต่ละพิกเซลแล้ว API ยังแสดงรูปภาพความเชื่อมั่นของค่าความเชื่อมั่นของพิกเซลที่เกี่ยวข้องด้วย รูปภาพความเชื่อมั่นคือรูปภาพ TextureFormat.Alpha8 โดยที่แต่ละพิกเซลจะสอดคล้องกับค่าในช่วง [0, 255] ซึ่งสอดคล้องกับความน่าจะเป็นที่เชื่อมโยงกับป้ายกำกับเชิงความหมายสำหรับแต่ละพิกเซล

ใช้ ArSemanticManager.TryGetSemanticConfidenceTexture() เพื่อรับรูปภาพความเชื่อมั่นเชิงความหมาย

if (semanticManager.TryGetSemanticConfidenceTexture(out Texture2D semanticConfidenceImage))
{
    using (semanticConfidenceImage)
    {
        // Use the semantic confidence image here.
    }
}

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

ค้นหาเศษส่วนของพิกเซลสําหรับป้ายกํากับที่สื่อความหมาย

นอกจากนี้ คุณยังค้นหาเศษส่วนของพิกเซลในเฟรมปัจจุบันซึ่งอยู่ในคลาสหนึ่งๆ เช่น ท้องฟ้า ได้ด้วย การค้นหานี้มีประสิทธิภาพมากกว่าการแสดงผลรูปภาพเชิงอรรถศาสตร์และทำการค้นหาแบบพิกเซลสำหรับป้ายกำกับที่เฉพาะเจาะจง เศษส่วนที่แสดงผลคือค่า float ในช่วง [0.0, 1.0]

ใช้ ArSemanticManager.GetSemanticLabelFraction() เพื่อรับเศษส่วนของป้ายกำกับหนึ่งๆ

var fraction = semanticManager.GetSemanticLabelFraction(SemanticLabel.SKY);