Использование ids-веб-камеры для отслеживания QR-кодов в Unity2D с ZXING не работает

Я пытаюсь интегрировать ids веб-камеру в проекте unity2d для отслеживания qr-кодов на поверхности с помощью библиотеки zxing.

  1. Использование ZXing

    Я пытался использовать функцию uEye.Memory.CopyToArray(), чтобы получить bytearray
    из памяти камеры, названной "actualPicture". Мой метод Zxing
    DecodeQRCodes() принимает этот Bytearray, но не может получить никаких результатов qrcode
    из этого. Там нет ошибки или что-то подобное, но Zxing не получить
    любые результаты. Я попробовал Zxing с простой веб-камерой Logitech таким же образом
    и это сработало.

    Вопрос: Почему библиотека ZXing не может обнаружить qrcodes, хотя я
    держите qrcodes перед камерой?

Мой Unityscript:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System;
using ZXing;
using ZXing.QrCode;
using ZXing.Common;
using uEye;
using ZXing.Multi.QrCode;
using System.IO;
using UnityEditor;

public class MainScript : MonoBehaviour {
    private QRCodeMultiReader reader;
    private Result[] qrCodeResults;
    private LuminanceSource luminance;
    private Binarizer binarizer;
    private BinaryBitmap binBitmap;

    //IDS Camera
    private uEye.Camera idsCam;
    private byte[] actualPicture;
    private int width;
    private int height;

    void Start () {
        reader = new QRCodeMultiReader();
        InitIDS();
    }

    void Update () {
        DecodeQRCodes();
    }

    public void DecodeQRCodes()
    {
        try
        {
            if(actualPicture != null){
                luminance = new RGBLuminanceSource(actualPicture, width,height);
                binarizer = new HybridBinarizer(luminance);
                binBitmap = new BinaryBitmap(binarizer);
                qrCodeResults = reader.decodeMultiple(binBitmap);
            }
        }
        catch (Exception e)
        {
            Debug.Log(e.ToString());
        }
    }


    public void InitIDS()
    {
        //Camera Initialization
        idsCam = new uEye.Camera();
        idsCam.Init();

        //Memory allocation and start of video capturing
        idsCam.Memory.Allocate();
        idsCam.Acquisition.Capture();

        /Gainsetting and whitebalancesetting
        idsCam.AutoFeatures.Software.Gain.SetEnable(true);
        idsCam.AutoFeatures.Software.WhiteBalance.SetEnable(true);

        //Get camera width and height
        idsCam.PixelFormat.Set(uEye.Defines.ColorMode.Mono8);
        Int32 s32MemId;
        idsCam.Memory.GetActive(out s32MemId);
        idsCam.Memory.GetHeight(s32MemId, out height);
        idsCam.Memory.GetWidth(s32MemId, out width);
        idsCam.EventFrame += OnFrameEvent;
    }

    private void OnFrameEvent(object sender, EventArgs e)
    { 
        uEye.Camera cam = sender as uEye.Camera;

        //Get the active Memoryentry and lock it
        Int32 s32MemId;
        cam.Memory.GetActive(out s32MemId);
        cam.Memory.Lock(s32MemId);

        try
        {
            //get the actual saved bytearray and save it in actualPicture
            cam.Memory.CopyToArray(s32MemId, out actualPicture);
            cam.Memory.Unlock(s32MemId);
        }
        catch (Exception e)
        {
            Debug.Log(e.ToString());
        }
    }

    private void OnApplicationQuit()
    {
        idsCam.Exit();
    }

}

0 ответов

Другие вопросы по тегам