Как я могу заставить этот пример кода LTI CIVIL работать под Ubuntu? - PullRequest
1 голос
/ 10 октября 2011

Я протестировал программу, которая берет фотографию с веб-камеры и сохраняет ее каждые 2 секунды на основе библиотеки LTI CIVIL.Программа работала очень хорошо под Windows Vista, но я получил ошибку, когда я запустил ее под Ubuntu:

run:
Exception in thread "main" com.lti.civil.CaptureException:java.lang.UnsatisfiedLinkError: no civil in java.library.path
    at com.lti.civil.impl.jni.NativeCaptureSystemFactory.createCaptureSystem(NativeCaptureSystemFactory.java:24)
    at emptyroomoperation_final.Camera.main(Camera.java:41)
    Caused by: java.lang.UnsatisfiedLinkError: no civil in java.library.path
    at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1734)
    at java.lang.Runtime.loadLibrary0(Runtime.java:823)
    at java.lang.System.loadLibrary(System.java:1028)
    at com.lti.civil.impl.jni.NativeCaptureSystemFactory.createCaptureSystem(NativeCaptureSystemFactory.java:21)
    ... 1 more
Java Result: 1

Вот код:

/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/

package emptyroomoperation_final;

import java.awt.image.BufferedImage;
import java.io.FileOutputStream;
import java.util.List;

import com.lti.civil.CaptureDeviceInfo;
import com.lti.civil.CaptureException;
import com.lti.civil.CaptureObserver;
import com.lti.civil.CaptureStream;
import com.lti.civil.CaptureSystem;
import com.lti.civil.CaptureSystemFactory;
import com.lti.civil.DefaultCaptureSystemFactorySingleton;
import com.lti.civil.Image;
import com.lti.civil.VideoFormat;
import com.lti.civil.awt.AWTImageConverter;
import com.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.JPEGImageEncoder;
import java.io.File;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
*
* @author Ken Larson
*/
public class Camera
{
    static public String s;
    static int w=0;  
    //static File f1 = new File("C:\\Users\\mostafa\\Documents\\NetBeansProjects   \\EmptyRoomOperation\\0.jpg") ;
    // static File f2 = new File("C:\\Users\\mostafa\\Documents\\NetBeansProjects\\EmptyRoomOperation\\") ;
    public static void main(String[] args) throws CaptureException
    {
        CaptureSystemFactory factory = DefaultCaptureSystemFactorySingleton.instance();
        CaptureSystem system = factory.createCaptureSystem();
        system.init();
        List list = system.getCaptureDeviceInfoList();
        for (int i = 0; i < list.size(); ++i)
        {
            CaptureDeviceInfo info = (CaptureDeviceInfo) list.get(i);

            System.out.println("Device ID " + i + ": " + info.getDeviceID());
            System.out.println("Description " + i + ": " + info.getDescription());

            CaptureStream captureStream = system.openCaptureDeviceStream(info.getDeviceID());

            System.out.println("Current format " + videoFormatToString(captureStream.getVideoFormat()));

            captureStream.setObserver(new MyCaptureObserver());
            System.out.println("Available formats:");
            for (VideoFormat format : captureStream.enumVideoFormats())
            {
                System.out.println(" " + videoFormatToString(format));
            }

            final int MAX_FORMATS = 2;
            int count = 0;
            //for (VideoFormat format : captureStream.enumVideoFormats())//not now
            VideoFormat format = captureStream.enumVideoFormats().get(0);//alternative of the above
            int k=0;

            while(k!=10)
            {
                /*if (count > MAX_FORMATS)
                {    System.out.println("Stopping after " + MAX_FORMATS + " formats.");    // could be a lot
                    break;
                }*/
                System.out.println("Choosing format: " + videoFormatToString(format));
                captureStream.setVideoFormat(format);
                s = new String(""+w);
                // File f2 = new File("C:\\Users\\mostafa\\Documents\\NetBeansProjects\\EmptyRoomOperation\\"+s+".jpg") ;

                //  f1.
                System.out.println("Capturing for 2 seconds...");
                captureStream.start();
                try
                {
                    Thread.sleep(2000);
                }
                catch (InterruptedException e)
                {
                    return;
                }

                captureStream.stop();
                /*try {
                   // Thread.sleep(10000);
                } catch (Exception ex) {
                    Logger.getLogger(Camera.class.getName()).log(Level.SEVERE, null, ex);
                }*/
                //++count;
                w++;
            }
            System.out.println("disposing stream...");
            captureStream.dispose();

        }
        System.out.println("disposing system...");
        system.dispose();
        System.out.println("done.");
    }

    public static String videoFormatToString(VideoFormat f)
    {
        return "Type=" + formatTypeToString(f.getFormatType()) + " Width=" + f.getWidth() + " Height=" + f.getHeight() + " FPS=" + f.getFPS();
    }

    private static String formatTypeToString(int f)
    {
        switch (f)
        {
            case VideoFormat.RGB24:
                return "RGB24";
            case VideoFormat.RGB32:
                return "RGB32";
            default:
                return "" + f + " (unknown)";
        }
    }

}

class MyCaptureObserver implements CaptureObserver
{
    public void onError(CaptureStream sender, CaptureException e)
    {    System.err.println("onError " + sender);
        e.printStackTrace();
    }

    public void onNewImage(CaptureStream sender, Image image)
    {
        final BufferedImage bimg;
        try
        {
            final VideoFormat format = image.getFormat();
            System.out.println("onNewImage format=" + Camera.videoFormatToString(format) + " length=" + image.getBytes().length);
            bimg = AWTImageConverter.toBufferedImage(image);
        }
        catch (Exception e)
        {    e.printStackTrace();
            return;
        }

        // Encode as a JPEG
        try
        {
            FileOutputStream fos = new FileOutputStream(Camera.s+".jpg");
            JPEGImageEncoder jpeg = JPEGCodec.createJPEGEncoder(fos);
            jpeg.encode(bimg);
            fos.close();
        }
        catch (Exception e)
        {
            e.printStackTrace();
        }
    }
}

Примечание: Это почтитот же тестовый код, который поставляется с LTI CIVIL, но с некоторыми изменениями.

Как я понимаю, LTI CIVIL должен работать и под Ubuntu.Как мне заставить этот кусок кода работать под Ubuntu?

1 Ответ

2 голосов
/ 10 октября 2011

После загрузки и просмотра файлов, похоже, что те, которые вам нужны, находятся в каталоге lti-civil / native.Существует linux-amd64 и linux-x86 в зависимости от вашей версии linux.Теперь вы можете делать вещи двумя способами: LD_LIBRARY_PATH - это переменная среды, которую вы можете указать для указания каталогов, в которых вы хотите, чтобы linux искал динамические библиотеки.

Другой рекомендуемый вариант - сделать следующее.Создайте /etc/ld.so.conf.d/civil.conf.Файл должен содержать только одну строку с путем, куда вы распаковали или распаковали файлы lti-civil / native / linux-xxx / lib * .so.Для этого вам понадобятся права root или sudo.Если у вас нет доступа, установите для LD_LIBRARY_PATH значение lti-civil / native / ...., и оно должно работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...