Översikt över QR-kodspårning
Så här kommer du åt GitHub-lagringsplatsen för QR-kodexemplet:
Med Windows Mixed Reality- och HoloLens-headset kan din app identifiera QR-koder i miljön runt headsetet och etablera ett koordinatsystem på varje kods verkliga plats. Du kan också återge hologram på samma plats på flera enheter för att skapa en delad upplevelse. När du aktiverar enhetens webbkamera kommer du att känna igen QR-koder i de senaste versionerna av dina projekt. För bästa resultat i produktion rekommenderar vi att du läser avsnittet metodtips .
I den här artikel får du lära dig om:
- Enheter som stöds för QR-kodspårning
- QR-kodversioner som stöds
- Metodtips för identifiering av QR-kod
- Felsöka och Vanliga frågor och svar
- Vilka funktioner behövs?
- Hur gör jag för att få funktionen för QR-kodspårning att fungera på HoloLens 2-enheter?
- Var hittar jag API-plugin-filerna?
- Hur gör jag för att förbereda en Unity-app för att använda ARMarkerManager för att identifiera QR-koder?
- Hur gör jag för att förbereda en icke-Unity-app för att använda OpenXR för att identifiera QR-koder?
- Hur gör jag för att förbereda en UWP för att använda Microsoft.MixedReality.QR.QRCodeWatcher?
- Hur gör jag för att förbereda Unity med Microsoft.MixedReality.QR.QRCodeWatcher?
- Hur gör jag QR-koder?
- Vad gör jag om QR-kodspårning inte fungerar i allmänhet?
- Vad är noggrannheten?
- Hur nära måste jag vara QR-koden för att identifiera den?
- Varför kan jag inte läsa QR-koder med logotyper?
- QR-koderna identifieras, så varför får jag inga data?
- Sparas QR-koder på utrymmesnivå eller appnivå?
- Hur fungerar det med den underliggande plattformen? Var finns de kvar?
- Hur gör jag för att felsöka appen i Visual Studio när jag får felmeddelandet "
Microsoft.MixedReality.QR.pdb
hittades inte"?
Stöd för enheter
Produkt | HoloLens 1:a generationen | HoloLens 2 | Integrerande headsets |
---|---|---|---|
OpenXR | ✔️ (med OpenXR Runtime version 113 och OpenXR XR_MSFT_scene_marker-tillägget ) | ||
Plugin-programmet Mixed Reality Unity | ✔️ (med OpenXR Runtime version 113 och Mixed Reality Unity Plugin ARMarkerManager ) |
||
Äldre QR SDK | ✔️ | ✔️ | ✔️ |
Kommentar
Följande är specifikt för äldre QR-kod-API:er. Vi rekommenderar att du använder OpenXR-implementeringen för QR-koder i stället.
Med hjälp av äldre QR-kod-SDK stöds QR-kodspårning med uppslukande Windows Mixed Reality-headset på stationära datorer på Windows 10 Version 2004 och senare. Använd API:et Microsoft.MixedReality.QRCodeWatcher.IsSupported()
för att avgöra om funktionen stöds på den aktuella enheten.
QR-kodversioner som stöds
I följande tabell visas de QR-kodversioner som stöds och som inte stöds:
QR-kodversioner | |
---|---|
Stödd: |
|
Stöds inte: |
|
Metodtips för identifiering av QR-kod
Tysta zoner runt QR-koder
För att kunna läsas korrekt kräver QR-koder en marginal runt alla sidor av koden. Den här marginalen får inte innehålla något tryckt innehåll och ska vara fyra moduler (en enda svart fyrkant i koden) bred.
Den officiella QR-koddokumentationen innehåller mer information om tysta zoner.
Belysning och bakgrund
QR-kodidentifieringskvaliteten är känslig för varierande belysning och bakgrund.
Under normala ljusförhållanden ger du tillräckligt med kontrast för de svartvita modulerna för bättre prestanda.
I extrema ljusförhållanden med ljus belysning eller mörk bakgrund kan du försöka minska och justera kontrasten, vilket kan förbättra QR-kodidentifieringshastigheten. Den vita bakgrunden i QR-koden kan minskas från 255 nedåt.
Storleken på QR-koder
Windows Mixed Reality- och HoloLens-enheter fungerar inte med QR-koder med sidor som är mindre än 5 cm.
För QR-koder med sidor från 5 cm till 10 cm måste enheten vara ganska nära för att identifiera koden. Det kan ta längre tid än genomsnittet att identifiera koden.
Den exakta tiden för att identifiera koder beror inte bara på storleken på QR-koderna, utan hur långt bort du är från koden. Om du närmar dig koden förskjuts problem med storleken.
Avstånd och vinkelposition från QR-koden
Spårningskamerorna kan bara identifiera en viss detaljnivå. För små koder (mindre än 10 cm längs sidorna) måste du vara ganska nära. För en QR-kod av version 1 som varierar från 10 cm till 25 cm är det minsta identifieringsavståndet mellan 0,15 meter och 0,5 meter.
Identifieringsavståndet för storlek ökar linjärt, men beror också på vilken QR-version eller modulstorlek som stöds. Ju högre version, desto mindre moduler, som bara kan identifieras från en närmare position. Du kan också prova mikro-QR-koder om du vill att identifieringsavståndet ska vara längre. QR-identifiering fungerar med ett antal vinklar += 45 grader för att säkerställa att vi har rätt lösning för att identifiera koden.
Andra identifieringsöverväganden:
- QR-koder på böjda ytor stöds inte.
- Orientering på plan stöds. Ut ur planet ska vara <= +-45 ser rakt på för att få bättre identifiering.
- QR-kodens fysiska storlek bör ha moduler på minst 2/3 bildpunkter. Obs! Högre versioner av QR-koder har mindre moduler.
För avvägningsrelationen mellan avståndet och storleken på QR-koden för optimal identifiering, se följande diagram:
Viktigt!
Se alltid till att du har tillräckligt med kontrast och en korrekt kantlinje.
Hantera QR-koddata
Windows Mixed Reality- och HoloLens-enheter identifierar QR-koder på systemnivå i drivrutinen. När enheten startas om eller drivrutinen startas om rensas historiken för identifierade QR-koder. QR-koder som har ritats om behandlas som nya objekt.
Vi rekommenderar att du konfigurerar appen så att den ignorerar QR-koder som är äldre än en specifik tidsstämpel, som kan anges i appen. API:et för QR Code anger den tid då den senaste identifieringen inträffade. De flesta apputvecklare använder systemtiden när appen startas för att fastställa när en QR-kod identifieras.
QR-koddata är inte appspecifika. När appen startas kommer det att finnas en lista över tillgängliga QR-koder som tillhandahålls. Apputvecklaren avgör vilka QR-koder som är relevanta för den här appen.
QR-kodplacering i ett blanksteg
Rekommendationer om var och hur du placerar QR-koder finns i Miljööverväganden för HoloLens.
Felsök och Vanliga frågor och svar
Vilka funktioner behövs?
Om du vill aktivera QR-kodspårning i ditt HoloLens-program lägger du till webbkamerafunktionen i programmets manifest. Om du utvecklar i Unity kan du konfigurera detta från spelarinställningarna.
Dessutom kan användare uppmanas av behörighetsdialogrutan att bevilja appens webbkamerabehörigheter. Detta sker bara en gång under en apps livslängd. I fall som att appen uttryckligen begär åtkomst till webbkameran visas inte dialogrutan igen.
För Unity-appar med WebCam-funktionen kan aktivering ARMarkerManager
i en scen utlösa dialogrutan för webbkamerabehörighet att visas.
För interna OpenXR C++-appar kan inledande anrop till xrComputeNewSceneMSFT med XrNewSceneComputeInfoMSFT::requestedFeatures
innehåll XR_SCENE_COMPUTE_FEATURE_MARKER_MSFT
utlösa behörighetsdialogrutan.
Kommentar
Följande är specifikt för äldre QR-kod-API:er. Vi rekommenderar att du använder OpenXR-implementeringen för QR-koder i stället.
Du behöver den webbkamerafunktion som har lagts till i manifestet (kryssrutan i Unity-funktioner). Om du skapar som ett UWP-standardprojekt finns det också i package.appxmanifest i lösningsprojektet.
I den äldre QR-kod-SDK:t begär du åtkomst genom att anropa följande metod:
#if WINDOWS_UWP
async QRCodeWatcher.RequestAccessAsync();
#endif
Åtkomststatusen ska vara (status == QRCodeWatcherAccessStatus::Allowed)
.
Om åtkomst nekas returnerar funktionen åtkomst nekad när du startar QRTracking
.
Det här API:et QRCodeWatcher
bör anropas innan du skapar objektet.
Om du kör projektet från Unity måste du också se till att du anropar från användargränssnittstråden. Annars returnerar API:et alltid nekad. Mer information finns i Klassen AppCallbacks i Unity Manual.
Mer information om hur du konfigurerar projektet för Unity finns i konfigurera Unity för Windows Mixed Reality.
Hur gör jag för att få funktionen för QR-kodspårning att fungera på HoloLens 2-enheter?
QR-spårning sker automatiskt på HoloLens 2 och du behöver funktionen "webbkamera" som lagts till i din app.
Var hittar jag API-plugin-filerna?
Program bör använda HoloLens OpenXR Runtime för att identifiera QR-koder. OpenXR för Windows Mixed Reality (113.2403.5001 eller senare) ger QR-kodstöd på HoloLens-enheter.
För Unity-appar tillhandahålls QR-kodstöd via komponenten ARMarkerManager
som tillhandahålls med Plugin-programmet Mixed Reality OpenXR.
För QR-kodstöd i icke-Unity-appar använder du OpenXR-XR_MSFT_scene_marker-tillägget.
Kommentar
Följande är specifikt för äldre QR-kod-API:er. Vi rekommenderar att du använder OpenXR-implementeringen för QR-koder i stället.
Alla nödvändiga filer och dokumentation finns här på NuGet här:
Hur gör jag för att förbereda en Unity-app för att använda ARMarkerManager för att identifiera QR-koder?
I Unity-appar används komponenten ARMarkerManager
för att hantera hur QR-kodidentifiering i en fysisk miljö representeras i en scen. ARMarkerManager
Ger:
Händelser för att meddela prenumeranter när en identifierad QR-kod har lagts till i chefen, uppdaterats eller tagits bort.
En samling
ARMarker
spårningsbara objekt för QR-koder under identifiering.Metoder som returnerar data för QR-koder som anges av spårningsbart ID.
Om du vill använda ARMarkerManager
i din app måste du importera Plugin-paketet Mixed Reality OpenXR .
Så här importerar du paketet:
- Ladda ned och kör funktionsverktyget för Mixed Reality.
- Installera OpenXR-plugin-programmet.
Mer information om hur du använder verktyget finns i Välkommen till funktionsverktyget för Mixad verklighet.
Den allmänna proceduren härnäst är att:
- Aktivera WebCam-funktioner i Unity-projektet.
- Skapa en prefab och bifoga komponenten
ARMarker
enligt följande:
- Öppna en scen där du vill att QR-koder ska identifieras när de körs.
- Koppla
ARMarkerManager
till en GameObject i din scen och ange Marker Prefab till den prefab som du skapade.
Mer detaljerade instruktioner och information finns i QR-koder i Unity.
Ett exempel på hur du använder QR-koder i din Unity-app finns i exempelscenariot för QR-kod på GitHub.
Hur gör jag för att förbereda en icke-Unity-app för att använda OpenXR för att identifiera QR-koder?
QR-kodidentifiering i OpenXR tillhandahålls via XR_MSFT_scene_marker-tillägget . Det här tillägget tillåter att flera QR-koder spåras och kan ge storlek, position, tidsstämpel för senaste identifiering, UUID och buffrade QR-koddata för identifierade QR-koder.
Om du vill aktivera stöd för QR-kod måste både XR_MSFT_scene_marker- och XR_MSFT_scene_understanding-tillägg vara aktiverade.
En detaljerad stegvis information finns i översikten över XR_MSFT_scene_marker-tillägget i OpenXR 1.0-specifikationen.
Ett exempel på hur du använder QR-koder finns i Scene_QRCode.cpp i exemplet SceneUnderstandingUwp på GitHub.
Hur gör jag för att förbereda en UWP för att använda Microsoft.MixedReality.QR.QRCodeWatcher?
Kommentar
Följande är specifikt för äldre QR-kod-API:er. Vi rekommenderar att du använder OpenXR-implementeringen för QR-koder i stället.
Använd NuGet-paketet för att packa upp de filer som krävs.
Lägg till en referens till
Microsoft.MixedReality.QR.winmd
i projektet och börja använda API:et.Lägg till rätt arkitekturversioner av plugin-program och använd dem i enlighet med detta i versionen.
Hur gör jag för att förbereda Unity med Microsoft.MixedReality.QR.QRCodeWatcher?
Kommentar
Följande är specifikt för äldre QR-kod-API:er. Vi rekommenderar att du använder OpenXR-implementeringen för QR-koder i stället.
Använd NuGet för Unity och peka på NuGet-paketet ovan.
Hur gör jag QR-koder?
Kolla in valfri QR-kodgenerator.
Vad gör jag om QR-kodspårning inte fungerar i allmänhet?
Är QR Code-versionen en version som stöds? Vi stöder inte högdensitetsversioner som version 40. Ingenting ovan version 10 garanteras; versioner över 20 stöds inte.
Är du tillräckligt nära QR-koden? Se avstånd och vinkelposition från QR-koden.
Hur är belysningen? Det finns ett känt problem där identifiering blir svårt när QR-koden är på en mörk miljöbakgrund – QR-koden visas tvättad till kameran på grund av hög kontrast. Mer information finns i belysning och bakgrund.
Vad är noggrannheten?
När det identifieras i en enda bildruta förväntas storleken ha högst 1 % fel från den faktiska storleken. Till exempel kan en 10 cm-kod vara upp till +/- 1 mm av i uppmätt storlek. Under kontinuerlig identifiering kan en kods position glida runt med upp till +/- 2,5 mm. När du har flyttat ut från identifieringsintervallet är en tidigare identifierings position upp till kartfelets nåd.
Hur nära måste jag vara QR-koden för att identifiera den?
Avståndet beror uppenbarligen på storleken på QR-koden och vilken version den är. Mer information finns i avstånd och vinkelposition från QR-koden.
På HoloLens 2, för en QR-version 1-kod som varierar från 5 cm sidor till 25 cm sidor, varierar det minsta avkänningsavståndet från 0,25 meter till 0,5 meter. Det längsta dessa kan identifieras från går från ca 0,5 m för den minsta koden till två meter för den större.
I Windows Mixed Reality halveras dessa avstånd för storlekarna.
För alla koder som är större, extrapolera– ökar identifieringsavståndet för storlek linjärt. För all mindre kod sker identifieringen helt enkelt inte– 4–5 cm är den minsta vi kan identifiera.
Varför kan jag inte läsa QR-koder med logotyper?
QR-koder med logotyper stöds inte.
QR-koderna identifieras, så varför får jag inga data?
Om plattformen inte kan avkoda QR-koden kommer det inte att finnas några data. Du kan använda strömmen och tolka data med hjälp av öppen källkod.
Vissa funktioner, till exempel strukturbihang, stöds inte.
Mer information finns i vilka QR-kodversioner stöds?.
Sparas QR-koder på utrymmesnivå eller appnivå?
QR-koder sparas på systemnivå i drivrutinssessionen eller startsessionen på HoloLens. Mer information finns i hantera QR-koddata.
Hur fungerar det med den underliggande plattformen? Var finns de kvar?
Identifierade QR-koder sparas i minnet av drivrutinen.
Hur gör jag för att felsöka appen i Visual Studio när jag får felmeddelandet "Microsoft.MixedReality.QR.pdb
hittades inte"?
Kommentar
Följande är specifikt för äldre QR-kod-API:er. Vi rekommenderar att du använder OpenXR-implementeringen för QR-koder i stället.
Symbolinläsningen för Microsoft.MixedReality.QR.dll
hoppades över eftersom den inte anges i listan med inkluderade moduler.
Återskapa
Kommentar
Följande är specifikt för äldre QR-kod-API:er. Vi rekommenderar att du använder OpenXR-implementeringen för QR-koder i stället.
Följ stegen för att återskapa det här beteendet:
- Installera Microsoft.MixedReality.QR (NuGet) och MRTK
- Försök att felsöka
Du bör kunna felsöka appen med Microsoft.MixedReality.QR.dll, men DLL:en hittas inte:
Rekommenderad lösning
Kommentar
Följande är specifikt för äldre QR-kod-API:er. Vi rekommenderar att du använder OpenXR-implementeringen för QR-koder i stället.
Vi arbetar med att lägga till symboler i nästa version. Under tiden bör du fortfarande kunna felsöka din app genom att exkludera DLL:en i Visual Studio-alternativen:
Mer information finns i Konfigurera Visual Studio-inställningar.
Finns det en gräns för hur många QR-koder som kan genomsökas i en session?
Det finns en gräns på 100 QR-koder som sparats på systemnivå i drivrutinen inom 10 minuter.
Har QR-kodutjämningsprocessen ändrats?
QR-kodutjämningsprocessen ändrades efter 20H2, från poseutjämning till storleksutjämning. För att återställa beteendet till föregående utjämningsprocess använder man en utjämningsalgoritm om de nya QR-kodpositionsdata identifieras inom 5 sekunder eller 10 cm från den tidigare identifierade ramen. Transformeringsdata blandas via ett viktat förhållande på 90 % av den aktuella ramen med 10 % av föregående bildruta.