2014-01-17 2 views
1

В настоящее время я начинаю проект, где хочу захватить и управлять потоком данных с веб-камеры, чтобы начать работу. Я хотел взять несколько фотографий с веб-камеры и показать их пользователю. Однако это дало ошибку.java capture webcam images macbook

public class quicktest implements Runnable { 
     public static void main(String[] args){ 
      Thread t=new Thread(new quicktest()); 
      t.start(); 
     } 

     IplImage image; 
     CanvasFrame canvas = new CanvasFrame("Web Cam"); 
     public quicktest() { 
      canvas.setDefaultCloseOperation(javax.swing.JFrame.EXIT_ON_CLOSE); 
     } 
     @Override 
     public void run() { 
      FrameGrabber grabber = new VideoInputFrameGrabber(0); 

      int i=0; 
      try { 
       grabber.start(); 
       IplImage img; 
       while (true) { 
        img = grabber.grab(); 
        if (img != null) { 
         cvFlip(img, img, 1);// l-r = 90_degrees_steps_anti_clockwise 
         // show image on window 
         canvas.showImage(img); 
        } 
        Thread.sleep(1000); 
       } 
      } catch (Exception e) { 
      } 
     } 

это дает следующее исключение:

Exception in thread "Thread-3" java.lang.UnsatisfiedLinkError: no jnivideoInputLib in java.library.path 
    at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1764) 
    at java.lang.Runtime.loadLibrary0(Runtime.java:823) 
    at java.lang.System.loadLibrary(System.java:1044) 
    at com.googlecode.javacpp.Loader.loadLibrary(Loader.java:711) 
    at com.googlecode.javacpp.Loader.load(Loader.java:586) 
    at com.googlecode.javacpp.Loader.load(Loader.java:540) 
    at com.googlecode.javacv.cpp.videoInputLib.<clinit>(videoInputLib.java:81) 
    at java.lang.Class.forName0(Native Method) 
    at java.lang.Class.forName(Class.java:249) 
    at com.googlecode.javacpp.Loader.load(Loader.java:561) 
    at com.googlecode.javacpp.Loader.load(Loader.java:540) 
    at com.googlecode.javacv.cpp.videoInputLib$videoInput.<clinit>(videoInputLib.java:193) 
    at com.googlecode.javacv.VideoInputFrameGrabber.start(VideoInputFrameGrabber.java:101) 
    at com.googlecode.javacv.VideoInputFrameGrabber.start(VideoInputFrameGrabber.java:98) 
    at quicktest.run(quicktest.java:27) 
    at java.lang.Thread.run(Thread.java:695) 

Я уже искал и попробовал то, что было предложено here, однако это дало мне еще одну ошибку:

at java.lang.Class.forName0(Native Method) 
at java.lang.Class.forName(Class.java:249) 
at com.googlecode.javacpp.Loader.load(Loader.java:561) 
at com.googlecode.javacpp.Loader.load(Loader.java:540) 
at com.googlecode.javacv.cpp.videoInputLib$videoInput.<clinit>(videoInputLib.java:193) 
at Main.main(Main.java:5) 

ли кто-нибудь знает, как исправить это? Кстати, это происходит на macbook pro 10.7.5 и пытается использовать сборку в веб-камере. И хотя это определенно не должно иметь значения, есть также раскол окуля. Использование OpenCVFrameGrabber вместо этого дало мне исключение java.lang.UnsatisfiedLinkError: no jniopencv_highgui in java.library.path.

Кстати, если кто-то знает еще один простой способ получить изображения с моей веб-камеры в java, что было бы полезно.

нимало, что benny.la сказал я isntead получить

исключение в потоке java.lang.UnsatisfiedLinkError "Thread-3": нет jnivideoInputLib в java.library.path

at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1764) 
at java.lang.Runtime.loadLibrary0(Runtime.java:823) 
at java.lang.System.loadLibrary(System.java:1044) 
at com.googlecode.javacpp.Loader.loadLibrary(Loader.java:711) 
at com.googlecode.javacpp.Loader.load(Loader.java:586) 
at com.googlecode.javacpp.Loader.load(Loader.java:540) 
at com.googlecode.javacv.cpp.videoInputLib.<clinit>(videoInputLib.java:81) 
at java.lang.Class.forName0(Native Method) 
at java.lang.Class.forName(Class.java:249) 
at com.googlecode.javacpp.Loader.load(Loader.java:561) 
at com.googlecode.javacpp.Loader.load(Loader.java:540) 
at com.googlecode.javacv.cpp.videoInputLib$videoInput.<clinit>(videoInputLib.java:193) 
at com.googlecode.javacv.VideoInputFrameGrabber.start(VideoInputFrameGrabber.java:101) 
at com.googlecode.javacv.VideoInputFrameGrabber.start(VideoInputFrameGrabber.java:98) 
at quicktest.run(quicktest.java:29) 
at java.lang.Thread.run(Thread.java:695) 

исключение.

+0

Ошибка связана с отсутствием нужной библиотеки. Аналогичная проблема: http://code.google.com/p/javacv/issues/detail?id=307. Если я правильно понимаю, 'videoInput' - только Windows. Вам нужно использовать другую библиотеку. –

+0

Это действительно не работает даже с другими классами, предложенными внутри вашей ссылки, поскольку он все еще порождает ошибки, любые другие идеи? – Thijser

+0

Попробуйте использовать FrameGrabber.createDefault (0) – Dyrborg

ответ

1

By the way if anyone knows another easy way to get images from my webcam into java that would be helpful to.

Поскольку вы на MacBook, вы могли бы сделать так, meting like:

Runtime.getRuntime().exec("screencapture tempfile.jpg"); 
InputStream in = new FileInputStream("tempfile.jpg"); 
+0

Это создает скриншот текущего экрана. Не изображение с веб-камеры. – Thijser

+0

Вы правы. Я думал, что у вас уже есть изображение. Я заметил в вашем коде, вы вызываете новый VideoInputFrameGrabber (0). Вы пытались вызвать FrameGrabber.createDefault (0) вместо этого? –

+0

Кажется, что генерирует исключение нулевого указателя на FrameGrabber.createDefault (0) вместо – Thijser

1

Кажется, что ваш JavaCV настроен неправильно.

Вы сделали следующее?

  1. Загрузили xxx-bin.zip и xxx-cppjars.zip из here
  2. экстракте .zip файлы
  3. Добавьте ххх-MacOSX-x86_64.jar к вашему затмить проект
+0

Это что-то делает, но дает мне еще одну ошибку. – Thijser

1

Та же проблема, с которой я столкнулся. Я использую Mac OSX с OpenCV-2.4.10 с Java CV 0,10

Эта проблема, которую я получаю, когда я пытаюсь запустить ColoredObjectTrack.java (присутствует в javaCV-образцов) я использовал OpenCVFrameGrabber вместо VideoInputFrameGrabber. Это сработало.

+1

Не могли бы вы предоставить дополнительную информацию? Вы можете добавить примерный код или цитату из документов. – ForceBru