本日は HoloLens の小ネタ枠です。
HoloLensでQRコードのテキスト情報を取得する手順を試してみます。
MRTKのインポート
HoloLens2 向けのシーン作成のため、MRTK の Foundation パッケージを利用します。
MRTK のインポート手順は以下の記事を参考にしてください。
bluebirdofoz.hatenablog.com
Microsoft.MixedReality.QRの取得
QRコードの情報取得に Microsoft.MixedReality.QR を利用します。
取得には NuGet を利用します。以下の記事を参考に NuGetForUnity をインポートします。
bluebirdofoz.hatenablog.com
[Manage NuGet Packages]を開き、[Microsoft.MixedReality.QR]をインポートします。
QRコードのテキスト情報を取得する
QRCodeWatcher クラスからQRコードの検出や検出したQRコードの情報を取得することができます。
docs.microsoft.com
検出したQRコードのテキスト情報をテキストメッセージに出力する以下のスクリプトを作成しました。
・QRReadTest.cs
using UnityEngine; using UnityEngine.UI; using Microsoft.MixedReality.QR; [RequireComponent(typeof(Text))] public class QRReadTest : MonoBehaviour { // 文字列を出力するテキストUI private Text UIText; // QRCodeWatcher private QRCodeWatcher qRCodeWatcher; // 最新の検出文字列 private string CurrentQRText; async void Start() { // テキストUIの参照取得 UIText = this.GetComponent<Text>(); // QRCodeWatcherの許可リクエスト await QRCodeWatcher.RequestAccessAsync(); // インスタンスの生成とイベント登録 qRCodeWatcher = new QRCodeWatcher(); // 新規QRコード追加時イベント qRCodeWatcher.Added += QRCodeWatcherAdded; // QRコード更新時イベント qRCodeWatcher.Updated += QRCodeWatcherUpdated; // QRコード削除時イベント qRCodeWatcher.Removed += QRCodeWatcherRemoved; // QRコード検出の開始 qRCodeWatcher.Start(); } private void Update() { // 最新のQRコードのテキスト情報を表示する UIText.text = CurrentQRText; } /// <summary> /// 新規QRコード追加時イベント /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void QRCodeWatcherAdded(object sender, QRCodeAddedEventArgs e) { // 検出したQRコード情報を取得する QRCode codeInfo = e.Code; // テキスト情報を保存する CurrentQRText = codeInfo.Data; } /// <summary> /// QRコード更新時イベント /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void QRCodeWatcherUpdated(object sender, QRCodeUpdatedEventArgs e) { // 検出したQRコード情報を取得する QRCode codeInfo = e.Code; // テキスト情報を保存する CurrentQRText = codeInfo.Data; } /// <summary> /// QRコード削除時イベント /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void QRCodeWatcherRemoved(object sender, QRCodeRemovedEventArgs e) { // 検出したQRコード情報を取得する QRCode codeInfo = e.Code; // テキスト情報を削除する CurrentQRText = ""; } }
検出したテキスト情報を表示するための Text オブジェクトを作成し、そこにスクリプトをアタッチします。
カメラの権限設定
QRコード認識のため、カメラの利用権限を設定しておく必要があります。
メニューから[Edit -> Project Settings..]を開き、[Player -> Publishing Settings]パネルを開きます。
[Capabillities]の[WebCam]にチェックを入れます。
動作を確認する
今回は以下のページで任意のテキスト情報を持つQRコードを作成しました。
crocro.com
QRコードを見ると、テキストUIにQRコードのテキスト情報が表示されれば成功です。
カメラの権限を有効化した状態で起動する必要があります。
起動時のダイアログでカメラ権限を有効にする場合、初回起動時はQRコードを検出できないので注意が必要です。