1. ก่อนเริ่มต้น
ARCore คือเฟรมเวิร์กของ Google สำหรับการสร้างประสบการณ์ Augmented Reality (AR) บนสมาร์ทโฟน API ความหมายของฉากและความลึกเชิงพื้นที่ช่วยให้ประสบการณ์ AR เข้าใจสภาพแวดล้อมรอบตัวผู้ใช้
Scene Semantics API ใช้โมเดลแมชชีนเลิร์นนิง (ML) เพื่อวิเคราะห์รูปภาพของกล้องและแสดงรูปภาพของพิกเซลที่มีป้ายกำกับ โดยสามารถแยกแยะป้ายกลางแจ้งที่แตกต่างกัน 11 แบบ
Geospatial Depth API จะรวมข้อมูลเชิงลึกจากการเคลื่อนไหวและเซ็นเซอร์ฮาร์ดแวร์ที่ใช้งานอยู่ เช่น เวลาในการบิน เข้ากับข้อมูล Streetscape Geometry API ซึ่งจะช่วยปรับปรุงข้อผิดพลาดในการสังเกตเชิงลึกได้ไกลถึง 65 เมตร
ในโค้ดแล็บนี้ คุณจะได้สร้างแอป AR ที่แสดงผลลัพธ์ของ Scene Semantics API และ Geospatial Depth API
ข้อกำหนดเบื้องต้น
- ความรู้พื้นฐานเกี่ยวกับ AR
สิ่งที่คุณจะได้เรียนรู้
- วิธีเปิดใช้ Scene Semantics API
- วิธีรับและแสดงภาพเชิงความหมาย
- วิธีรับและแสดงภาพความเชื่อมั่นเชิงความหมาย
- วิธีพิจารณาว่าพิกเซลกี่เปอร์เซ็นต์ที่สอดคล้องกับป้ายกำกับที่กำหนด
- วิธีตั้งค่าโปรเจ็กต์ Google Cloud ที่ใช้ ARCore Geospatial API ได้
- วิธีเปิดใช้ Geospatial Depth API
- วิธีแสดงภาพเชิงลึก
สิ่งที่คุณต้องมี
- อุปกรณ์ Android ที่รองรับ ARCore ซึ่งเชื่อมต่อกับเครื่องที่ใช้พัฒนาด้วยสาย USB และกำหนดค่าด้วยการแก้ไขข้อบกพร่องผ่าน USB
- บริการ Google Play สำหรับ AR เวอร์ชัน 1.37 ขึ้นไปที่ติดตั้งในอุปกรณ์พัฒนา Android
- ติดตั้งและกำหนดค่า Android Studio เพื่อสร้างแอป Android
2. ตั้งค่าสภาพแวดล้อม
เราได้จัดเตรียมโปรเจ็กต์เริ่มต้นที่มีพื้นฐานของโปรเจ็กต์ ARCore และฟังก์ชันตัวช่วยบางอย่างไว้ให้เพื่อช่วยให้คุณเริ่มต้นใช้งาน Geospatial API ได้
หากต้องการตั้งค่าโปรเจ็กต์เริ่มต้น ให้ทำตามขั้นตอนต่อไปนี้
- เปิด Android Studio แล้วทำอย่างใดอย่างหนึ่งต่อไปนี้
- หากเปิดโปรเจ็กต์อยู่แล้ว ให้คลิกไฟล์ > ใหม่ > โปรเจ็กต์จากการควบคุมเวอร์ชัน
- หากเห็นหน้าต่างยินดีต้อนรับสู่ Android Studio ให้คลิกรับจาก VCS
- เลือก Git แล้วป้อน
https://github.com/google-ar/codelab-scene-semantics-geospatial-depth.git
เพื่อนำเข้าโปรเจ็กต์
3. แสดงข้อมูล Scene Semantics API ด้วยภาพ
เปิดใช้ Scene Semantics API
ระบบจะปิดใช้ Scene Semantics API โดยค่าเริ่มต้นเพื่อประหยัดพลังการประมวลผล
หากต้องการเปิดใช้ Scene Semantics API ให้ทำตามขั้นตอนต่อไปนี้
- ในไฟล์
CodelabActivity.kt
ให้ค้นหาบรรทัดต่อไปนี้// TODO: Enable the Scene Semantics API.
- หลังจากบรรทัดนั้น หากอุปกรณ์รองรับ ให้เปิดใช้ Scene Semantics API ในการกำหนดค่าของเซสชัน
if (session.isSemanticModeSupported(Config.SemanticMode.ENABLED)) { semanticMode = Config.SemanticMode.ENABLED }
รับและแสดงภาพเชิงความหมาย
รูปภาพเชิงความหมายเป็นผลลัพธ์ของโมเดล ML ของ ARCore ที่กำหนด SemanticLabel
Enum ให้กับแต่ละพิกเซลในฟีดกล้อง
หากต้องการรับรูปภาพเชิงความหมายและแสดงบนหน้าจอ ให้ทำตามขั้นตอนต่อไปนี้
- ในไฟล์
CodelabRenderer.kt
ให้ค้นหาบรรทัดต่อไปนี้// TODO: Obtain the semantic image for this frame.
- หลังจากบรรทัดนั้น ให้รับรูปภาพเชิงความหมาย
ระบบจะใช้รูปภาพเชิงความหมายในคลาสframe.acquireSemanticImage().use { image -> semanticRenderer.updateCameraSemanticsTexture(image) activity.view.semanticLabelAtCenter = getLabelAt(image, image.width/2, image.height/2) }
SemanticRenderer
เพื่อแสดงบนหน้าจอ คุณอัปเดตตัวแปรsemanticLabelAtCenter
เพื่อแสดงป้ายกำกับเชิงความหมายที่กึ่งกลางหน้าจอในมุมมองของแอป - เรียกใช้แอปและเล็งกล้องไปยังวัตถุต่างๆ ภายนอก การแสดงป้ายกำกับเชิงความหมายจะเปลี่ยนไปเมื่อคุณดูออบเจ็กต์ประเภทต่างๆ
- แตะ
การตั้งค่าเพื่อเปิดใช้การซ้อนทับรูปภาพที่มีความเชื่อมั่นเชิงความหมาย
รับและแสดงภาพความเชื่อมั่นเชิงความหมาย
รูปภาพความมั่นใจเชิงความหมายจะบ่งบอกถึงความมั่นใจของ ARCore ในป้ายกำกับเชิงความหมายที่พิกเซลที่ตรงกัน
หากต้องการรับรูปภาพเชิงความหมายและแสดงบนหน้าจอ ให้ทำตามขั้นตอนต่อไปนี้
- ในไฟล์
CodelabRenderer.kt
ให้ค้นหาบรรทัดต่อไปนี้// TODO: Obtain the confidence image for this frame.
- หลังจากบรรทัดนี้ ให้รับรูปภาพเชิงความหมาย
ระบบจะใช้รูปภาพที่มีความเชื่อมั่นเชิงความหมายในคลาสframe.acquireSemanticConfidenceImage().use { image -> semanticRenderer.updateConfidenceSemanticsTexture(image) activity.view.confidenceAtCenter = getConfidenceAt(image, image.width/2, image.height/2) }
SemanticRenderer
เพื่อแสดงบนหน้าจอ คุณอัปเดตตัวแปรconfidenceAtCenter
เพื่อแสดงป้ายกำกับเชิงความหมายที่กึ่งกลางหน้าจอในมุมมองของแอป - เรียกใช้แอปและเล็งกล้องไปยังวัตถุต่างๆ ภายนอก การแสดงความเชื่อมั่นเชิงความหมายจะเปลี่ยนไปเมื่อคุณดูออบเจ็กต์ประเภทต่างๆ
- แตะ
การตั้งค่าเพื่อเปิดใช้การซ้อนทับรูปภาพที่มีความเชื่อมั่นเชิงความหมาย
พิจารณาความแพร่หลายของป้ายกำกับ
ความแพร่หลายของป้ายกำกับคือเปอร์เซ็นต์ของรูปภาพเชิงความหมายที่เท่ากับป้ายกำกับที่กำหนด เช่น หาก 26% ของรูปภาพมีค่า SemanticLabel.SKY
ค่าความชุกสำหรับค่า SemanticLabel.SKY
จะเป็น 0.26f
หากต้องการดูความแพร่หลายของป้ายกำกับและแสดงบนหน้าจอ ให้ทำตามขั้นตอนต่อไปนี้
- ในไฟล์
CodelabRenderer.kt
ให้ค้นหาบรรทัดต่อไปนี้// TODO: Obtain the prevalence of the selected label for this frame.
- หลังจากบรรทัดนั้น ให้รับความแพร่หลายสำหรับป้ายกำกับที่เลือก
activity.view.fractionOfLabel = frame.getSemanticLabelFraction(activity.view.selectedSemanticLabel)
- เรียกใช้แอปและเล็งกล้องไปยังวัตถุต่างๆ ภายนอก ค่าเศษส่วนจะเปลี่ยนแปลงเมื่อคุณดูออบเจ็กต์ประเภทต่างๆ แตะ
Settings เพื่อเปลี่ยนเศษส่วนของป้ายกำกับที่แสดง เช่น ลองสร้างและพยายามเติมวิวพอร์ตด้วยอาคาร แล้วดูว่าการดำเนินการดังกล่าวส่งผลต่อเศษส่วนอย่างไร
4. แสดงภาพข้อมูล Geospatial Depth API
Geospatial Depth API ช่วยปรับปรุงการอ่านค่าความลึกเมื่อเปิดใช้ Geospatial API และ Streetscape Geometry API หากต้องการใช้ Geospatial Depth API กับ Kotlin และ Android Studio คุณต้องมีโปรเจ็กต์ Google Cloud
ตั้งค่าโปรเจ็กต์ Google Cloud
ARCore Geospatial API จะเชื่อมต่อกับ Google Cloud เพื่อให้ข้อมูลการแปลจากระบบกำหนดตำแหน่งด้วยภาพ (VPS) ของ Google ในพื้นที่ที่ Google Street View ครอบคลุม
หากต้องการใช้เซิร์ฟเวอร์นี้ในโปรเจ็กต์ ให้ทำตามขั้นตอนต่อไปนี้
- สร้างโปรเจ็กต์ใน Google Cloud
- ในช่องชื่อโปรเจ็กต์ ให้ป้อนชื่อที่เหมาะสม เช่น
ARCore Geospatial API project
แล้วเลือกสถานที่ตั้ง - คลิกสร้าง
- ในคอนโซล Google Cloud ในหน้าตัวเลือกโปรเจ็กต์ ให้คลิกสร้างโปรเจ็กต์
- คลิกลิงก์ต่อไปนี้เพื่อดู ARCore API สำหรับโปรเจ็กต์นี้ แล้วคลิกเปิดใช้
- สร้างคีย์ API สำหรับโปรเจ็กต์ของคุณ
- ในส่วน API และบริการ ให้เลือกข้อมูลเข้าสู่ระบบ
- คลิกสร้างข้อมูลเข้าสู่ระบบ แล้วเลือกคีย์ API
- จดคีย์ไว้เนื่องจากคุณต้องใช้ในภายหลัง
คุณสร้างโปรเจ็กต์ Google Cloud ด้วยการให้สิทธิ์คีย์ API และพร้อมที่จะใช้ Geospatial API ในโปรเจ็กต์ตัวอย่างแล้ว
ผสานรวมคีย์ API กับโปรเจ็กต์ Android Studio
หากต้องการเชื่อมโยงคีย์ API จาก Google Cloud กับโปรเจ็กต์ ให้ทำตามขั้นตอนต่อไปนี้
- ใน Android Studio ให้คลิก app > src แล้วดับเบิลคลิก
AndroidManifest.xml
- ค้นหารายการ
meta-data
ต่อไปนี้<meta-data android:name="com.google.android.ar.API_KEY" android:value="API_KEY" />
- แทนที่ตัวยึดตำแหน่ง
API_KEY
ด้วยคีย์ API ที่คุณสร้างในโปรเจ็กต์ Google Cloud ค่าที่จัดเก็บไว้ในcom.google.android.ar.API_KEY
จะให้สิทธิ์แอปนี้ในการใช้ Geospatial API
ยืนยันโปรเจ็กต์
- หากต้องการยืนยันโปรเจ็กต์ ให้เรียกใช้แอปในอุปกรณ์ที่ใช้พัฒนา คุณควรเห็นมุมมองกล้องและข้อมูลการแก้ไขข้อบกพร่องเชิงพื้นที่ที่ด้านบนของหน้าจอ
เปิดใช้การกำหนดค่าที่จำเป็น
Geospatial Depth API ต้องเปิดใช้การตั้งค่า 3 รายการในการกำหนดค่าเซสชันของแอป
หากต้องการเปิดใช้ ให้ทำตามขั้นตอนต่อไปนี้
- ในไฟล์
CodelabRenderer.kt
ให้ค้นหาบรรทัดต่อไปนี้// TODO: Enable the Geospatial API, the Streetscape Geometry API, and the Depth API.
- ในบรรทัดถัดไป ให้เพิ่มโค้ดต่อไปนี้
val isDepthSupported = session.isDepthModeSupported(Config.DepthMode.AUTOMATIC) val isGeospatialSupported = session.isGeospatialModeSupported(Config.GeospatialMode.ENABLED) if (isDepthSupported && isGeospatialSupported) { // These three settings are needed to use Geospatial Depth. geospatialMode = Config.GeospatialMode.ENABLED streetscapeGeometryMode = Config.StreetscapeGeometryMode.ENABLED depthMode = Config.DepthMode.AUTOMATIC }
แสดงข้อมูลความลึกเป็นภาพ
- เรียกใช้แอปและไปที่อาคารในพื้นที่ของคุณ
- หลังจากทำการแปลเป็นภาษาท้องถิ่นเชิงพื้นที่เสร็จแล้ว ให้แตะ
Settings แล้วเปิดใช้การแสดงภาพความลึกเชิงพื้นที่
- ดูอาคารใน AR และเปรียบเทียบกับข้อมูลเชิงลึกที่ไม่มีความลึกเชิงพื้นที่
5. บทสรุป
ยินดีด้วย คุณสร้างแอป AR ที่แสดงภาพความหมายของฉากและความลึกเชิงพื้นที่