天天看點

java 攝像頭 win7_Win7系統下JAVA攝像頭調用_執行個體代碼介紹

Win7系統下JAVA攝像頭調用_執行個體代碼介紹。由于要搞個人臉識别登入(JAVACV),百度谷歌了一下午,找了網上簡單的樣例代碼來試,可是老是調試不過,出現CaptureDeviceManager.getDevice 為空指針。郁悶了一下午。現在終于搞出來了。特此紀念一下,因為在網上找了大半天,發現這方面的介紹不是很多,是以也希望能為後來的學習者有所幫助,少走些彎路。

功能:實作攝像頭調用

java 攝像頭 win7_Win7系統下JAVA攝像頭調用_執行個體代碼介紹
java 攝像頭 win7_Win7系統下JAVA攝像頭調用_執行個體代碼介紹

2、建立設定JMF的環境變量,”計算機”->”系統屬性”->”進階環境設定”->”進階”->”環境變量”

變量名:”JMFHOME”          變量值:”C:\Program Files\JMF2.1.1e”

變量名:”CLASSPATH”      變量值:”;%JMFHOME%\lib\jmf.jar;%JMFHOME%\lib\sound.jar”

如圖:

java 攝像頭 win7_Win7系統下JAVA攝像頭調用_執行個體代碼介紹
java 攝像頭 win7_Win7系統下JAVA攝像頭調用_執行個體代碼介紹
java 攝像頭 win7_Win7系統下JAVA攝像頭調用_執行個體代碼介紹
java 攝像頭 win7_Win7系統下JAVA攝像頭調用_執行個體代碼介紹

3、打開安裝好了的JMF,在C:\Program Files\JMF2.1.1e\bin目錄下打開“jmfregistry.exe”,選擇“Capture Devices” 然後按左下角“Detect Capture Devices”按鈕,多按幾次,直到左邊欄中出現“ vfw:Microsoft WDM Image Capture (Win32):0” ,則說明JMF已經注冊了攝像頭,到此就可以關閉了。

如圖:

java 攝像頭 win7_Win7系統下JAVA攝像頭調用_執行個體代碼介紹
java 攝像頭 win7_Win7系統下JAVA攝像頭調用_執行個體代碼介紹
java 攝像頭 win7_Win7系統下JAVA攝像頭調用_執行個體代碼介紹
java 攝像頭 win7_Win7系統下JAVA攝像頭調用_執行個體代碼介紹

4、現在可以用Eclipse 程式設計了。建立一個工程,把下面樣例代碼複制進去,在該工程點選右鍵選擇Build Path ->Configure Build Path… ->Libraries ->Add External JARs… 然後把安裝的JMF裡面\lib目錄下的幾個Jar包導入進來。

如圖:

java 攝像頭 win7_Win7系統下JAVA攝像頭調用_執行個體代碼介紹
java 攝像頭 win7_Win7系統下JAVA攝像頭調用_執行個體代碼介紹

5、運作即可。

import java.awt.BorderLayout;

import java.awt.Component;

import javax.media.CaptureDeviceInfo;

import javax.media.Manager;

import javax.media.MediaLocator;

import javax.media.Player;

import javax.media.cdm.CaptureDeviceManager;

import javax.swing.JFrame;

import javax.swing.JPanel;

public class Test extends JFrame{

public  static Player player = null;

private CaptureDeviceInfo deviceInfo = null;

private MediaLocator mediaLocator = null;

private Component component = null;

private JPanel vedioPanel = null;

String   str1   =   “vfw:Logitech   USB   Video   Camera:0″;      //擷取USB攝像頭的字元串

String   str2   =   “vfw:Microsoft WDM Image Capture (Win32):0″;    //擷取本地攝像頭的字元串

// Creates a new instance of CameraTest

public Test() {

init();

}

public void init(){

deviceInfo = CaptureDeviceManager.getDevice(str2);  //根據字元串擷取采集裝置(攝像頭)的引用

//   System.out.println(deviceInfo);         //顯示采集裝置(攝像頭)的資訊

//   System.out.println(deviceInfo.getName());     //顯示采集裝置(攝像頭)的裝置名稱

mediaLocator = deviceInfo.getLocator(); //擷取采集裝置的定位器的引用,需要根據此引用來建立視訊播放器

try{

player = Manager.createRealizedPlayer(mediaLocator);// 利用mediaLocator 擷取一個player

component = player.getVisualComponent();

if (component != null){

vedioPanel = new JPanel();

vedioPanel.add(component, BorderLayout.NORTH);

this.add(vedioPanel);

this.pack();    // 自動配置設定窗體大小

this.setResizable(false);

this.setDefaultCloseOperation(EXIT_ON_CLOSE);

this.setVisible(true);

player.start();

}

}catch(Exception e){

e.printStackTrace();

}

}

public static void main(String[] args) {

new Test();

}

}