איך משתמשים ב-Scene Semantics API באפליקציות שלכם.
Scene Semantics API מאפשר למפתחים להבין את הסביבה שמקיפה את המשתמש, על ידי מתן מידע סמנטי בזמן אמת שמבוסס על מודלים של למידת מכונה. כשנותנים ל-API תמונה של סצנה בחוץ, הוא מחזיר תווית לכל פיקסל מתוך קבוצה של סיווגים סמנטיים שימושיים, כמו שמים, בניין, עץ, כביש, מדרכה, רכב, אדם ועוד. בנוסף לתוויות פיקסלים, Scene Semantics API מציע גם ערכי ביטחון לכל תווית פיקסלים, ודרך קלה להריץ שאילתות לגבי שכיחות התווית בסצנה בחוץ.
משמאל לימין, דוגמאות לתמונה קלט, התמונה הסמנטית של תוויות הפיקסלים ותמונת האמון התואמת:
דרישות מוקדמות
לפני שממשיכים, חשוב להבין את המושגים הבסיסיים של AR ואת האופן שבו מגדירים סשן ARCore.
הפעלת סמנטיקה של סצנות
בסשן ARCore חדש, בודקים אם המכשיר של המשתמש תומך ב-Scene Semantics API. לא כל המכשירים התואמים ל-ARCore תומכים ב-Scene Semantics API בגלל מגבלות של כוח עיבוד.
כדי לחסוך במשאבים, סמנטיקה של סצנה מושבתת כברירת מחדל ב-ARCore. מפעילים את המצב הסמנטי כדי שהאפליקציה תשתמש ב-Scene Semantics API.
GARSessionConfiguration *configuration = [[GARSessionConfiguration alloc] init];
if ([self.garSession isSemanticModeSupported:GARSemanticModeEnabled]) {
configuration.semanticMode = GARSemanticModeEnabled;
}
NSError *error;
[self.garSession setConfiguration:configuration error:&error];
אחזור התמונה הסמנטית
אחרי שמפעילים את 'סמנטיקה של סצנה', אפשר לאחזר את התמונה הסמנטית. התמונה הסמנטית היא תמונה מסוג kCVPixelFormatType_OneComponent8
, שבה כל פיקסל תואם לתווית סמנטית שמוגדרת על ידי GARSemanticLabel
.
משתמשים ב-GARFrame.semanticImage
כדי לקבל את התמונה הסמנטית:
CVPixelBuffer semanticImage = garFrame.semanticImage;
if (semanticImage) {
// Use the semantic image here
} else {
// Semantic images are not available.
// The output image may be missing for the first couple frames before the model has had a
// chance to run yet.
}
תמונות סמנטיות של הפלט אמורות להיות זמינות אחרי כ-1-3 מסגרות מתחילת הסשן, בהתאם למכשיר.
אחזור של קובץ האימג' של האמון
בנוסף לתמונה הסמנטית, שמספקת תווית לכל פיקסל, ה-API מספק גם תמונה של רמת האמון של ערכי האמון התואמים של הפיקסלים. תמונת האמון היא תמונה מסוג kCVPixelFormatType_OneComponent8
, שבה כל פיקסל תואם לערך בטווח [0, 255]
, בהתאם להסתברות שמשויכת לתווית הסמנטית של כל פיקסל.
משתמשים ב-GARFrame.semanticConfidenceImage
כדי לקבל את תמונת האמון הסמנטית:
CVPixelBuffer confidenceImage = garFrame.semanticConfidenceImage;
if (confidenceImage) {
// Use the semantic image here
} else {
// Semantic images are not available.
// The output image may be missing for the first couple frames before the model has had a
// chance to run yet.
}
תמונות של רמת האמון בפלט אמורות להיות זמינות אחרי כ-1-3 מסגרות מתחילת הסשן, בהתאם למכשיר.
שליחת שאילתה לגבי החלק היחסי של הפיקסלים בתווית סמנטית
אפשר גם לשלוח שאילתה לגבי החלק של הפיקסלים בפריים הנוכחי ששייכים לקבוצה מסוימת, כמו 'שמים'. השאילתה הזו יעילה יותר מאשר החזרת התמונה הסמנטית וביצוע חיפוש לפי פיקסלים של תווית ספציפית. החלק החזרה הוא ערך של float בטווח [0.0, 1.0]
.
משתמשים בפקודה fractionForSemanticLabel:
כדי לקבל את החלק של תווית נתונה:
// Ensure that semantic data is present for the GARFrame.
if (garFrame.semanticImage) {
float fraction = [garFrame fractionForSemanticLabel:GARSemanticLabelSky];
}