Panoramica del rilevamento del codice a matrice

Per accedere al repository GitHub per l'esempio di codice a matrice:

Con HoloLens 2 e visori VR immersive, è possibile rilevare i codici a matrice nell'ambiente intorno al visore VR, stabilendo un sistema di coordinate nella posizione reale di ogni codice. È anche possibile eseguire il rendering degli ologrammi nella stessa posizione in più dispositivi per creare un'esperienza condivisa. Dopo aver abilitato la webcam del dispositivo, si riconosceranno i codici a matrice nelle versioni più recenti dei progetti. Per ottenere risultati ottimali nell'ambiente di produzione, è consigliabile esaminare la sezione procedure consigliate .

Questo articolo contiene informazioni relative agli argomenti seguenti:

Supporto di dispositivi

Funzionalità HoloLens prima generazione HoloLens 2 Visori VR immersive
Rilevamento del codice a matrice ✔️

Nota

Il rilevamento del codice a matrice con visori VR immersive Windows Mixed Reality nei PC desktop è supportato in Windows 10 versione 2004 e successive. Usare l'API Microsoft.MixedReality.QRCodeWatcher.IsSupported() per determinare se la funzionalità è supportata nel dispositivo corrente.

Versioni supportate del codice a matrice

Nella tabella seguente sono elencate le versioni di codice a matrice supportate e non supportate:

  Versioni del codice a matrice
Supportate:
  • Versioni a matrice 1 - 10
  • Micro codici a matrice M1-M4
  • Tutte le codifiche
