JxCapture osx相机问题

时间:2017-03-07 21:49:04

标签: macos opencv javacv jmf webcam-capture

背景:

我正在做一个关于活动识别的人工智能项目,要求我使用相机并且必须使用Java。它必须是内置摄像头,因为我没有摄像头。当我尝试使用JxCapture在Java中使用相机时,我会在底部附近列出下面列出的相同(谢天谢地不是那么神秘)错误。这个错误似乎暗示着Java,或者至少这个库和其他一些人无法拿起我的内置摄像头。我注意到这一点,因为JMF也有一个类似的问题,它无法检测到相机。

import com.teamdev.jxcapture.Codec;
import com.teamdev.jxcapture.EncodingParameters;
import com.teamdev.jxcapture.VideoCapture;
import com.teamdev.jxcapture.video.VideoFormat;
import com.teamdev.jxcapture.video.VideoSource;

import java.io.File;
import java.util.List;

/*
 * This example demonstrates the video capture from web camera.
 * <pre>
 * Platforms:           
 * Image source:        WebCamera
 * Output video format: 
 * Output file:         
 *
 * @author Serge Piletsky
 */
public class TemplateRun 
{
    public static void main(String[] args) throws Exception 
    {
        VideoCapture videoCapture = VideoCapture.create(VideoFormat.WMV); 
        // This is where things go south. 
        Thread.sleep(1000);
        ....
    }
}

研究:

我已就此问题进行了公平的研究。有些人建议使用Windows操作系统,屏幕录制照相亭或正面运行等等,但实际上没有人真正回答过这个问题。我还没有尝试过OpenCV / JavaCV,因为我不想浪费另外一些时间来解决同样的问题。代码也编译和运行(错误除外),甚至能够获取变量,因此库本身就可以正常工作。这是Java / OSX中某些框架的问题吗?有办法解决这个问题吗?有一个很好的现代工作吗?

482 [main] ERROR com.teamdev.jxcapture.VideoCapture - No compatible video capture modules found for running operating system.
availableVideoSources = [LionVideoDevice[Name='FaceTime HD Camera (Built-in)'; Enabled=false]]
webCamera = LionVideoDevice[Name='FaceTime HD Camera (Built-in)'; Enabled=false]
Exception in thread "main" java.lang.NullPointerException
at TemplateRun.main(TemplateRun.java:34)

设备:

相机:V5.16 FaceTime高清摄像头(内置)。

电脑:Macbook pro 2012年中期

OS:MAC OS Sierra 10.12.3

Java版:Java 8更新,121

经过测试,看起来OpenCV / JavaCV似乎无法从内置摄像头获取摄像头。

1 个答案:

答案 0 :(得分:0)

您正尝试使用VideoFormat.WMV视频格式初始化VideoCapture videoCapture = VideoCapture.create(VideoFormat.MP4); 课程的实例。

JxCapture在MacOS上不支持这种格式。您必须改为使用VideoFormat.MP4:

VideoCapture

或使用默认构造函数创建VideoCapture videoCapture = VideoCapture.create(); 的实例:

NSString *foo = @"bar"; // foo is a reference to a string object
doSomething( foo ); // a reference is passed