Découvrez comment utiliser l'API Scene Semantics dans vos propres applications.
L'API Scene Semantics permet aux développeurs de comprendre la scène entourant l'utilisateur en fournissant des informations sémantiques en temps réel basées sur des modèles de ML. À partir d'une image d'une scène extérieure, l'API renvoie un libellé pour chaque pixel à partir d'un ensemble de classes sémantiques utiles, telles que le ciel, un bâtiment, un arbre, une route, un trottoir, un véhicule, une personne, etc. En plus des libellés de pixel, l'API Scene Semantics propose également des valeurs de confiance pour chaque libellé de pixel et un moyen simple d'interroger la prévalence d'un libellé donné dans une scène extérieure.
De gauche à droite, exemples d'image d'entrée, d'image sémantique des étiquettes de pixel et d'image de confiance correspondante:
Prérequis
Avant de continuer, assurez-vous de bien comprendre les concepts fondamentaux de la RA et de savoir configurer une session ARCore.
Activer Scene Semantics
Dans une nouvelle session ARCore, vérifiez si l'appareil d'un utilisateur est compatible avec l'API Scene Semantics. En raison de contraintes de puissance de traitement, tous les appareils compatibles avec ARCore ne sont pas compatibles avec l'API Scene Semantics.
Pour économiser des ressources, Scene Semantics est désactivé par défaut sur ARCore. Activez le mode sémantique pour que votre application utilise l'API Scene Semantics.
GARSessionConfiguration *configuration = [[GARSessionConfiguration alloc] init];
if ([self.garSession isSemanticModeSupported:GARSemanticModeEnabled]) {
configuration.semanticMode = GARSemanticModeEnabled;
}
NSError *error;
[self.garSession setConfiguration:configuration error:&error];
Obtenir l'image sémantique
Une fois que les sémantiques de scène sont activées, l'image sémantique peut être récupérée. L'image sémantique est une image kCVPixelFormatType_OneComponent8
, où chaque pixel correspond à une étiquette sémantique définie par GARSemanticLabel
.
Utilisez GARFrame.semanticImage
pour acquérir l'image sémantique:
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.
}
Les images sémantiques de sortie doivent être disponibles après environ 1 à 3 cadres à partir du début de la session, en fonction de l'appareil.
Obtenir l'image de confiance
En plus de l'image sémantique, qui fournit un libellé pour chaque pixel, l'API fournit également une image de confiance des valeurs de confiance des pixels correspondants. L'image de confiance est une image kCVPixelFormatType_OneComponent8
, où chaque pixel correspond à une valeur de la plage [0, 255]
, correspondant à la probabilité associée à l'étiquette sémantique pour chaque pixel.
Utilisez GARFrame.semanticConfidenceImage
pour acquérir l'image de confiance sémantique:
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.
}
Les images de confiance de sortie doivent être disponibles après environ 1 à 3 cadres à partir du début de la session, en fonction de l'appareil.
Interroger la fraction de pixels pour un libellé sémantique
Vous pouvez également interroger la fraction de pixels du frame actuel qui appartiennent à une classe particulière, comme le ciel. Cette requête est plus efficace que de renvoyer l'image sémantique et d'effectuer une recherche par pixel d'un libellé spécifique. La fraction renvoyée est une valeur flottante comprise dans la plage [0.0, 1.0]
.
Utilisez fractionForSemanticLabel:
pour obtenir la fraction d'un libellé donné:
// Ensure that semantic data is present for the GARFrame.
if (garFrame.semanticImage) {
float fraction = [garFrame fractionForSemanticLabel:GARSemanticLabelSky];
}