Приложение для сканирования QR Unity для HoloLens 2 DONE не обнаруживает QR -кодC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Приложение для сканирования QR Unity для HoloLens 2 DONE не обнаруживает QR -код

Сообщение Anonymous »

Я работаю над проектом, и мне нужно сделать приложение для HoloLens 2, которое может напрямую сканировать QR-коды, я не знаком с этой разработкой AR, поэтому я попытался использовать пример из Microsoft (https://learn.microsoft.com/en-us/windo ... -cover-com находится на HoloLens 2, но он не сканирует коды, я имею в виду, когда вы используете этот пример, который должен обнаружить QR -код и создавать своего рода прямоугольник вокруг него, но я не получаю этот прямоугольник, и да, я попытался сделать это на бумаге и даже на экране моего ноутбука, и я уверен, что он был достаточно большим, чтобы обнаружить (реализованный QR Scanner в Hololens 2 определяет код QR). Поэтому я установил Microsoft.mixedReality.qr из Nuget и добавил MRTK в проект также в моей визуальной студии для сообщества, которое я установил все пакеты для разработки UWP и разработки Unity, но мое приложение все еще не работает, оно делает только некоторые линии отладки белых или что -то в этом роде. Может ли кто -нибудь сказать мне, что я могу сделать, чтобы эта вещь работала?

Код: Выделить всё

// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.

using Microsoft.MixedReality.QR;
using System;
using System.Collections.Generic;
using UnityEngine;

namespace Microsoft.MixedReality.SampleQRCodes
{
public static class QRCodeEventArgs
{
public static QRCodeEventArgs Create(TData data)
{
return new QRCodeEventArgs(data);
}
}

[Serializable]
public class QRCodeEventArgs : EventArgs
{
public TData Data { get; private set; }

public QRCodeEventArgs(TData data)
{
Data = data;
}
}

public class QRCodesManager : Singleton
{
[Tooltip("Determines if the QR codes scanner should be automatically started.")]
public bool AutoStartQRTracking = true;

public bool IsTrackerRunning { get; private set; }

public bool IsSupported { get; private set; }

public event EventHandler QRCodesTrackingStateChanged;
public event EventHandler QRCodeAdded;
public event EventHandler QRCodeUpdated;
public event EventHandler QRCodeRemoved;

private System.Collections.Generic.SortedDictionary qrCodesList = new SortedDictionary();

private QRCodeWatcher qrTracker;
private bool capabilityInitialized = false;
private QRCodeWatcherAccessStatus accessStatus;
private System.Threading.Tasks.Task capabilityTask;

public System.Guid GetIdForQRCode(string qrCodeData)
{
lock (qrCodesList)
{
foreach (var ite in qrCodesList)
{
if (ite.Value.Data == qrCodeData)
{
return ite.Key;
}
}
}
return new System.Guid();
}

public System.Collections.Generic.IList GetList()
{
lock (qrCodesList)
{
return new List(qrCodesList.Values);
}
}
protected void Awake()
{

}

// Use this for initialization
async protected virtual void Start()
{
IsSupported = QRCodeWatcher.IsSupported();
capabilityTask = QRCodeWatcher.RequestAccessAsync();
accessStatus = await capabilityTask;
capabilityInitialized = true;
}

private void SetupQRTracking()
{
try
{
qrTracker = new QRCodeWatcher();
IsTrackerRunning = false;
qrTracker.Added += QRCodeWatcher_Added;
qrTracker.Updated += QRCodeWatcher_Updated;
qrTracker.Removed += QRCodeWatcher_Removed;
qrTracker.EnumerationCompleted += QRCodeWatcher_EnumerationCompleted;
}
catch (Exception ex)
{
Debug.Log("QRCodesManager : exception starting the tracker " + ex.ToString());
}

if (AutoStartQRTracking)
{
StartQRTracking();
}
}

public void StartQRTracking()
{
if (qrTracker != null && !IsTrackerRunning)
{
Debug.Log("QRCodesManager starting QRCodeWatcher");
try
{
qrTracker.Start();
IsTrackerRunning = true;
Debug.Log("QRCodeManager started!");
QRCodesTrackingStateChanged?.Invoke(this, true);
}
catch (Exception ex)
{
Debug.Log("QRCodesManager starting QRCodeWatcher Exception:"  + ex.ToString());
}
}
}

public void StopQRTracking()
{
if (IsTrackerRunning)
{
IsTrackerRunning = false;
if (qrTracker != null)
{
qrTracker.Stop();
qrCodesList.Clear();
}

var handlers = QRCodesTrackingStateChanged;
if (handlers != null)
{
handlers(this, false);
}
}
}

private void QRCodeWatcher_Removed(object sender, QRCodeRemovedEventArgs args)
{
Debug.Log("QRCodesManager QRCodeWatcher_Removed");

bool found = false;
lock (qrCodesList)
{
if (qrCodesList.ContainsKey(args.Code.Id))
{
qrCodesList.Remove(args.Code.Id);
found = true;
}
}
if (found)
{
var handlers = QRCodeRemoved;
if (handlers != null)
{
handlers(this, QRCodeEventArgs.Create(args.Code));
}
}
}

private void QRCodeWatcher_Updated(object sender, QRCodeUpdatedEventArgs args)
{
Debug.Log("QRCodesManager QRCodeWatcher_Updated");

bool found = false;
lock (qrCodesList)
{
if (qrCodesList.ContainsKey(args.Code.Id))
{
found = true;
qrCodesList[args.Code.Id] = args.Code;
}
}
if (found)
{
var handlers = QRCodeUpdated;
if (handlers != null)
{
handlers(this, QRCodeEventArgs.Create(args.Code));
}
}
}

private void QRCodeWatcher_Added(object sender, QRCodeAddedEventArgs args)
{
Debug.Log("QRCodesManager QRCodeWatcher_Added");

lock (qrCodesList)
{
qrCodesList[args.Code.Id] = args.Code;
}
var handlers = QRCodeAdded;
if (handlers != null)
{
handlers(this, QRCodeEventArgs.Create(args.Code));
}
}

private void QRCodeWatcher_EnumerationCompleted(object sender, object e)
{
Debug.Log("QRCodesManager QrTracker_EnumerationCompleted");
}

private void Update()
{
if (qrTracker == null && capabilityInitialized && IsSupported)
{
if (accessStatus == QRCodeWatcherAccessStatus.Allowed)
{
SetupQRTracking();
}
else
{
Debug.Log("Capability access status : " + accessStatus);
}
}
}
}
}
< /code>
И это код для qrcodevisualizer: < /p>
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.

using System.Collections.Generic;
using UnityEngine;

namespace Microsoft.MixedReality.SampleQRCodes
{
public class QRCodesVisualizer : MonoBehaviour
{
public GameObject qrCodePrefab;

private SortedDictionary qrCodesObjectsList;
private bool clearExisting = false;

struct ActionData
{
public enum Type
{
Added,
Updated,
Removed
};
public Type type;
public Microsoft.MixedReality.QR.QRCode qrCode;

public ActionData(Type type, Microsoft.MixedReality.QR.QRCode qRCode) : this()
{
this.type = type;
qrCode = qRCode;
}
}

private Queue  pendingActions = new Queue();

// Use this for initialization
void Start()
{
Debug.Log("QRCodesVisualizer start");
qrCodesObjectsList = new SortedDictionary();

QRCodesManager.Instance.QRCodesTrackingStateChanged += Instance_QRCodesTrackingStateChanged;
QRCodesManager.Instance.QRCodeAdded += Instance_QRCodeAdded;
QRCodesManager.Instance.QRCodeUpdated += Instance_QRCodeUpdated;
QRCodesManager.Instance.QRCodeRemoved += Instance_QRCodeRemoved;
if (qrCodePrefab == null)
{
throw new System.Exception("Prefab not assigned");
}
}
private void Instance_QRCodesTrackingStateChanged(object sender, bool status)
{
if (!status)
{
clearExisting = true;
}
}

private void Instance_QRCodeAdded(object sender, QRCodeEventArgs e)
{
Debug.Log("QRCodesVisualizer Instance_QRCodeAdded");

lock (pendingActions)
{
pendingActions.Enqueue(new ActionData(ActionData.Type.Added, e.Data));
}
}

private void Instance_QRCodeUpdated(object sender, QRCodeEventArgs e)
{
Debug.Log("QRCodesVisualizer Instance_QRCodeUpdated");

lock (pendingActions)
{
pendingActions.Enqueue(new ActionData(ActionData.Type.Updated, e.Data));
}
}

private void Instance_QRCodeRemoved(object sender, QRCodeEventArgs e)
{
Debug.Log("QRCodesVisualizer Instance_QRCodeRemoved");

lock (pendingActions)
{
pendingActions.Enqueue(new ActionData(ActionData.Type.Removed, e.Data));
}
}

private void HandleEvents()
{
lock (pendingActions)
{
while (pendingActions.Count > 0)
{
var action = pendingActions.Dequeue();
if (action.type == ActionData.Type.Added)
{
GameObject qrCodeObject = Instantiate(qrCodePrefab, new Vector3(0, 0, 0), Quaternion.identity);
qrCodeObject.GetComponent().Id = action.qrCode.SpatialGraphNodeId;
qrCodeObject.GetComponent().qrCode = action.qrCode;
qrCodesObjectsList.Add(action.qrCode.Id, qrCodeObject);
}
else if (action.type == ActionData.Type.Updated)
{
if (!qrCodesObjectsList.ContainsKey(action.qrCode.Id))
{
GameObject qrCodeObject = Instantiate(qrCodePrefab, new Vector3(0, 0, 0), Quaternion.identity);
qrCodeObject.GetComponent().Id = action.qrCode.SpatialGraphNodeId;
qrCodeObject.GetComponent().qrCode = action.qrCode;
qrCodesObjectsList.Add(action.qrCode.Id, qrCodeObject);
}
}
else if (action.type == ActionData.Type.Removed)
{
if (qrCodesObjectsList.ContainsKey(action.qrCode.Id))
{
Destroy(qrCodesObjectsList[action.qrCode.Id]);
qrCodesObjectsList.Remove(action.qrCode.Id);
}
}
}
}
if (clearExisting)
{
clearExisting = false;
foreach (var obj in qrCodesObjectsList)
{
Destroy(obj.Value);
}
qrCodesObjectsList.Clear();

}
}

// Update is called once per frame
void Update()
{
HandleEvents();
}
}
}
Эти два сценария прикреплены к пустой вещи в двигателе Unity, а также QR-код, прикрепленный к скрипту Qrcodevisualizer.
Вы можете найти этот образец здесь (https://github.com/microsoft/mixedreality-qrcode-same- Совместно>

Подробнее здесь: https://stackoverflow.com/questions/795 ... ct-qr-code
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»