1

我已经为 PS3eye 相机安装了 Cleye 驱动程序(驱动程序 5.3.0.0341 和 SDK 1.6.4.0028),并且我正在尝试在 Cl-eye 平台 SDK 中运行处理示例(java)。问题是处理库,更具体地说是 ClEyeMulticam.dll 没有加载,但偶尔(如 8 次中有 1 次)加载成功。为什么有时会加载该dll而有时不会加载该dll?我正在使用处理 2.2.1 32bit,我尝试在处理中手动指定路径,但它不起作用:“CLCamera.loadLibrary("C:/CLEyeMulticam.dll");"

Java示例代码:

///////////////////////////////////////////////////////////////////////////////////////////////////////////
//
// This file is part of CL-EyeMulticam SDK
//
// Java Processing CLEyeProcessingTest Sketch
//
// It allows the use of multiple CL-Eye cameras in your own Java Processing applications
//
// For updates and file downloads go to: http://codelaboratories.com/about/product/eye
//
// Copyright 2008-2012 (c) Code Laboratories, Inc. All rights reserved.
//
// Dependancies: CLEyeMulticam.dll - CL-Eye Platform Multicam API
//               CLEyeMulticam.jar - For processing.org move this into your libraries folder
//
////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Imports
import cl.eye.*;

// Camera Variables
int numCams;
CLCamera myCameras[] = new CLCamera[2];
PImage myImages[] = new PImage[2];
int cameraWidth = 640;
int cameraHeight = 480;
int cameraRate = 30;

// Animation Variables (not required)
boolean animate = true; 
float zoomVal, zoomDelta;
float rotateVal, rotateDelta;

void setup(){
  // Library loading via native interface (JNI)
  // If you see "UnsatisfiedLinkError" then target the library path otherwise leave it commented out.
  // CLCamera.loadLibrary("C://PATH//TO//CL-EYE SDK FOLDER//Bin/CLEyeMulticam.dll");

  // Verifies the native library loaded
  if(!setupCameras()) exit();
  // Setups animated variables 
  if(animate) setupAnimation();
}

void draw(){ 
  // Loops through available cameras and updates
  for(int i = 0; i < numCams; i++)
  {
    // ---------------------   (image destination, wait timeout)
    myCameras[i].getCameraFrame(myImages[i].pixels, (i==0) ? 1000 : 0);
    myImages[i].updatePixels();
    image(myImages[i], cameraWidth*i, 0);   
  }
  // Updates the animation
  if(animate)updateAnimation();
}

boolean setupCameras(){
  println("Getting number of cameras");
  // Checks available cameras
  numCams = CLCamera.cameraCount();
  println("Found " + numCams + " cameras");
  if(numCams == 0)  return false;
  // create cameras and start capture
  for(int i = 0; i < numCams; i++)
  {
    // Prints Unique Identifier per camera
    println("Camera " + (i+1) + " UUID " + CLCamera.cameraUUID(i));
    // New camera instance per camera
    myCameras[i] = new CLCamera(this);
    // ----------------------(i, CLEYE_GRAYSCALE/COLOR, CLEYE_QVGA/VGA, Framerate)
    myCameras[i].createCamera(i, CLCamera.CLEYE_COLOR_PROCESSED, CLCamera.CLEYE_VGA, cameraRate);
    // Starts camera captures
    myCameras[i].startCamera();
    myImages[i] = createImage(cameraWidth, cameraHeight, RGB); 
  }
  // resize the output window
  size(cameraWidth*numCams, cameraHeight);
  println("Complete Initializing Cameras");  
  return true;
}

void setupAnimation(){
   // General Animation Variables
   zoomVal = 0;
   zoomDelta = TWO_PI/75.0;
   rotateVal = 0;
   rotateDelta = TWO_PI/125.0;
}

void updateAnimation(){
   myCameras[0].setCameraParam(CLCamera.CLEYE_HKEYSTONE, (int)(150 * sin(rotateVal))); 
   myCameras[0].setCameraParam(CLCamera.CLEYE_VKEYSTONE, (int)(200 * cos(rotateVal)));
   //myCameras[0].setCameraParam(Multicam.CLEYE_LENSCORRECTION1, (int)(75 * sin(rotateVal)));
   if(numCams>1)
   {
     myCameras[1].setCameraParam(CLCamera.CLEYE_ZOOM, (int)(200 * sin(zoomVal)));
   }
   rotateVal += rotateDelta;
   zoomVal += zoomDelta;
}

处理库源码:

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//
// This file is part of CL-EyeMulticam SDK
//
// Java JNI CLEyeMulticam wrapper
//
// It allows the use of multiple CL-Eye cameras in your own Java applications
//
// For updates and file downloads go to: http://codelaboratories.com/research/view/cl-eye-muticamera-sdk
//
// Copyright 2008-2012 (c) Code Laboratories, Inc. All rights reserved.
//
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
package cl.eye;
import processing.core.*;

public class CLCamera
{
    // camera color mode
    public static int CLEYE_MONO_PROCESSED  = 0;
    public static int CLEYE_COLOR_PROCESSED = 1;
    public static int CLEYE_MONO_RAW            = 2;
    public static int CLEYE_COLOR_RAW           = 3;
    public static int CLEYE_BAYER_RAW           = 4;

    // camera resolution
    public static int CLEYE_QVGA        = 0;
    public static int CLEYE_VGA         = 1;

