Scene Semantics API in Ihren eigenen Apps verwenden
Mit der Scene Semantics API können Entwickler die Umgebung des Nutzers verstehen, indem sie auf ML-Modellen basierende semantische Echtzeitinformationen bereitstellt. Bei einem Bild einer Außenszene gibt die API ein Label für jedes Pixel über eine Reihe nützlicher semanischer Klassen zurück, z. B. Himmel, Gebäude, Baum, Straße, Bürgersteig, Fahrzeug, Person und mehr. Zusätzlich zu den Pixellabels bietet die Scene Semantics API auch Konfidenzwerte für jedes Pixellabel und eine einfache Möglichkeit, die Verbreitung eines bestimmten Labels in einer Außenszene abzufragen.
<ph type="x-smartling-placeholder">
Beispiele für ein Eingabebild, das semantische Bild von Pixellabels und das entsprechende Konfidenzbild (von links nach rechts):
Vorbereitung
Machen Sie sich mit den grundlegenden AR-Konzepten vertraut. und Konfigurieren einer ARCore-Sitzung beschrieben, bevor du fortfährst.
Szenensemantik aktivieren
Prüfen Sie in einer neuen ARCore-Sitzung, ob das Gerät eines Nutzers die Scene Semantics API unterstützt. Aufgrund von Einschränkungen bei der Verarbeitungsleistung unterstützen nicht alle ARCore-kompatiblen Geräte die Scene Semantics API.
Um Ressourcen zu sparen, ist die Szenensemantik in ARCore standardmäßig deaktiviert. Aktivieren Sie den semantischen Modus, damit Ihre Anwendung die Scene Semantics API verwendet.
GARSessionConfiguration *configuration = [[GARSessionConfiguration alloc] init];
if ([self.garSession isSemanticModeSupported:GARSemanticModeEnabled]) {
configuration.semanticMode = GARSemanticModeEnabled;
}
NSError *error;
[self.garSession setConfiguration:configuration error:&error];
Semantisches Bild abrufen
Sobald die Szenensemantik aktiviert ist, kann das semantische Bild abgerufen werden. Das semantische Bild ist ein kCVPixelFormatType_OneComponent8
-Bild, wobei jedes Pixel einem semantischen Label entspricht, das durch GARSemanticLabel
definiert wird.
Verwenden Sie GARFrame.semanticImage
, um das semantische Bild zu übernehmen:
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.
}
Semantische Ausgabebilder sollten je nach Gerät nach etwa 1–3 Frames nach Beginn der Sitzung verfügbar sein.
Bild für das Konfidenzniveau abrufen
Zusätzlich zum semantischen Bild, das ein Label für jedes Pixel bereitstellt, liefert die API auch ein Konfidenzbild der entsprechenden Pixel-Konfidenzwerte. Das Konfidenzbild ist ein kCVPixelFormatType_OneComponent8
-Bild, wobei jedes Pixel einem Wert im Bereich [0, 255]
entspricht, der der Wahrscheinlichkeit entspricht, die dem semantischen Label für jedes Pixel zugeordnet ist.
Verwenden Sie GARFrame.semanticConfidenceImage
, um das Bild für die semantische Konfidenz zu erhalten:
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.
}
Die ausgegebenen Konfidenzbilder sollten je nach Gerät nach etwa 1–3 Frames nach Beginn der Sitzung verfügbar sein.
Teil der Pixel für ein semantisches Label abfragen
Sie können auch den Anteil der Pixel im aktuellen Frame abfragen, die zu einer bestimmten Klasse gehören, z. B. „Himmel“. Diese Abfrage ist effizienter, als das semantische Bild zurückzugeben und eine pixelbasierte Suche nach einem bestimmten Label durchzuführen. Der zurückgegebene Bruch ist eine Gleitkommazahl im Bereich [0.0, 1.0]
.
Verwenden Sie fractionForSemanticLabel:
, um den Bruch für ein bestimmtes Label zu ermitteln:
// Ensure that semantic data is present for the GARFrame.
if (garFrame.semanticImage) {
float fraction = [garFrame fractionForSemanticLabel:GARSemanticLabelSky];
}