Overzicht van het bijhouden van QR-code
Ga als volgt te werk om toegang te krijgen tot de GitHub-opslagplaats voor het QR-codevoorbeeld:
Met Windows Mixed Reality- en HoloLens-headsets kan uw app QR-codes detecteren in de omgeving rond de headset, waarbij een coördinaatsysteem wordt gecreëerd op de werkelijke locatie van elke code. U kunt ook hologrammen weergeven op dezelfde locatie op meerdere apparaten om een gedeelde ervaring te maken. Zodra u de webcam van uw apparaat inschakelt, herkent u QR-codes in de nieuwste versies van uw projecten. Voor de beste resultaten die in productie gaan, raden we u aan de sectie best practices te bekijken.
Dit artikel biedt meer informatie over:
- Ondersteunde apparaten voor het bijhouden van QR-code
- Ondersteunde QR-codeversies
- Aanbevolen procedures voor detectie van QR-code
- Problemen oplossen en veelgestelde vragen
- Welke mogelijkheden zijn nodig?
- Hoe kan ik de functie voor het bijhouden van QR-code werkt op HoloLens 2-apparaten?
- Waar vind ik de API-invoegtoepassingsbestanden?
- Hoe kan ik een Unity-app voorbereiden om ARMarkerManager te gebruiken om QR-codes te detecteren?
- Hoe kan ik een niet-Unity-app voorbereiden om OpenXR te gebruiken om QR-codes te detecteren?
- Hoe kan ik een UWP voorbereiden om Microsoft.MixedReality.QR.QRCodeWatcher te gebruiken?
- Hoe kan ik Unity voorbereiden met Microsoft.MixedReality.QR.QRCodeWatcher?
- Hoe kan ik QR-codes maken?
- Wat moet ik doen als het bijhouden van QR-code niet werkt in het algemeen?
- Wat is de nauwkeurigheid?
- Hoe dicht moet ik bij de QR-code zijn om deze te detecteren?
- Waarom kan ik geen QR-codes lezen met logo's?
- De QR-codes worden gedetecteerd, dus waarom krijg ik geen gegevens?
- Worden QR-codes op het niveau 'ruimte' of app-niveau opgeslagen?
- Hoe werkt dat met het onderliggende platform? Waar blijven ze behouden?
- Hoe kan ik fouten opsporen in de app in Visual Studio wanneer ik het foutbericht '
Microsoft.MixedReality.QR.pdb
Niet gevonden' ontvang?
Ondersteuning voor apparaten
Product | HoloLens 1e generatie | HoloLens 2 | Immersive headsets |
---|---|---|---|
OpenXR | ✔️ (met OpenXR Runtime versie 113 en OpenXR XR_MSFT_scene_marker extensie) | ||
Mixed Reality Unity-invoegtoepassing | ✔️ (met OpenXR Runtime versie 113 en Mixed Reality Unity Plugin ARMarkerManager ) |
||
Verouderde QR SDK | ✔️ | ✔️ | ✔️ |
Notitie
Het volgende is specifiek voor de verouderde QR-code-API's. U wordt aangeraden in plaats daarvan de OpenXR-implementatie voor QR-codes te gebruiken.
Het bijhouden van QR-code met insluitende Windows Mixed Reality-headsets op desktop-pc's wordt ondersteund in Windows 10 versie 2004 en hoger. Gebruik de Microsoft.MixedReality.QRCodeWatcher.IsSupported()
API om te bepalen of de functie wordt ondersteund op het huidige apparaat.
Ondersteunde QR-codeversies
De volgende tabel bevat de ondersteunde en niet-ondersteunde QR-codeversies:
QR-codeversies | |
---|---|
Ondersteund: |
|
Niet ondersteund: |
|
Aanbevolen procedures voor detectie van QR-code
Rustige zones rond QR-codes
Om correct te kunnen worden gelezen, hebben QR-codes een marge nodig rond alle zijden van de code. Deze marge mag geen afgedrukte inhoud bevatten en mag vier modules (één zwart vierkant in de code) breed zijn.
De officiële QR-codedocumentatie bevat meer informatie over rustige zones.
Verlichting en achtergrond
De kwaliteit van de QR-codedetectie is vatbaar voor verschillende verlichting en achtergrond.
Zorg onder normale lichtomstandigheden voor voldoende contrast voor de zwart-wit modules voor betere prestaties.
In extreme lichtomstandigheden met heldere verlichting of donkere achtergrond kunt u proberen om het contrast te verminderen en aan te passen, waardoor de detectiesnelheid van QR-code kan worden verbeterd. De witte achtergrond in de QR-code kan worden verminderd van 255 naar beneden.
Grootte van QR-codes
Windows Mixed Reality- en HoloLens-apparaten werken niet met QR-codes met zijden kleiner dan 5 cm.
Voor QR-codes met zijden van 5 cm tot 10 cm moet het apparaat redelijk dicht bij het detecteren van de code liggen. Het kan langer duren dan het gemiddelde om de code te detecteren.
De exacte tijd voor het detecteren van codes is niet alleen afhankelijk van de grootte van de QR-codes, maar hoe ver u zich van de code bevindt. Als u dichter bij de code komt, kunnen problemen met de grootte worden verschoven.
Afstand en hoekpositie van de QR-code
De trackingcamera's kunnen alleen een bepaald detailniveau detecteren. Voor kleine codes (minder dan 10 cm langs de zijkanten) moet u redelijk dicht zijn. Voor een QR-code van versie 1, variërend van 10 cm tot 25 cm, is de minimale detectieafstand tussen 0,15 meter en 0,5 meter.
De detectieafstand voor grootte neemt lineair toe, maar is ook afhankelijk van de ondersteunde QR-versie of modulegrootte. Hoe hoger de versie, hoe kleiner de modules, die alleen vanuit een dichtere positie kunnen worden gedetecteerd. U kunt ook micro-QR-codes proberen als u wilt dat de detectieafstand langer is. QR-detectie werkt met een reeks hoeken += 45 graden om ervoor te zorgen dat we de juiste resolutie hebben om de code te detecteren.
Andere detectieoverwegingen:
- QR-codes op gekromde oppervlakken worden niet ondersteund.
- De afdrukstand in het vlak wordt ondersteund. Uit het vliegtuig moet <= +-45 zijn om beter te kunnen detecteren.
- De fysieke grootte van de QR-code moet modules van ten minste 2/3 pixels bevatten. Opmerking: hogere versies van QR-codes hebben kleinere modules.
Zie de volgende grafiek voor de afwegingsrelatie tussen afstand en grootte van de QR-code voor optimale detectie:
Belangrijk
Zorg er altijd voor dat u voldoende contrast en een juiste rand hebt.
QR-codegegevens beheren
Windows Mixed Reality- en HoloLens-apparaten detecteren QR-codes op systeemniveau in het stuurprogramma. Wanneer het apparaat opnieuw wordt opgestart of het stuurprogramma opnieuw wordt opgestart, wordt de geschiedenis van de gedetecteerde QR-codes gewist. QR-codes worden opnieuw gedetecteerd als nieuwe objecten.
U wordt aangeraden uw app te configureren om QR-codes te negeren die ouder zijn dan een specifieke tijdstempel, die in de app kan worden opgegeven. De QR Code-API geeft de tijd aan waarop de laatste detectie is uitgevoerd. De meeste app-ontwikkelaars gebruiken de systeemtijd wanneer de app wordt gestart om te bepalen hoe lang een QR-code wordt gedetecteerd.
QR-codegegevens zijn niet app-specifiek. Bij het starten van de app ziet u een lijst met beschikbare QR-codes. De app-ontwikkelaar bepaalt welke QR-codes relevant zijn voor deze app.
Plaatsing van QR-code in een ruimte
Raadpleeg omgevingsoverwegingen voor HoloLens voor aanbevelingen over waar en hoe u QR-codes plaatst.
Problemen oplossen en veelgestelde vragen
Welke mogelijkheden zijn nodig?
Als u het bijhouden van QR-code in uw HoloLens-toepassing wilt inschakelen, voegt u de webcamfunctie toe aan het manifest van de toepassing. Als u in Unity ontwikkelt, kunt u dit configureren vanuit de spelerinstellingen.
Bovendien kunnen gebruikers worden gevraagd door het dialoogvenster machtigingen om uw app-webcammachtigingen te verlenen. Dit gebeurt slechts eenmaal gedurende de levensduur van een app. In gevallen zoals de app die expliciet webcamtoegang aanvraagt, wordt het dialoogvenster niet opnieuw weergegeven.
Voor Unity-apps met de webcam-mogelijkheid kan het dialoogvenster voor de webcammachtiging inschakelen ARMarkerManager
in een scène worden geactiveerd.
Voor systeemeigen OpenXR C++-apps kunnen initiële aanroepen naar xrComputeNewSceneMSFT met XrNewSceneComputeInfoMSFT::requestedFeatures
daarin XR_SCENE_COMPUTE_FEATURE_MARKER_MSFT
het dialoogvenster machtigingen activeren.
Notitie
Het volgende is specifiek voor de verouderde QR-code-API's. U wordt aangeraden in plaats daarvan de OpenXR-implementatie voor QR-codes te gebruiken.
U hebt de webcamfunctie nodig die is toegevoegd aan uw manifest (selectievakje in Unity Capabilities). Als u bouwt als een standaard UWP-project, vindt u dit ook in het package.appxmanifest in het oplossingsproject.
In de verouderde QR-code-SDK vraagt u toegang aan door de volgende methode aan te roepen:
#if WINDOWS_UWP
async QRCodeWatcher.RequestAccessAsync();
#endif
De toegangsstatus moet zijn (status == QRCodeWatcherAccessStatus::Allowed)
.
Als de toegang wordt geweigerd, retourneert de functie de toegang geweigerd wanneer u de QRTracking
functie start.
Deze API moet worden aangeroepen voordat u het QRCodeWatcher
object maakt.
Als u het project uitvoert vanuit Unity, moet u er ook voor zorgen dat u aanroept vanuit de UI-thread. Anders retourneert de API altijd geweigerd. Zie de AppCallbacks-klasse in de Unity Manual voor meer informatie.
Zie Unity configureren voor Windows Mixed Reality voor meer informatie over het instellen van uw project voor Unity.
Hoe kan ik de functie voor het bijhouden van QR-code werkt op HoloLens 2-apparaten?
QR-tracering wordt automatisch uitgevoerd op HoloLens 2 en u hebt de mogelijkheid 'webcam' nodig die aan uw app is toegevoegd.
Waar vind ik de API-invoegtoepassingsbestanden?
Toepassingen moeten gebruikmaken van de OpenXR Runtime van HoloLen voor het detecteren van QR-codes. OpenXR voor Windows Mixed Reality (113.2403.5001 of hoger) biedt QR-codeondersteuning op HoloLens-apparaten.
Voor Unity-apps wordt ondersteuning voor QR-code geboden via het onderdeel dat wordt geleverd met de ARMarkerManager
Mixed Reality OpenXR-invoegtoepassing.
Gebruik de OpenXR XR_MSFT_scene_marker-extensie voor ondersteuning van QR-code in niet-Unity-apps.
Notitie
Het volgende is specifiek voor de verouderde QR-code-API's. U wordt aangeraden in plaats daarvan de OpenXR-implementatie voor QR-codes te gebruiken.
Alle vereiste bestanden en documentatie vindt u hier op NuGet:
Hoe kan ik een Unity-app voorbereiden om ARMarkerManager te gebruiken om QR-codes te detecteren?
In Unity-apps wordt het ARMarkerManager
onderdeel gebruikt om te bepalen hoe QR-codedetectie in een fysieke omgeving wordt weergegeven in een scène. ARMarkerManager
Biedt:
Gebeurtenissen voor het melden van abonnees wanneer een gedetecteerde QR-code is toegevoegd aan de manager, bijgewerkt of verwijderd.
Een verzameling
ARMarker
trackables voor QR-codes onder detectie.Methoden voor het retourneren van gegevens voor QR-codes zoals opgegeven door traceerbare id.
Als u de app wilt gebruiken ARMarkerManager
, moet u het Mixed Reality OpenXR-invoegtoepassingspakket importeren.
Het pakket importeren:
- Download en voer het Hulpprogramma voor mixed reality-functies uit.
- Installeer de OpenXR-invoegtoepassing.
Zie Welkom bij het Hulpprogramma voor mixed reality-functies voor gedetailleerde instructies over het gebruik van het hulpprogramma.
De algemene procedure naast:
- Schakel in uw Unity-project WebCam-mogelijkheden in.
- Maak een prefab en koppel het
ARMarker
onderdeel zoals wordt weergegeven:
- Open een scène waarin u wilt dat QR-codes worden gedetecteerd tijdens het uitvoeren.
- Koppel
ARMarkerManager
deze aan een GameObject in uw scène en stel Marker Prefab in op de prefab die u hebt gemaakt.
Ga naar QR-codes in Unity voor meer gedetailleerde instructies en informatie.
Zie het voorbeeldscenario voor QR-code op GitHub voor een voorbeeld van het gebruik van QR-codes in uw Unity-app.
Hoe kan ik een niet-Unity-app voorbereiden om OpenXR te gebruiken om QR-codes te detecteren?
Detectie van QR-code in OpenXR wordt aangeboden via de XR_MSFT_scene_marker-extensie . Met deze extensie kunnen meerdere QR-codes worden bijgehouden en kunnen grootte, positie, tijdstempel van laatste detectie, UUID en gebufferde QR-codegegevens voor gedetecteerde QR-codes worden opgegeven.
Als u ondersteuning voor QR-code wilt inschakelen, moeten zowel de XR_MSFT_scene_marker als XR_MSFT_scene_understanding-extensies zijn ingeschakeld.
Zie het overzicht van de XR_MSFT_scene_marker-extensie in de specificatie OpenXR 1.0 voor een gedetailleerde stapsgewijze beschrijving.
Zie Scene_QRCode.cpp in het voorbeeld SceneUnderstandingUwp op GitHub voor een voorbeeld van het gebruik van QR-codes.
Hoe kan ik een UWP voorbereiden om Microsoft.MixedReality.QR.QRCodeWatcher te gebruiken?
Notitie
Het volgende is specifiek voor de verouderde QR-code-API's. U wordt aangeraden in plaats daarvan de OpenXR-implementatie voor QR-codes te gebruiken.
Gebruik het NuGet-pakket om de vereiste bestanden uit te pakken.
Voeg een verwijzing toe naar het
Microsoft.MixedReality.QR.winmd
in uw project en begin met het gebruik van de API.Voeg de juiste architectuurversies van de invoegtoepassingen toe en gebruik ze dienovereenkomstig in de build.
Hoe kan ik Unity voorbereiden met Microsoft.MixedReality.QR.QRCodeWatcher?
Notitie
Het volgende is specifiek voor de verouderde QR-code-API's. U wordt aangeraden in plaats daarvan de OpenXR-implementatie voor QR-codes te gebruiken.
Gebruik NuGet voor Unity en wijs het Bovenstaande NuGet-pakket aan.
Hoe kan ik QR-codes maken?
Bekijk een QR-codegenerator.
Wat moet ik doen als het bijhouden van QR-code niet werkt in het algemeen?
Is de QR-codeversie een ondersteunde versie? De high-densityversies, zoals versie 40, worden niet ondersteund. Niets boven versie 10 is gegarandeerd; versies boven 20 worden niet ondersteund.
Bent u dicht genoeg bij de QR-code? Afstand en hoekpositie van de QR-code bekijken.
Hoe is de verlichting? Er is een bekend probleem waarbij detectie moeilijk wordt wanneer de QR-code zich op een donkere omgevingsachtergrond bevindt. De QR-code wordt aan de camera gewassen vanwege een hoog contrast. Zie verlichting en achtergrond voor meer informatie.
Wat is de nauwkeurigheid?
Wanneer de grootte in één frame wordt gedetecteerd, is de grootte naar verwachting maximaal 1% van de werkelijke grootte. Een code van 10 cm kan bijvoorbeeld maximaal +/- 1 mm uit zijn in gemeten grootte. Bij continue detectie kan de positie van een code tot +/- 2,5 mm rondlopen. Zodra u buiten het detectiebereik bent gegaan, is de positie van een eerdere detectie afhankelijk van de kaartfout.
Hoe dicht moet ik bij de QR-code zijn om deze te detecteren?
De afstand hangt uiteraard af van de grootte van de QR-code en ook welke versie het is. Zie de afstands- en hoekpositie van de QR-code voor meer informatie.
Op HoloLens 2 varieert voor een QR-code van versie 1 van 5 cm tot 25 cm zijden de minimale detectieafstand van 0,25 meter tot 0,5 meter. De kortste kan worden gedetecteerd van ongeveer 0,5 m voor de kleinste code tot twee meter voor de grotere.
In Windows Mixed Reality worden deze afstanden voor de grootten gehalveerd.
Voor codes die groter zijn, extrapoleren, neemt de detectieafstand voor grootte lineair toe. Voor elke code die kleiner is, vindt detectie gewoon niet plaats---4-5 cm is de kleinste die we kunnen detecteren.
Waarom kan ik geen QR-codes lezen met logo's?
QR-codes met logo's worden niet ondersteund.
De QR-codes worden gedetecteerd, dus waarom krijg ik geen gegevens?
Als het platform de QR-code niet kan decoderen, zijn er geen gegevens. U kunt de stream gebruiken en de gegevens interpreteren met behulp van opensource-code.
Sommige functies, zoals het toevoegen van een structuur, worden niet ondersteund.
Zie voor meer informatie welke QR-codeversies worden ondersteund?
Worden QR-codes op het niveau 'ruimte' of app-niveau opgeslagen?
QR-codes worden op systeemniveau op stuurprogrammasessie of opstartsessie op HoloLens opgeslagen. Zie voor meer informatie het beheren van QR-codegegevens.
Hoe werkt dat met het onderliggende platform? Waar blijven ze behouden?
Gedetecteerde QR-codes worden door het stuurprogramma in het geheugen bewaard.
Hoe kan ik fouten opsporen in de app in Visual Studio wanneer ik het foutbericht 'Microsoft.MixedReality.QR.pdb
Niet gevonden' krijg?
Notitie
Het volgende is specifiek voor de verouderde QR-code-API's. U wordt aangeraden in plaats daarvan de OpenXR-implementatie voor QR-codes te gebruiken.
Het laden van symbolen voor Microsoft.MixedReality.QR.dll
is overgeslagen omdat deze niet is opgegeven in de lijst met opgenomen modules.
Om te reproduceren
Notitie
Het volgende is specifiek voor de verouderde QR-code-API's. U wordt aangeraden in plaats daarvan de OpenXR-implementatie voor QR-codes te gebruiken.
Volg de stappen om dit gedrag te reproduceren:
- Microsoft.MixedReality.QR (NuGet) en MRTK installeren
- Fouten opsporen
U moet fouten in de app kunnen opsporen met Microsoft.MixedReality.QR.dll, maar het DLL-bestand is niet gevonden:
Aanbevolen oplossing
Notitie
Het volgende is specifiek voor de verouderde QR-code-API's. U wordt aangeraden in plaats daarvan de OpenXR-implementatie voor QR-codes te gebruiken.
We werken aan het toevoegen van symbolen aan de volgende release. Ondertussen moet u nog steeds fouten in uw app kunnen opsporen door het DLL-bestand uit te sluiten in de Visual Studio-opties:
Zie De instellingen van Visual Studio configureren voor meer informatie.
Is er een limiet van het aantal QR-codes dat in een sessie kan worden gescand?
Er is een limiet van 100 QR-codes die zijn opgeslagen op systeemniveau in de driver, binnen 10 minuten.
Is het proces voor het vereffenen van QR-code gewijzigd?
Het proces voor het gladmaken van QR-code is na 20H2 gewijzigd, van het vloeiend maken van de houding tot het gladmaken van de grootte. Als u het gedrag van het vorige vloeiende proces wilt herstellen, past u een vloeiend algoritme toe als de nieuwe QR-codegegevens binnen 5 seconden of 10 cm van het eerder gedetecteerde frame worden gedetecteerd. De transformatiegegevens worden gemengd via een gewogen verhouding van 90% van het huidige frame met 10% van het vorige frame.