    // camera sensor parameters
    public static int CLEYE_AUTO_GAIN       = 0;    // [0, 1]
    public static int CLEYE_GAIN        = 1;    // [0, 79]
    public static int CLEYE_AUTO_EXPOSURE   = 2;    // [0, 1]
    public static int CLEYE_EXPOSURE        = 3;    // [0, 511]
    public static int CLEYE_AUTO_WHITEBALANCE   = 4;    // [0, 1]
    public static int CLEYE_WHITEBALANCE_RED    = 5;    // [0, 255]
    public static int CLEYE_WHITEBALANCE_GREEN  = 6;    // [0, 255]
    public static int CLEYE_WHITEBALANCE_BLUE   = 7;    // [0, 255]
    // camera linear transform parameters
    public static int CLEYE_HFLIP       = 8;    // [0, 1]
    public static int CLEYE_VFLIP       = 9;    // [0, 1]
    public static int CLEYE_HKEYSTONE       = 10;   // [-500, 500]
    public static int CLEYE_VKEYSTONE       = 11;   // [-500, 500]
    public static int CLEYE_XOFFSET     = 12;   // [-500, 500]
    public static int CLEYE_YOFFSET     = 13;   // [-500, 500]
    public static int CLEYE_ROTATION        = 14;   // [-500, 500]
    public static int CLEYE_ZOOM        = 15;   // [-500, 500]
    // camera non-linear transform parameters
    public static int CLEYE_LENSCORRECTION1 = 16;   // [-500, 500]
    public static int CLEYE_LENSCORRECTION2 = 17;   // [-500, 500]
    public static int CLEYE_LENSCORRECTION3 = 18;   // [-500, 500]
    public static int CLEYE_LENSBRIGHTNESS  = 19;   // [-500, 500]

    native static int CLEyeGetCameraCount();
    native static String CLEyeGetCameraUUID(int index);
    native static int CLEyeCreateCamera(int cameraIndex, int mode, int resolution, int framerate);
    native static boolean CLEyeDestroyCamera(int cameraIndex);
    native static boolean CLEyeCameraStart(int cameraInstance);
    native static boolean CLEyeCameraStop(int cameraInstance);
    native static boolean CLEyeSetCameraParameter(int cameraInstance, int param, int val);
    native static int CLEyeGetCameraParameter(int cameraInstance, int param);
    native static boolean CLEyeCameraGetFrame(int cameraInstance, int[] imgData, int waitTimeout);

    private int cameraInstance = 0;
    private PApplet parent;
    private static boolean libraryLoaded = false;
    private static String dllpathx32 = "C://Program Files//Code Laboratories//CL-Eye Platform SDK//Bin//CLEyeMulticam.dll";
    private static String dllpathx64 = "C://Program Files (x86)//Code Laboratories//CL-Eye Platform SDK//Bin//CLEyeMulticam.dll";

    // static methods
    static
    {
        try
        {
            System.load(dllpathx32);
            libraryLoaded = true;
            System.out.println("CLEyeMulticam.dll loaded");
        }
        catch(UnsatisfiedLinkError e1)
        {
            System.out.println("(1) Could not find the CLEyeMulticam.dll");
            try
            {
                System.load(dllpathx64);
                libraryLoaded = true;
                System.out.println("CLEyeMulticam.dll loaded");
            }
            catch(UnsatisfiedLinkError e2)
            {
                System.out.println("(2) Could not find the CLEyeMulticam.dll");
            }
        }
    }
    public static boolean IsLibraryLoaded()
    {
        return libraryLoaded;
    }
    public static void loadLibrary(String libraryPath)
    {
        if(libraryLoaded)   return;
        try
        {
            System.load(libraryPath);
            System.out.println("CLEyeMulticam.dll loaded");
        }
        catch(UnsatisfiedLinkError e1)
        {
            System.out.println("(3) Could not find the CLEyeMulticam.dll (Custom Path)");
        }
    }
    public static int cameraCount()
    {
        return CLEyeGetCameraCount();
    }
    public static String cameraUUID(int index)
    {
        return CLEyeGetCameraUUID(index);
    }
    // public methods
    public CLCamera(PApplet parent)
    {
        this.parent = parent;
        parent.registerDispose(this);
    }
    public void dispose()
    {
        stopCamera();
        destroyCamera();
    }
    public boolean createCamera(int cameraIndex, int mode, int resolution, int framerate)
    {
        cameraInstance = CLEyeCreateCamera(cameraIndex, mode, resolution, framerate);
        return cameraInstance != 0;
    }
    public boolean destroyCamera()
    {
        return CLEyeDestroyCamera(cameraInstance);
    }
    public boolean startCamera()
    {
        return CLEyeCameraStart(cameraInstance);
    }
    public boolean stopCamera()
    {
        return CLEyeCameraStop(cameraInstance);
    }
    public boolean getCameraFrame(int[] imgData, int waitTimeout)
    {
        return CLEyeCameraGetFrame(cameraInstance, imgData, waitTimeout);
    }
    public boolean setCameraParam(int param, int val)
    {
        return CLEyeSetCameraParameter(cameraInstance, param, val);
    }
    public int getCameraParam(int param)
    {
        return CLEyeGetCameraParameter(cameraInstance, param);
    }
}
4

0 回答 0