使用LTI-CIVIL库从网络摄像头捕获图像

时间:2013-04-07 10:14:36

标签: java lti

我正在使用LTI-CIVIL库运行cod eto捕获图像..

这是代码......

public class TestWebCam implements CaptureObserver {

    JButton start = null;
    JButton shot = null;
    JButton stop = null;
    CaptureStream captureStream = null;
    boolean takeShot = false;

    public TestWebCam() {
        CaptureSystemFactory factory = DefaultCaptureSystemFactorySingleton.instance();
        CaptureSystem system;
        try {
            system = factory.createCaptureSystem();
            system.init();
            List list = system.getCaptureDeviceInfoList();
            int i = 0;
            if (i < list.size()) {
                CaptureDeviceInfo info = (CaptureDeviceInfo) list.get(i);
                System.out.println((new StringBuilder()).append("Device ID ").append(i).append(": ").append(info.getDeviceID()).toString());
                System.out.println((new StringBuilder()).append("Description ").append(i).append(": ").append(info.getDescription()).toString());
                captureStream = system.openCaptureDeviceStream(info.getDeviceID());
                captureStream.setObserver(TestWebCam.this);
            }
        } catch (CaptureException ex) {
            ex.printStackTrace();
        }
//UI work of the program
        JFrame frame = new JFrame();
        frame.setSize(7000, 800);
        JPanel panel = new JPanel();
        frame.setContentPane(panel);
        frame.setVisible(true);
        frame.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
        start = new JButton("Start");
        stop = new JButton("Stop");
        shot = new JButton("Shot");
        panel.add(start);
        panel.add(stop);
        panel.add(shot);
        panel.revalidate();
        start.addActionListener(new ActionListener() {

            public void actionPerformed(ActionEvent e) {
                try {
                    captureStream.start();
                } catch (CaptureException ex) {
                    ex.printStackTrace();

                }
            }
        });
        stop.addActionListener(new ActionListener() {

            public void actionPerformed(ActionEvent e) {
                try {
                    captureStream.stop();
                } catch (CaptureException ex) {
                    ex.printStackTrace();
                }
            }
        });
        shot.addActionListener(new ActionListener() {

            public void actionPerformed(ActionEvent e) {
                takeShot = true;
            }
        });
    }

    public void onNewImage(CaptureStream stream, Image image) {

        if (!takeShot) {
            return;
        }
        takeShot = false;
        System.out.println("New Image Captured");
        byte bytes[] = null;
        try {
            if (image == null) {
                bytes = null;
                return;
            }
            try {
                ByteArrayOutputStream os = new ByteArrayOutputStream();
                JPEGImageEncoder jpeg = JPEGCodec.createJPEGEncoder(os);
                jpeg.encode(AWTImageConverter.toBufferedImage(image));
                os.close();
                bytes = os.toByteArray();
            } catch (IOException e) {
                e.printStackTrace();
                bytes = null;
            } catch (Throwable t) {
                t.printStackTrace();
                bytes = null;
            }
            if (bytes == null) {
                return;
            }
            ByteArrayInputStream is = new ByteArrayInputStream(bytes);
            File file = new File("/img" + Calendar.getInstance().getTimeInMillis() + ".jpg");
            FileOutputStream fos = new FileOutputStream(file);
            fos.write(bytes);
            fos.close();
            BufferedImage myImage = ImageIO.read(file);
            shot.setText("");
            shot.setIcon(new ImageIcon(myImage));
            shot.revalidate();
        } catch (IOException ex) {
            ex.printStackTrace();
        }
    }

    public void onError(CaptureStream arg0, CaptureException arg1) {
        throw new UnsupportedOperationException("Error is coming ");

    }

    public static void main(String args[])
            throws Exception {
        TestWebCam test = new TestWebCam();

    }
}

我收到错误...

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 attendance.TestWebCam.<init>(TestWebCam.java:51)
        at attendance.TestWebCam.main(TestWebCam.java:160)
Caused by: java.lang.UnsatisfiedLinkError: no civil in java.library.path
        at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1860)
        at java.lang.Runtime.loadLibrary0(Runtime.java:845)
        at java.lang.System.loadLibrary(System.java:1084)
        at com.lti.civil.impl.jni.NativeCaptureSystemFactory.createCaptureSystem(NativeCaptureSystemFactory.java:21)
        ... 2 more

1 个答案:

答案 0 :(得分:2)

得到了解决方案.. 我是64位机器,为此我们需要将civil.dll粘贴到syswow64文件夹而不是system32。