Сканер QR-кода в Unity?

Я пытаюсь получить читатель QRCode в единстве, который работает на ios и Android.

Интеграция со сканером QR-кода Unity Zxing

Используя приведенный выше ответ, я добавил Vuforia (работает в одиночку). затем я также добавил Zxing.unity.dll в папку с плагинами, а затем добавил этот скрипт в ARCamera в сцене.

using UnityEngine;
using System;
using System.Collections;

using Vuforia;

using System.Threading;

using ZXing;
using ZXing.QrCode;
using ZXing.Common;


[AddComponentMenu("System/VuforiaScanner")]
public class VuforiaScanner : MonoBehaviour
{    
private bool cameraInitialized;

private BarcodeReader barCodeReader;

void Start()
{        
    barCodeReader = new BarcodeReader();
    StartCoroutine(InitializeCamera());
}

private IEnumerator InitializeCamera()
{
    // Waiting a little seem to avoid the Vuforia's crashes.
    yield return new WaitForSeconds(1.25f);

    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);
            }
            else
            {
                Debug.Log("No QR code detected !");
            }
        }
        catch (Exception e)
        {
            Debug.LogError(e.Message);
        }
    }
}    
}

Но он по-прежнему не обнаруживает никакого QRCode. Есть ли другой способ чтения и записи QR-кода, кроме Zxing? или любой рабочий образец проекта у вас есть?


person Nasir Khan    schedule 18.04.2017    source источник
comment
Хм. В прошлый раз, когда я занимался QR-вещами, Zxing отлично сработал для меня.   -  person Draco18s no longer trusts SE    schedule 20.04.2017
comment
@Draco18s, можешь поделиться своим работающим QR-проектом?   -  person Nasir Khan    schedule 21.04.2017
comment
У меня его больше нет. Это было в компании, в которой я больше не работаю, и даже если бы я работал, она, вероятно, была бы похоронена под четырьмя годами старых проектов. Я только помню, что мы делали QR-проект и что Zxing — это плагин, который мы использовали, и у него не было проблем с декодированием. Извините, я не могу больше помочь. :\   -  person Draco18s no longer trusts SE    schedule 21.04.2017
comment
Ну, вы используете Vuforia, так что технически вы можете сделать свой QR ImageTarget и распознать его.   -  person Hristo    schedule 28.04.2017


Ответы (1)


Я также попытался реализовать QRCode Reader с помощью Vuforia и XZing, используя почти тот же код, что и вы. Для меня это сработало, но для обнаружения QRCode потребовалось очень много времени. Когда я использовал массив Color32 вместо cameraFeed.pixels, это было намного быстрее:

GUI.DrawTexture(screenRect, webCamTexture, ScaleMode.ScaleToFit);
        try
        {
            IBarcodeReader barcodeReader = new BarcodeReader();
            var result = barcodeReader.Decode(webCamTexture.GetPixels32(),
                webCamTexture.width, webCamTexture.height);

            if (result != null)
            {
                Debug.Log("DECODED TEXT FROM QR: " + result.Text);
                loadNewPoi(Convert.ToInt32(result.Text));

                PlayerPrefs.SetInt("camera_enabled", Convert.ToInt32(false));
                webCamTexture.Stop();
            }
        }

Но в этом примере я использовал WebCamTexture вместо Vuforia. К сожалению, невозможно получить массив Color32 с помощью GetPixels32() из камеры Vuforia.

Другой вариант - использовать QRCodes в качестве целей изображения, но у меня есть много неправильных обнаружений, делающих это.

Для меня на данный момент нет подходящего решения для XZing вместе с Vuforia.

person Yleisnero    schedule 09.01.2020