우리는 Vuforia Unity SDK 5.5.9가 적용된 Unity 5.3.4f1의 ZXing.dll을 사용하여 QR 감지 기능을 구현했습니다. 우리는 GameObject에 QR 탐지 스크립트를 가지고 있습니다.이 스크립트는 앱 전체에서 계속 사용되며 아래 언급 된 (QRScanner.cs) 코드 (Unity Zxing QR code scanner integration에서 언급 됨)를 사용합니다.Unity에서 Vuforia를 사용하여 ZXing을 사용한 QR 감지
우리는 또한 QR 검출이 예상되는 동일한 장면에서 이미지 검출 (50 이미지 타겟)을 위해 Vuforia를 사용하고 있습니다. Vuforia 플러그인은 우리의 요구 사항에 따라 여러 번 활성화/비활성화됩니다. 앱에 집중할 때까지 Android 및 iOS 기기에서 이미지와 QR 감지가 완벽하게 작동합니다. VuforiaBehaviour가 비활성화되고 활성화 될 때마다 QR 감지가 작동을 멈 춥니 다. QRScanner 스크립트는 앱 재개 후 또는 AR 카메라가 다시로드 된 후에 항상 null 데이터를받습니다. 우리는 AR 카메라 조립식에 QR 탐지 스크립트를 보관하려고 시도했으며 시도했습니다.
qcarBehaviour.RegisterTrackablesUpdatedCallback (OnTrackablesUpdated); qcarBehaviour.RegisterQCARStartedCallback (OnTrackablesUpdated);
AR 카메라가 시작될 때마다 콜백되지만 성공하지 못합니다. 어떤 이유로 든 Vuforia 플러그인을 일시 중지 한 후 QR 검색이 완전히 중지됩니다.
아무도이 문제를 해결하는 방법을 알고 있습니까?
QRScanner.cs
using UnityEngine;
using System;
using System.Collections;
using Vuforia;
using System.Threading;
using ZXing;
using ZXing.QrCode;
using ZXing.Common;
/* ///////////////// QR detection does not work in editor //////////////// */
[AddComponentMenu("System/QRScanner")]
public class QRScanner : MonoBehaviour
{
private bool cameraInitialized;
private BarcodeReader barCodeReader;
public AppManager camScript;
void Start()
{
barCodeReader = new BarcodeReader();
StartCoroutine(InitializeCamera());
}
private IEnumerator InitializeCamera()
{
// Waiting a little seem to avoid the Vuforia's crashes.
yield return new WaitForSeconds(3f);
var isFrameFormatSet = CameraDevice.Instance.SetFrameFormat(Image.PIXEL_FORMAT.RGB888, true);
Debug.Log(String.Format("FormatSet : {0}", isFrameFormatSet));
// Force autofocus.
// var isAutoFocus = CameraDevice.Instance.SetFocusMode(CameraDevice.FocusMode.FOCUS_MODE_CONTINUOUSAUTO);
// if (!isAutoFocus)
// {
// CameraDevice.Instance.SetFocusMode(CameraDevice.FocusMode.FOCUS_MODE_NORMAL);
// }
// Debug.Log(String.Format("AutoFocus : {0}", isAutoFocus));
cameraInitialized = true;
}
private void Update()
{
if (cameraInitialized)
{
try
{
var cameraFeed = CameraDevice.Instance.GetCameraImage(Image.PIXEL_FORMAT.RGB888);
if (cameraFeed == null)
{
return;
}
var data = barCodeReader.Decode(cameraFeed.Pixels, cameraFeed.BufferWidth, cameraFeed.BufferHeight, RGBLuminanceSource.BitmapFormat.RGB24);
if (data != null)
{
// QRCode detected.
Debug.Log(data.Text);
Application.OpenURL (data.Text); // our function to call and pass url as text
data = null; // clear data
}
else
{
Debug.Log("No QR code detected !");
}
}
catch (Exception e)
{
Debug.LogError(e.Message);
}
}
}
}