איך מתחילים לעבוד עם ממשקי Scene Semantics ו-Geospatial Depth API ב-ARCore

1. לפני שמתחילים

‫ARCore הוא מסגרת העבודה של Google ליצירת חוויות במציאות רבודה (AR) בסמארטפונים. ממשקי ה-API של סמנטיקה של סצנות ועומק גיאוספציאלי עוזרים לחוויות ה-AR להבין את הסביבה של המשתמשים.

ממשק ה-API של סמנטיקה של סצנות משתמש במודל של למידת מכונה (ML) כדי לנתח תמונות מהמצלמה ולספק תמונה של פיקסלים מתויגים. הוא יכול להבחין בין 11 תוויות שונות של חוץ.

ממשק ה-API של עומק גיאוספציאלי משלב מידע על עומק מתנועה ומחיישני חומרה פעילים, כמו זמן מעוף, עם נתונים של ממשק ה-API של גיאומטריית נוף רחוב. השיפור הזה עוזר לצמצם את השגיאות בתצפיות עומק במרחק של עד 65 מטרים.

ב-codelab הזה תיצרו אפליקציית AR שמציגה את התוצאות של ממשקי ה-API של סמנטיקה של סצנות ועומק גיאוספציאלי.

דרישות מוקדמות

  • ידע בסיסי ב-AR

מה תלמדו

  • איך מפעילים את Scene Semantics API.
  • איך מקבלים תמונה סמנטית ומציגים אותה בצורה חזותית.
  • איך מקבלים ומציגים תמונה של מהימנות סמנטית.
  • איך קובעים איזה אחוז מהפיקסלים מתאים לתווית מסוימת.
  • איך מגדירים פרויקט ב-Google Cloud שאפשר להשתמש בו ב-ARCore Geospatial APIs.
  • איך מפעילים את Geospatial Depth API.
  • איך להמחיש בצורה חזותית את תמונות העומק.

מה נדרש

2. הגדרת הסביבה

כדי להתחיל להשתמש ב-Geospatial API, סיפקנו פרויקט התחלתי שכולל את היסודות של פרויקט ARCore וכמה פונקציות עזר.

כדי להגדיר את פרויקט המתחילים, פועלים לפי השלבים הבאים:

  1. פותחים את Android Studio ומבצעים אחת מהפעולות הבאות:
    • אם כבר פתוח פרויקט, לוחצים על קובץ > חדש > פרויקט מניהול גרסאות.
    • אם מופיע החלון Welcome to Android Studio (ברוכים הבאים ל-Android Studio), לוחצים על Get from VCS (קבלת נתונים ממערכת בקרת גרסאות). אחזור ממיקום VCS
  2. בוחרים באפשרות Git ומזינים https://github.com/google-ar/codelab-scene-semantics-geospatial-depth.git כדי לייבא את הפרויקט.

3. הדמיה של נתונים מ-Scene Semantics API

הפעלת Scene Semantics API

ה-API של סמנטיקה של סצנות מושבת כברירת מחדל כדי לחסוך בכוח העיבוד.

כדי להפעיל את Scene Semantics API, פועלים לפי השלבים הבאים:

  1. בקובץ CodelabActivity.kt, מחפשים את השורה הבאה:
    // TODO: Enable the Scene Semantics API.
    
  2. אחרי השורה הזו, אם המכשיר שלכם תומך בכך, מפעילים את Scene Semantics API בהגדרות של הסשן:
    if (session.isSemanticModeSupported(Config.SemanticMode.ENABLED)) {
      semanticMode = Config.SemanticMode.ENABLED
    }
    

קבלת תמונה סמנטית והצגה שלה

התמונה הסמנטית היא תוצאה של מודל ה-ML של ARCore שמקצה SemanticLabel Enum לכל פיקסל בפיד המצלמה.

דוגמה לתמונות סמנטיות

כדי לקבל תמונה סמנטית ולהציג אותה על המסך, פועלים לפי השלבים הבאים:

  1. בקובץ CodelabRenderer.kt, מחפשים את השורה הבאה:
    // TODO: Obtain the semantic image for this frame.
    
  2. אחרי השורה הזו, צור תמונה סמנטית:
    frame.acquireSemanticImage().use { image ->
      semanticRenderer.updateCameraSemanticsTexture(image)
      activity.view.semanticLabelAtCenter = getLabelAt(image, image.width/2, image.height/2)
    }
    
    התמונה הסמנטית משמשת בכיתה SemanticRenderer להצגה על המסך. מעדכנים את המשתנה semanticLabelAtCenter כדי להציג את התווית הסמנטית במרכז המסך בתצוגה של האפליקציה.
  3. מפעילים את האפליקציה ומכוונים את המצלמה לאובייקטים שונים בחוץ. התצוגה של התווית הסמנטית משתנה כשמסתכלים על סוגים שונים של אובייקטים.
  4. מקישים על סמל ההגדרות הגדרות כדי להפעיל את שכבת-העל של התמונה עם רמת הביטחון הסמנטי.

קבלת תמונה של מהימנות סמנטית והצגה שלה

תמונת מהימנות סמנטית מציינת את רמת הביטחון של ARCore בתווית הסמנטית בפיקסל התואם.