Non supportato:
  • Codici a matrice 10 - 20 (questi possono funzionare, ma non sono garantiti)
  • Codici a matrice 20+
  • Moduli modificati, ad esempio moduli circolari, riflessi, invertiti (nero/bianco).
  • Loghi
  • Appendhe strutturate

    Procedure consigliate per il rilevamento del codice a matrice

    Zone silenziose intorno ai codici a matrice

    Per essere letti correttamente, i codici a matrice richiedono un margine intorno a tutti i lati del codice. Questo margine non deve contenere alcun contenuto stampato e deve essere di quattro moduli (un singolo quadrato nero nel codice) largo.

    La specifica a matrice contiene altre informazioni sulle zone non silenziose.

    Illuminazione e sfondo

    La qualità del rilevamento del codice a matrice è soggetta a illuminazione e sfondo variabili.

    • In condizioni di illuminazione normali, fornire un contrasto sufficiente per i moduli neri/bianchi per ottenere prestazioni migliori.

    • In condizioni di illuminazione estrema con illuminazione luminosa o sfondo scuro, è possibile provare a ridurre e regolare il contrasto che potrebbe migliorare la frequenza di rilevamento del codice a matrice. Lo sfondo bianco all'interno del codice a matrice può essere ridotto da 255 verso il basso.

    Dimensioni dei codici a matrice

    Windows Mixed Reality dispositivi non funzionano con codici a matrice con lati inferiori a 5 cm.

    Per i codici a matrice con lati compresi tra 5 cm e 10 cm, il dispositivo deve essere abbastanza vicino per rilevare il codice. Potrebbe essere necessario più tempo per rilevare il codice.

    Il tempo esatto per rilevare i codici dipende non solo dalle dimensioni dei codici a matrice, ma dalla distanza dal codice. Il passaggio più vicino al codice consente di compensare i problemi relativi alle dimensioni.

    Distanza e posizione angolare dal codice a matrice

    Le telecamere di rilevamento possono rilevare solo un determinato livello di dettaglio. Per i codici piccoli (meno di 10 cm lungo i lati) è necessario essere abbastanza vicini. Per una versione 1 codice a matrice che varia da 10 cm a 25 cm di dimensione, la distanza minima di rilevamento è compresa tra 0,15 metri e 0,5 metri.

    La distanza di rilevamento per le dimensioni aumenta in modo lineare, ma dipende anche dalla versione a matrice o dalle dimensioni del modulo supportate. Maggiore è la versione, i moduli più piccoli, che possono essere rilevati solo da una posizione più vicina. È anche possibile provare i codici micro-QR se si vuole che la distanza di rilevamento sia più lunga. Il rilevamento a matrice funziona con un intervallo di angoli += 45 gradi per garantire una risoluzione appropriata per rilevare il codice.

    Altre considerazioni sul rilevamento:

    • I codici a matrice sulle superfici curve non sono supportati.
    • L'orientamento nel piano è supportato. Fuori piano deve essere <= +-45 guardando dritto per avere un rilevamento migliore.
    • Le dimensioni fisiche del codice a matrice devono avere moduli di almeno 2/3 pixel. Nota: le versioni successive dei codici a matrice avranno moduli più piccoli.

    Per la relazione di compromesso tra distanza e dimensioni del codice a matrice per il rilevamento ottimale, vedere il grafico seguente:

    Grafico a distanza delle dimensioni del codice a matrice

    Importante

    Assicurati sempre di avere un contrasto sufficiente e un bordo appropriato.

    Gestione dei dati del codice a matrice

    Windows Mixed Reality dispositivi rilevano codici a matrice a livello di sistema nel driver. Quando il dispositivo viene riavviato o il driver viene riavviato, la cronologia dei codici a matrice rilevata viene cancellata. I codici a matrice rilevati vengono considerati come nuovi oggetti.

    È consigliabile configurare l'app per ignorare i codici a matrice precedenti a un timestamp specifico, che può essere specificato all'interno dell'app. L'API del codice a matrice specifica l'ora dell'ultimo rilevamento. La maggior parte degli sviluppatori di app userà l'ora di sistema in cui viene avviata l'app per determinare l'ora in cui viene rilevato un codice a matrice.

    I dati del codice a matrice non sono specifici dell'app. Al momento dell'avvio dell'app, verrà fornito un elenco di codici a matrice disponibili. Lo sviluppatore dell'app determinerà quali codici a matrice sono rilevanti per questa app.

    Posizionamento del codice a matrice in uno spazio

    Per consigli su dove e su come inserire i codici a matrice, vedere Considerazioni sull'ambiente per HoloLens.

    Risoluzione dei problemi e domande frequenti

    Quali funzionalità sono necessarie?

    Sarà necessaria la funzionalità webcam aggiunta al manifesto (casella di controllo in Funzionalità unity). Se stai compilando come progetto UWP standard, è incluso anche nel package.appxmanifest progetto di soluzione.

    Richiedere l'accesso chiamando la funzione seguente:

    #if WINDOWS_UWP
    
    async QRCodeWatcher.RequestAccessAsync();
    
    #endif
    

    Lo stato di accesso deve essere (status == QRCodeWatcherAccessStatus::Allowed).

    Se l'accesso viene negato, la funzionalità restituirà l'accesso negato all'avvio di QRTracking.

    Questa API deve essere chiamata prima di costruire l'oggetto QRCodeWatcher .

    Se si esegue il progetto da Unity, è anche necessario assicurarsi di chiamare dal thread dell'interfaccia utente. In caso contrario, l'API restituirà sempre negato. Per altre informazioni, vedere Classe AppCallbacks nel manuale di Unity.

    Per altre informazioni sulla configurazione del progetto per Unity, vedere Configurare Unity per Windows Mixed Reality.

    Ricerca per categorie rendere funzionante la funzionalità di rilevamento del codice a matrice sui dispositivi HoloLens 2?

    Il rilevamento a matrice è automatico in HoloLens 2 ed è necessaria la funzionalità "webcam" aggiunta all'app.

    Dove si trovano i file del plug-in dell'API?

    Tutti i file e la documentazione necessari sono disponibili qui.

    https://www.nuget.org/packages/Microsoft.MixedReality.QR

    Ricerca per categorie preparare una piattaforma UWP per l'uso di Microsoft.MixedReality.QR.QRCodeWatcher?

    • Usare il pacchetto NuGet per decomprimere i file necessari.

    • Aggiungere un riferimento a Microsoft.MixedReality.QR.winmd nel progetto e iniziare a usare l'API.

    • Aggiungere le versioni dell'architettura corrette dei plug-in e usarle di conseguenza nella compilazione.

    Ricerca per categorie preparare Unity con Microsoft.MixedReality.QR.QRCodeWatcher?

    Usare NuGet per Unity e puntare al pacchetto NuGet precedente.

    Come è possibile creare codici a matrice?

    Vedere qualsiasi generatore di codice a matrice. Di seguito è riportato un esempio.

    Se il rilevamento del codice a matrice non funziona in generale, cosa faccio?

    • La versione del codice a matrice è una versione supportata? Non sono supportate le versioni ad alta densità, ad esempio la versione 40. Nulla sopra la versione 10 è garantito; le versioni precedenti alla 20 non sono supportate.
    • Sei abbastanza vicino al codice a matrice? Vedere la distanza e la posizione angolare dal codice a matrice.
    • Come funziona l'illuminazione? C'è un problema noto in cui il rilevamento diventa difficile quando il codice a matrice si trova in uno sfondo ambientale scuro: il codice a matrice apparirà lavato alla fotocamera a causa di un contrasto elevato. Per altre informazioni, vedere illuminazione e sfondo.

    Qual è l'accuratezza?

    Quando viene rilevato in un singolo frame, è previsto che la dimensione abbia al massimo un errore dell'1% rispetto alle dimensioni effettive. Ad esempio, un codice di 10 cm potrebbe essere di dimensioni misurate fino a +/- 1 mm. In caso di rilevamento continuo, la posizione di un codice può essere spostata intorno fino a +/- 2,5 mm. Una volta spostato all'esterno dell'intervallo di rilevamento, la posizione di un rilevamento precedente è alla base dell'errore della mappa.

    Quanto è necessario chiudere il codice a matrice per rilevarlo?

    La distanza dipende ovviamente dalle dimensioni del codice a matrice e anche dalla versione in cui si tratta. Per altre informazioni, vedere distanza e posizione angolare dal codice a matrice.

    • In HoloLens 2, per un codice a matrice versione 1 che varia da 5 cm a 25 cm, la distanza minima di rilevamento è compresa tra 0,25 metri e 0,5 metri. I più a distanza possono essere rilevati da va da circa 0,5 m per il codice più piccolo a due metri per il più grande.
    • In Windows Mixed Reality, queste distanze per le dimensioni vengono dimezzate.
    • Per i codici più grandi, estrapolare la distanza di rilevamento per le dimensioni aumenta in modo lineare. Per qualsiasi codice più piccolo, il rilevamento non si verifica semplicemente: 4-5 cm è il più piccolo che è possibile rilevare.

    Perché non è possibile leggere codici a matrice con logo?

    Attualmente non sono supportati codici a matrice con logo.

    I codici a matrice vengono rilevati, quindi perché non si ricevono dati?

    • Se la piattaforma non è in grado di decodificare il codice a matrice, non saranno presenti dati. È possibile usare il flusso e interpretare i dati usando codice open source.
    • Alcune funzionalità, ad esempio l'aggiunta della struttura, non sono supportate.

    Per altre informazioni, vedere quali versioni del codice a matrice sono supportate?.

    I codici a matrice vengono salvati a livello di "spazio" o di app?

    I codici a matrice vengono salvati a livello di sistema nella sessione del driver o nella sessione di avvio in HoloLens. Per altre informazioni, vedere Gestione dei dati del codice a matrice.

    Come funziona con la piattaforma sottostante? Dove vengono mantenuti?

    I codici a matrice rilevati vengono resi persistenti in memoria dal driver.

    Ricerca per categorie eseguire il debug dell'app in Visual Studio quando viene visualizzato il messaggio di errore "Microsoft.MixedReality.QR.pdbnon trovato"?

    Il caricamento dei simboli per Microsoft.MixedReality.QR.dll è stato ignorato perché non è specificato nell'elenco dei moduli inclusi.

    Per riprodurre

    Seguire la procedura per riprodurre questo comportamento:

    1. Installare Microsoft.MixedReality.QR (NuGet) e MRTK
    2. Provare a eseguire il debug

    Dovrebbe essere possibile eseguire il debug dell'app con Microsoft.MixedReality.QR.dll, ma la DLL non viene trovata:

    Messaggio di errore Microsoft.MixedReality.QR.pdb

    Stiamo lavorando per aggiungere simboli alla versione successiva. Nel frattempo, dovresti comunque essere in grado di eseguire il debug dell'app escludendo la DLL nelle opzioni di Visual Studio:

    esclusione della DLL nelle opzioni di Visual Studio

    Per altre informazioni, vedere Configurazione delle impostazioni di Visual Studio.

    Esiste un limite di quanti codici a matrice possono essere analizzati in una sessione?

    È previsto un limite di 100 codici a matrice salvati a livello di sistema nel driver, entro 10 minuti.

    Il processo di smoothing del codice a matrice è cambiato?

    Il processo di smoothing del codice a matrice è cambiato dopo 20H2, dalla posa allo smoothing delle dimensioni. Per ripristinare il comportamento del processo di smoothing precedente, è necessario applicare un algoritmo di smoothing se i nuovi dati di posa del codice a matrice vengono rilevati entro 5 secondi o 10 cm del frame rilevato in precedenza. I dati di trasformazione vengono mescolati tramite un rapporto ponderato del 90% del frame corrente con il 10% del frame precedente.

    Vedi anche