Unity中的连续QR码扫描

时间:2017-11-24 04:56:56

标签: unity3d qr-code

问题只是要给出解决方案:)

主要思想是识别Unity上的QR码,而不需要任何其他操作,例如点击屏幕或者像这样。

1 个答案:

答案 0 :(得分:3)

(对我而言,“vuforia free”没有必要有水印,所以这是我的解决方案)

(此外,Vuforia可以更快地与相机配合使用,无需实现手动自动对焦)

使用Vuforia作为网络摄像头源并使用ZXing Library作为QR识别器的连续QR码识别

using UnityEngine;
using Vuforia;
using ZXing;

public class QRCodeReader : MonoBehaviour {

    private bool _isFrameFormatSet;

    IBarcodeReader _barcodeReader = new BarcodeReader();

    void Start () {
        InvokeRepeating("Autofocus", 2f, 2f);
    }

    void Autofocus () {
        CameraDevice.Instance.SetFocusMode(CameraDevice.FocusMode.FOCUS_MODE_TRIGGERAUTO);

        RegognizeQR();
    }

    private Vuforia.Image GetCurrFrame()
    {
        return CameraDevice.Instance.GetCameraImage(Vuforia.Image.PIXEL_FORMAT.GRAYSCALE);
    }

    void RegognizeQR()
    {
        if (!_isFrameFormatSet == _isFrameFormatSet)
        {
            _isFrameFormatSet = CameraDevice.Instance.SetFrameFormat(Vuforia.Image.PIXEL_FORMAT.GRAYSCALE, true);
        }

        var currFrame = GetCurrFrame();

        if (currFrame == null)
        {
            Debug.Log("Camera image capture failure;");
        }
        else
        {
            var imgSource = new RGBLuminanceSource(currFrame.Pixels, currFrame.BufferWidth, currFrame.BufferHeight, true);

            var result = _barcodeReader.Decode(imgSource);
            if (result != null)
            {
                Debug.Log("RECOGNIZED: " + result.Text);
            }
        }
    }
}

在没有Vuforia的情况下也可以实现。 Unity提供了获取摄像头并在网络摄像头上显示输入的可能性。可以找到更多文档here

ZXing lib您可以找到here,或者使用sourse code located on github亲自构建它。

这两个库都是跨平台的,因此在不同的设备上一定不会出现问题。