כדי לקבל תמונה סמנטית ולהציג אותה על המסך, פועלים לפי השלבים הבאים:

  1. בקובץ CodelabRenderer.kt, מחפשים את השורה הבאה:
    // TODO: Obtain the confidence image for this frame.
    
  2. אחרי השורה הזו, קבל תמונה סמנטית:
    frame.acquireSemanticConfidenceImage().use { image ->
      semanticRenderer.updateConfidenceSemanticsTexture(image)
      activity.view.confidenceAtCenter = getConfidenceAt(image, image.width/2, image.height/2)
    }
    
    התמונה עם רמת הביטחון הסמנטית משמשת בכיתה SemanticRenderer לתצוגה במסך. מעדכנים את המשתנה confidenceAtCenter כדי להציג את התווית הסמנטית במרכז המסך בתצוגה של האפליקציה.
  3. מפעילים את האפליקציה ומכוונים את המצלמה לאובייקטים שונים בחוץ. התצוגה של רמת הביטחון הסמנטי משתנה כשמסתכלים על סוגים שונים של אובייקטים.
  4. מקישים על סמל ההגדרות הגדרות כדי להפעיל את שכבת-העל של התמונה עם רמת הביטחון הסמנטי.

איך קובעים את השכיחות של תווית

השכיחות של תווית היא אחוז התמונה הסמנטית ששווה לתווית נתונה. לדוגמה, אם 26% מהתמונה כוללים את הערך SemanticLabel.SKY, ערך השכיחות של הערך SemanticLabel.SKY הוא 0.26f.

כדי לקבל את השכיחות של התוויות ולהציג אותן במסך, פועלים לפי השלבים הבאים:

  1. בקובץ CodelabRenderer.kt, מחפשים את השורה הבאה:
    // TODO: Obtain the prevalence of the selected label for this frame.
    
  2. אחרי השורה הזו, מקבלים את השכיחות של התווית שנבחרה:
    activity.view.fractionOfLabel = frame.getSemanticLabelFraction(activity.view.selectedSemanticLabel)
    
  3. מפעילים את האפליקציה ומכוונים את המצלמה לאובייקטים שונים בחוץ. ערך השבר משתנה כשמסתכלים על סוגים שונים של אובייקטים. מקישים על סמל ההגדרות הגדרות כדי לשנות את החלק של התווית שמוצג. לדוגמה, אפשר לנסות להשתמש ב-BUILDING ולנסות למלא את אזור התצוגה בבניין ולראות איך זה משפיע על השבר.

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.

כדי להשתמש בשרת הזה בפרויקט, פועלים לפי השלבים הבאים:

  1. יוצרים פרויקט ב-Google Cloud.

    יצירת פרויקט של Google Cloud
  2. בשדה Project name (שם הפרויקט), מזינים שם מתאים, כמו ARCore Geospatial API project, ובוחרים מיקום כלשהו.
  3. לוחצים על יצירה.
  4. במסוף Google Cloud, בדף לבחירת הפרויקט, לוחצים על Create Project.
  5. לוחצים על הקישור הבא כדי להציג את ARCore API עבור הפרויקט הזה ואז לוחצים על הפעלה:
  6. יוצרים מפתח API לפרויקט:
    1. בקטע APIs & services, בוחרים באפשרות Credentials.
    2. לוחצים על Create credentials ובוחרים באפשרות API key.
    3. חשוב לרשום את המפתח כי תצטרכו אותו בהמשך.

יצרתם פרויקט ב-Google Cloud עם הרשאה של מפתח API, ואתם מוכנים להשתמש ב-Geospatial API בפרויקט לדוגמה.

הטמעה של מפתח ה-API בפרויקט Android Studio

כדי לשייך את מפתח ה-API מ-Google Cloud לפרויקט שלכם, פועלים לפי השלבים הבאים:

  1. ב-Android Studio, לוחצים על app > src ולוחצים לחיצה כפולה על AndroidManifest.xml.
  2. מחפשים את הרשומות הבאות meta-data:
    <meta-data
        android:name="com.google.android.ar.API_KEY"
        android:value="API_KEY" />
    
  3. מחליפים את ה-placeholder‏ API_KEY במפתח ה-API שיצרתם בפרויקט ב-Google Cloud. הערך שמאוחסן ב-com.google.android.ar.API_KEY מאשר לאפליקציה הזו להשתמש ב-Geospatial API.

אימות הפרויקט

  • כדי לאמת את הפרויקט, מריצים את האפליקציה במכשיר הפיתוח. בראש המסך אמור להופיע תצוגת מצלמה ומידע לניפוי באגים גיאוספציאלי.

מידע גיאו-מרחבי מוצג באפליקציה

הפעלת ההגדרות הנדרשות

כדי להשתמש ב-Geospatial Depth API, צריך להפעיל שלוש הגדרות בהגדרות הסשן של האפליקציה.

כדי להפעיל אותן:

  1. בקובץ CodelabRenderer.kt, מחפשים את השורה הבאה:
    // TODO: Enable the Geospatial API, the Streetscape Geometry API, and the Depth API.
    
  2. בשורה הבאה, מוסיפים את הקוד הבא:
    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
    }
    

המחשת מידע על עומק

  1. מפעילים את האפליקציה ומבקרים בבניין באזור שלכם.
  2. אחרי שמסיימים את הלוקליזציה הגיאוספציאלית, מקישים על סמל ההגדרות הגדרות ומפעילים את ההדמיה של עומק גיאוספציאלי.
  3. צופים בבניין ב-AR ומשווים אותו למידע על העומק בלי עומק גיאו-מרחבי.

5. סיכום

מעולה! יצרתם אפליקציית AR שממחישה בצורה חזותית את הסמנטיקה של הסצנה ואת העומק הגיאו-מרחבי.

מידע נוסף