Использование ids-веб-камеры для отслеживания QR-кодов в Unity2D с ZXING не работает
Я пытаюсь интегрировать ids веб-камеру в проекте unity2d для отслеживания qr-кодов на поверхности с помощью библиотеки zxing.
Использование 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();
}
}