最近突然想做一個人臉識別的程序,圖像的獲取可以從本地或者攝像頭獲取。
1、從本地獲取比較簡單,不多說。
2、從攝像頭獲取圖片。網上查了一下,都是用的JMF(但是JMF已經很久沒有更新,而且只支持32位的JDK,如果知道有更好的麻煩推薦一下!)
下載JMF(http://www.oracle.com/technetwork/java/javase/download-142937.html)
安裝
安裝完之后桌面上回出現JMStudio的快捷圖標,
點開測試一下,file->capture;
攝像頭驅動正常加載,點擊OK,然后
我靠,這什么鬼?一片粉啊,一定要這么嫩嗎 -_-||。 晃動一下窗口,會顯示圖像,但是是卡住的。
攝像頭正常打開了,但是顯示不了畫面,這樣完全沒用啊!於是就去網上查了一下,沒有答案,再看看回答時間,瞬間懷疑自己是不是用了個老古董了!
沒辦法,先試着寫程序吧
1 public static Component loadDiver() 2 { 3 //String str1 = "vfw:logitech usb video camera:0"; 4 String str2 = "vfw:Microsoft WDM Image Capture (Win32):0"; 5 6 deviceInfo = CaptureDeviceManager.getDevice(str2); //加載設備驅動 7 mLocator = deviceInfo.getLocator(); 8 try 9 { 10 11 player = Manager.createRealizedPlayer(mLocator); //獲取就緒的播放器 12 13 Component cp; 14 if((cp = player.getVisualComponent())!=null) 15 { 16 player.start(); 17 return cp; //返回窗體組件 18 } 19 } 20 catch(Exception e) 21 { 22 e.printStackTrace(); 23 } 24 return null; 25 }
運行之后發現一樣出現粉屏的問題, 弄了一會兒發現好像在畫面上覆蓋了一層JLabel或者JTextArea就可以正常顯示圖像(感覺好low啊/捂臉),可能是打開的方式不對!
最后無意中發現,只要窗體對准電腦屏幕的最左邊就可以正常顯示了,這程序是不是有強迫症啊?_?
好吧,雖然莫名其妙,但是也勉強算是解決了顯示問題了。
下面就是截圖了,於是就用了笨辦法,屏幕截圖(求聰明的辦法^_^):
1 BufferedImage buffImg = null; 2 try 3 { 4 buffImg = (new Robot()).createScreenCapture(new 5 Rectangle(0, 100, c1.getWidth(), c1.getHeight()-100)); //c1是上面方法返回的Component 6 } 7 catch(AWTException e1) 8 { 9 e1.printStackTrace(); 10 } 11 try 12 { 13 ImageIO.write(buffImg, "jpg", new File(path)); 14 } 15 catch(IOException e1) 16 { 17 e1.printStackTrace(); 18 }
成功獲取圖像
總結:JMF調用攝像頭產生粉屏,把窗體放在屏幕最左側可以正常顯示,具體原因未知!個人猜測可能是系統不兼容的造成。