Übersicht zur QR-Codenachverfolgung
So greifen Sie auf das GitHub-Repository für das QR-Codebeispiel zu:
Mit Windows Mixed Reality- und HoloLens-Headsets kann Ihre App QR-Codes in der Umgebung um das Headset erkennen und ein Koordinatensystem an der realen Position jedes Codes einrichten. Sie können Hologramme auch an derselben Position auf mehreren Geräten rendern, um eine gemeinsame Umgebung zu erstellen. Sobald Sie die Webcam Ihres Geräts aktiviert haben, erkennen Sie QR-Codes in den neuesten Versionen Ihrer Projekte. Für optimale Ergebnisse, die in die Produktion gehen, empfehlen wir, den Abschnitt " Bewährte Methoden " zu überprüfen.
In diesem Artikel erfahren Sie mehr über die folgenden Themen:
- Unterstützte Geräte für die QR-Codenachverfolgung
- Unterstützte QR-Codeversionen
- Bewährte Methoden für die QR-Codeerkennung
- Problembehandlung und häufig gestellte Fragen
- Welche Funktionen sind erforderlich?
- Gewusst wie das QR-Code-Tracking-Feature auf HoloLens 2-Geräten funktionieren lassen?
- Wo finde ich die API-Plug-In-Dateien?
- Gewusst wie eine Unity-App für die Verwendung von ARMarkerManager zum Erkennen von QR-Codes vorbereiten?
- Gewusst wie eine Nicht-Unity-App für die Verwendung von OpenXR zum Erkennen von QR-Codes vorbereiten?
- Gewusst wie eine UWP für die Verwendung von Microsoft.MixedReality.QRCodeWatcher vorbereiten?
- Gewusst wie Unity mit der Microsoft.MixedReality.QR.QRCodeWatcher vorbereiten?
- Wie kann ich QR-Codes erstellen?
- Wenn die Nachverfolgung von QR-Code im Allgemeinen nicht funktioniert, was tue ich?
- Was ist die Genauigkeit?
- Wie nah muss ich dem QR-Code sein, um ihn zu erkennen?
- Warum kann ich QR-Codes nicht mit Logos lesen?
- Die QR-Codes werden erkannt, weshalb erhalte ich keine Daten?
- Werden QR-Codes auf Der Ebene "Raum" oder auf App-Ebene gespeichert?
- Wie funktioniert dies mit der zugrunde liegenden Plattform? Wo bleiben sie bestehen?
- Gewusst wie debuggen Sie die App in Visual Studio, wenn die Fehlermeldung "
Microsoft.MixedReality.QR.pdb
Nicht gefunden" angezeigt wird?
Unterstützung für Geräte
Produkt | HoloLens (1. Generation) | HoloLens 2 | Immersive Headsets |
---|---|---|---|
OpenXR | ✔️ (mit der OpenXR-Runtime-Version 113 und der OpenXR-XR_MSFT_scene_marker-Erweiterung) | ||
Mixed Reality Unity-Plug-In | ✔️ (mit OpenXR Runtime Version 113 und Mixed Reality Unity Plugin ARMarkerManager ) |
||
Legacy QR SDK | ✔️ | ✔️ | ✔️ |
Hinweis
Nachfolgend sind die älteren QR-Code-APIs spezifisch. Es wird empfohlen, stattdessen die OpenXR-Implementierung für QR-Codes zu verwenden.
Mithilfe des älteren QR-Code-SDK wird die QR-Codenachverfolgung mit immersiven Windows Mixed Reality-Headsets auf Desktop-PCs unter Windows 10 Version 2004 und höher unterstützt. Verwenden Sie die Microsoft.MixedReality.QRCodeWatcher.IsSupported()
API, um zu ermitteln, ob das Feature auf dem aktuellen Gerät unterstützt wird.
Unterstützte QR-Codeversionen
In der folgenden Tabelle sind die unterstützten und nicht unterstützten QR-Codeversionen aufgeführt:
QR-Codeversionen | |
---|---|
Unterstützt: |
|
Nicht unterstützt: |
|
Bewährte Methoden für die Erkennung von QR-Codes
Ruhezonen rund um QR-Codes
Um ordnungsgemäß gelesen zu werden, erfordern QR-Codes einen Rand, der alle Seiten des Codes umgibt. Dieser Rand darf keine gedruckten Inhalte enthalten und sollte vier Module (ein einzelnes schwarzes Quadrat im Code) breit sein.
Die offizielle QR-Codedokumentation enthält weitere Informationen zu Ruhezonen.
Beleuchtung und Hintergrund
Die Erkennungsqualität von QR-Code reagiert auf wechselnde Beleuchtungs- und Hintergrundverhältnisse.
Unter normalen Beleuchtungsbedingungen bieten Sie ausreichend Kontrast für die Schwarzweißmodule, um eine bessere Leistung zu erzielen.
Bei extremen Lichtverhältnissen mit heller Beleuchtung oder dunkler Kulisse können Sie versuchen, den Kontrast zu reduzieren und anzupassen, wodurch die QR-Code-Erkennungsrate verbessert werden kann. Der weiße Hintergrund im QR-Code kann von 255 abwärts reduziert werden.
Größe von QR-Codes
Windows Mixed Reality- und HoloLens-Geräte funktionieren nicht mit QR-Codes mit Seiten, die kleiner als 5 cm sind.
Für QR-Codes mit Seiten von 5 cm bis 10 cm muss das Gerät relativ nah sein, um den Code zu erkennen. Es kann länger als der Durchschnitt dauern, um den Code zu erkennen.
Die genaue Zeit zum Erkennen von Codes hängt nicht nur von der Größe der QR-Codes ab, sondern auch davon, wie weit Sie vom Code entfernt sind. Näher an den Code heranzugehen, hilft dabei, Größenprobleme zu beheben.
Abstand und Winkelposition gegenüber dem QR-Code
Die Überwachungskameras besitzen eine eingeschränkte Detailauflösung. Bei kleinen Codes (kleiner als 10 cm entlang der Seiten) müssen Sie relativ nah sein. Für einen QR-Code der Version 1, der von 10 cm bis 25 cm groß ist, beträgt der mindeste Erkennungsabstand zwischen 0,15 Metern und 0,5 Metern.
Der Erkennungsabstand für die Größe nimmt linear zu, hängt aber auch von der unterstützten QR-Version oder Modulgröße ab. Je höher die Version, desto kleiner die Module, die nur von einer näheren Position erkannt werden können. Sie können auch Mikro-QR-Codes ausprobieren, wenn der Abstand der Erkennung länger sein soll. Die QR-Erkennung funktioniert in einem Winkelbereich von += 45°, um sicherzustellen, dass die Auflösung zum Erkennen des Codes ausreicht.
Weitere Überlegungen zur Erkennung:
- QR-Codes auf gekrümmten Oberflächen werden nicht unterstützt.
- Die Ausrichtung in der Ebene wird unterstützt. Außerhalb des Flugzeugs sollte <= +-45 aussehen, um eine bessere Erkennung zu haben.
- Die physische Größe des QR-Codes sollte Module von mindestens 2/3 Pixeln aufweisen. Hinweis: Höhere Versionen von QR-Codes verfügen über kleinere Module.
Die Kompromissbeziehung zwischen Entfernung und Größe des QR-Codes zur optimalen Erkennung finden Sie in der folgenden Abbildung:
Wichtig
Stellen Sie immer sicher, dass Genügend Kontrast und ein richtiger Rahmen vorhanden sind.
Verwalten von QR-Codedaten
Windows Mixed Reality- und HoloLens-Geräte erkennen QR-Codes auf Systemebene des Treibers. Wenn das Gerät neu gestartet oder der Treiber neu gestartet wird, wird der erkannte QR-Codesverlauf gelöscht. NEU erkannte QR-Codes werden als neue Objekte behandelt.
Es wird empfohlen, Ihre App so zu konfigurieren, dass QR-Codes, die älter als ein bestimmter Zeitstempel sind, ignoriert werden, der innerhalb der App angegeben werden kann. Die QR-Code-API gibt die Uhrzeit an, zu der die letzte Erkennung stattgefunden hat. Die meisten App-Entwickler verwenden die Systemzeit, zu der die App gestartet wird, um zu bestimmen, wann ein QR-Code erkannt wird.
QR-Codedaten sind nicht appspezifisch. Beim Starten der App wird eine Liste der verfügbaren QR-Codes bereitgestellt. Der App-Entwickler bestimmt, welche QR-Codes für diese App relevant sind.
Platzierung von QR-Codes im Raum
Empfehlungen zur Platzierung von QR-Codes finden Sie unter Umgebungsüberlegungen für HoloLens.
Häufig gestellte Fragen und Problembehandlung
Welche Funktionen sind erforderlich?
Um die QR-Codeverfolgung in Ihrer HoloLens-Anwendung zu aktivieren, fügen Sie die Webcamfunktion zum Manifest der Anwendung hinzu. Wenn Sie in Unity entwickeln, können Sie dies über die Spielereinstellungen konfigurieren.
Darüber hinaus werden Benutzer möglicherweise vom Dialogfeld "Berechtigungen" aufgefordert, Ihre App-Webcamberechtigungen zu erteilen. Dies geschieht nur einmal während der Lebensdauer einer App. In Fällen, wie z. B. die App, die den Webcamzugriff explizit anfordert, wird das Dialogfeld nicht wieder angezeigt.
Für Unity-Apps mit der WebCam-Funktion kann die Aktivierung ARMarkerManager
in einer Szene das Dialogfeld für die Webcamberechtigung auslösen, damit sie angezeigt wird.
Bei nativen OpenXR C++-Apps können anfängliche Aufrufe von xrComputeNewSceneMSFT mit XrNewSceneComputeInfoMSFT::requestedFeatures
enthaltenden XR_SCENE_COMPUTE_FEATURE_MARKER_MSFT
Berechtigungen das Berechtigungsdialogfeld auslösen.
Hinweis
Nachfolgend sind die älteren QR-Code-APIs spezifisch. Es wird empfohlen, stattdessen die OpenXR-Implementierung für QR-Codes zu verwenden.
Sie benötigen die Webcamfunktion, die Ihrem Manifest hinzugefügt wurde (Kontrollkästchen in Unity-Funktionen). Wenn Sie als Standard-UWP-Projekt erstellen, befindet es sich auch im Projektmappenprojekt "package.appxmanifest".
Fordern Sie im älteren QR-Code-SDK den Zugriff an, indem Sie die folgende Methode aufrufen:
#if WINDOWS_UWP
async QRCodeWatcher.RequestAccessAsync();
#endif
Der Zugriffsstatus sollte sein (status == QRCodeWatcherAccessStatus::Allowed)
.
Wenn der Zugriff verweigert wird, gibt das Feature den Zugriff zurück, wenn Sie die QRTracking
Datei starten.
Diese API sollte aufgerufen werden, bevor Sie das QRCodeWatcher
Objekt erstellen.
Wenn Sie das Projekt aus Unity ausführen, müssen Sie auch sicherstellen, dass Sie über den UI-Thread aufrufen. Andernfalls wird die API immer abgelehnt. Weitere Informationen finden Sie unter "AppCallbacks"-Klasse im Unity-Handbuch.
Weitere Informationen zum Einrichten Ihres Projekts für Unity finden Sie unter "Konfigurieren von Unity für Windows Mixed Reality".
Gewusst wie das QR-Code-Tracking-Feature auf HoloLens 2-Geräten funktionieren lassen?
DIE QR-Nachverfolgung wird auf HoloLens 2 automatisch ausgeführt, und Sie benötigen die "Webcam"-Funktion, die Ihrer App hinzugefügt wird.
Wo finde ich die API-Plug-In-Dateien?
Anwendungen sollten die OpenXR-Runtime von HoloLen zum Erkennen von QR-Codes verwenden. OpenXR für Windows Mixed Reality (113.2403.5001 oder höher) bietet QR-Codeunterstützung auf HoloLens-Geräten.
Für Unity-Apps wird die Unterstützung von QR-Code über die Komponente bereitgestellt, die ARMarkerManager
mit dem Mixed Reality OpenXR-Plug-In bereitgestellt wird.
Verwenden Sie die OpenXR-XR_MSFT_scene_marker-Erweiterung, um QR-Code in Nicht-Unity-Apps zu unterstützen.
Hinweis
Nachfolgend sind die älteren QR-Code-APIs spezifisch. Es wird empfohlen, stattdessen die OpenXR-Implementierung für QR-Codes zu verwenden.
Alle erforderlichen Dateien und Dokumentationen finden Sie hier auf NuGet:
Gewusst wie eine Unity-App für die Verwendung von ARMarkerManager zum Erkennen von QR-Codes vorbereiten?
In Unity-Apps wird die ARMarkerManager
Komponente verwendet, um zu behandeln, wie die QR-Codeerkennung in einer physischen Umgebung in einer Szene dargestellt wird. ARMarkerManager
liefert:
Ereignisse zum Benachrichtigen von Abonnenten, wenn ein erkannter QR-Code dem Vorgesetzten hinzugefügt, aktualisiert oder entfernt wurde.
Eine Sammlung von
ARMarker
Trackables für QR-Codes unter Erkennung.Methoden, die Daten für QR-Codes zurückgeben, wie durch nachverfolgbare ID angegeben.
Um sie in Ihrer App zu verwenden ARMarkerManager
, müssen Sie das OpenXR-Plug-In-Paket für Mixed Reality importieren.
So importieren Sie das Paket:
- Laden Sie das Mixed Reality-Featuretool herunter , und führen Sie es aus.
- Installieren Sie das OpenXR-Plug-In.
Ausführliche Anweisungen zur Verwendung des Tools finden Sie unter "Willkommen beim Mixed Reality Feature Tool ".
Das allgemeine Verfahren neben:
- Aktivieren Sie in Ihrem Unity-Projekt WebCam-Funktionen .
- Erstellen Sie ein Prefab, und fügen Sie die
ARMarker
Komponente wie gezeigt an:
- Öffnen Sie eine Szene, in der QR-Codes beim Ausführen erkannt werden sollen.
- Fügen Sie
ARMarkerManager
ein GameObject in Ihrer Szene an, und legen Sie Marker Prefab auf den erstellten Prefab fest.
Ausführlichere Anweisungen und Informationen finden Sie in Unity zu QR-Codes.
Ein Beispiel für die Verwendung von QR-Codes in Ihrer Unity-App finden Sie im QR-Codebeispielszenario auf GitHub.
Gewusst wie eine Nicht-Unity-App für die Verwendung von OpenXR zum Erkennen von QR-Codes vorbereiten?
Die QR-Codeerkennung in OpenXR wird über die XR_MSFT_scene_marker-Erweiterung bereitgestellt. Diese Erweiterung ermöglicht das Nachverfolgen mehrerer QR-Codes und kann Größe, Position, letzter Erkennungszeitstempel, UUID und gepufferte QR-Codedaten für erkannte QR-Codes bereitstellen.
Um die Unterstützung von QR-Code zu aktivieren, müssen sowohl die XR_MSFT_scene_marker- als auch XR_MSFT_scene_understanding Erweiterungen aktiviert sein.
Eine detaillierte Schritt-für-Schritt-Anleitung finden Sie in der Übersicht über die XR_MSFT_scene_marker Erweiterung in der OpenXR 1.0-Spezifikation.
Ein Beispiel für die Verwendung von QR-Codes finden Sie unter Scene_QRCode.cpp im SceneUnderstandingUwp-Beispiel auf GitHub.
Gewusst wie eine UWP für die Verwendung von Microsoft.MixedReality.QRCodeWatcher vorbereiten?
Hinweis
Nachfolgend sind die älteren QR-Code-APIs spezifisch. Es wird empfohlen, stattdessen die OpenXR-Implementierung für QR-Codes zu verwenden.
Verwenden Sie das NuGet-Paket, um die erforderlichen Dateien zu entpacken.
Fügen Sie einen Verweis auf das
Microsoft.MixedReality.QR.winmd
Projekt hinzu, und beginnen Sie mit der Verwendung der API.Fügen Sie die richtigen Architekturversionen der Plug-Ins hinzu und verwenden Sie sie entsprechend im Build.
Gewusst wie Unity mit der Microsoft.MixedReality.QR.QRCodeWatcher vorbereiten?
Hinweis
Nachfolgend sind die älteren QR-Code-APIs spezifisch. Es wird empfohlen, stattdessen die OpenXR-Implementierung für QR-Codes zu verwenden.
Verwenden Sie NuGet für Unity, und zeigen Sie oben auf das NuGet-Paket.
Wie kann ich QR-Codes erstellen?
Sehen Sie sich einen QR-Code-Generator an.
Wenn die Nachverfolgung von QR-Code im Allgemeinen nicht funktioniert, was tue ich?
Ist die QR-Code-Version eine unterstützte Version? Wir unterstützen die Versionen mit hoher Dichte wie Version 40 nicht. Nichts über Version 10 ist garantiert; Versionen über 20 werden nicht unterstützt.
Sind Sie nah genug mit dem QR-Code? Sehen Sie Abstand und Winkelposition vom QR-Code.
Wie ist die Beleuchtung? Es gibt ein bekanntes Problem, bei dem die Erkennung schwierig wird, wenn sich der QR-Code auf einem dunklen Umgebungshintergrund befindet– der QR-Code wird aufgrund eines hohen Kontrasts an der Kamera ausgewaschen. Weitere Informationen finden Sie unter Beleuchtung und Hintergrund.
Was ist die Genauigkeit?
Wenn sie in einem einzelnen Frame erkannt wird, wird davon ausgegangen, dass die Größe höchstens einen Fehler von 1 % aus der tatsächlichen Größe aufweist. Ein Code von 10 cm kann z. B. bis zu +/- 1 mm in gemessener Größe betragen. Unter fortlaufender Erkennung kann sich die Position eines Codes um bis zu +/- 2,5 mm bewegen. Nachdem Sie sich außerhalb des Erkennungsbereichs bewegt haben, liegt die Position einer vorherigen Erkennung bis zur Barmherzigkeit des Kartenfehlers.
Wie nah muss ich dem QR-Code sein, um ihn zu erkennen?
Die Entfernung hängt offensichtlich von der Größe des QR-Codes und auch von der Version ab. Weitere Informationen finden Sie unter Abstand und Winkelposition aus dem QR-Code.
Bei HoloLens 2 reicht der Mindesterkennungsabstand von 0,25 Metern bis 0,5 Meter für einen QR-Code der Version 1 von 5 cm seiten bis 25 cm. Der kleinste Code kann von etwa 0,5 m für den kleinsten Code bis zu zwei Meter für die größere erkannt werden.
Unter Windows Mixed Reality werden diese Abstände für die Größen halbiert.
Für alle Codes, die größer sind, wird der Erkennungsabstand für die Größe linear erhöht. Bei kleinerem Code tritt die Erkennung einfach nicht auf - 4-5 cm ist die kleinste Erkennung, die wir erkennen können.
Warum kann ich QR-Codes nicht mit Logos lesen?
QR-Codes mit Logos werden nicht unterstützt.
Die QR-Codes werden erkannt, weshalb erhalte ich keine Daten?
Wenn die Plattform den QR-Code nicht decodieren kann, gibt es keine Daten. Sie können den Datenstrom verwenden und die Daten mithilfe von Open-Source-Code interpretieren.
Einige Features, z. B. das Anfügen von Strukturen, werden nicht unterstützt.
Weitere Informationen finden Sie unter den unterstützten QR-Codeversionen.For more information, see what QR code versions are supported?.
Werden QR-Codes auf Der Ebene "Raum" oder auf App-Ebene gespeichert?
QR-Codes werden auf Systemebene in der Treibersitzung oder Startsitzung auf HoloLens gespeichert. Weitere Informationen finden Sie unter Verwalten von QR-Codedaten.
Wie funktioniert dies mit der zugrunde liegenden Plattform? Wo bleiben sie bestehen?
Erkannte QR-Codes werden vom Treiber im Arbeitsspeicher gespeichert.
Gewusst wie debuggen Sie die App in Visual Studio, wenn die Fehlermeldung "Microsoft.MixedReality.QR.pdb
Nicht gefunden" angezeigt wird?
Hinweis
Nachfolgend sind die älteren QR-Code-APIs spezifisch. Es wird empfohlen, stattdessen die OpenXR-Implementierung für QR-Codes zu verwenden.
Das Laden des Microsoft.MixedReality.QR.dll
Symbols wurde übersprungen, da es nicht in der Liste der enthaltenen Module angegeben ist.
Schritte zum Reproduzieren
Hinweis
Nachfolgend sind die älteren QR-Code-APIs spezifisch. Es wird empfohlen, stattdessen die OpenXR-Implementierung für QR-Codes zu verwenden.
Führen Sie die Schritte aus, um dieses Verhalten zu reproduzieren:
- Installieren von Microsoft.MixedReality.QR (NuGet) und MRTK
- Versuchen Sie, zu debuggen
Sie sollten in der Lage sein, die App mit Microsoft.MixedReality.QR.dll zu debuggen, die DLL wird jedoch nicht gefunden:
Empfohlene Lösung
Hinweis
Nachfolgend sind die älteren QR-Code-APIs spezifisch. Es wird empfohlen, stattdessen die OpenXR-Implementierung für QR-Codes zu verwenden.
Wir arbeiten daran, der nächsten Version Symbole hinzuzufügen. In der Zwischenzeit sollten Sie ihre App weiterhin debuggen können, indem Sie die DLL in den Visual Studio-Optionen ausschließen:
Weitere Informationen finden Sie unter Konfigurieren der Einstellungen von Visual Studio.
Gibt es eine Beschränkung der Anzahl der QR-Codes, die in einer Sitzung gescannt werden können?
Innerhalb von 10 Minuten werden 100 QR-Codes auf Systemebene gespeichert.
Hat sich der Glättungsprozess von QR-Code geändert?
Der Glättungsprozess des QR-Codes wurde nach 20H2 geändert, von der Glättung zur Größenglättung. Um das Verhalten auf den vorherigen Glättungsprozess zurückzuverwenden, würde man einen Glättungsalgorithmus anwenden, wenn die neuen QR-Code-Pose-Daten innerhalb von 5 Sekunden oder 10 cm vom zuvor erkannten Frame erkannt werden. Die Transformationsdaten werden über ein gewichtetes Verhältnis von 90 % des aktuellen Frames mit 10 % des vorherigen Frames gemischt.