摘要:今天我準備學習如何用來進行人臉檢測。它提供和的接口,并支持所有主流操作系統平臺,包括及。這個過程之后,將有面部檢測。我們遍歷所有的臉部檢測并用矩形標記圖像。這個程序的輸出展示如下,這是在人臉檢測之前和之后的圖片今天就這些,歡迎反饋。
編者注:我們發現了比較有趣的系列文章《30天學習30種新技術》,準備翻譯,一天一篇更新,年終禮包。下面是第十二天的內容。
今天我準備學習如何用Java來進行人臉檢測。人臉檢測有助于在任何數字圖像上識別人臉,在做了一些研究后,我發現OpenCV的庫可以幫我檢測圖像中的人臉。不過,我沒能找到一個完整的通過Java使用OpenCV庫的初學者教程,所以這篇文章可能會是他人在這方面學習的資料。
什么是OpenCV?OpenCV(Open Source Computer Vision) 是一個開源的計算機視覺算法庫。是用C/C++寫的,旨在發揮多核心的優勢。它提供C++、C、Python和Java的接口,并支持所有主流操作系統平臺,包括Windows、Linux、Mac OS、iOS及Android。
今天的演示應用程序的代碼在GitHub上有:day12-face-detection 。
開始學習OpenCV,第一步就是去它官網下載支持你目前操作系統的最新版本OpenCV包,文中使用的是2.4.7版。
程序包下載完成后,使用tar命令解壓:
$ tar xvf opencv-2.4.7.tar.gz
切換目錄到opencv-2.4.7:
$ cd opencv-2.4.7
我花了很多時間來了解如何獲得OpenCV的jar文件。文檔中的Java教程假設OpenCV jar文件是在生成文件夾中,適用于Windows用戶的OpenCV包(包括jar文件),但并不適用于Linux和Mac OS用戶。為了構建OpenCV jar,請執行如下命令:
$ cd opencv-2.4.7 $ mkdir build $ cd build/ $ cmake -G "Unix Makefiles" -D CMAKE_CXX_COMPILER=/usr/bin/g++ -D CMAKE_C_COMPILER=/usr/bin/gcc -D WITH_CUDA=ON .. $ make -j4 $ make install
上面的命令會在 opencv-2.4.7/build/bin 的目錄下創建opencv-247.jar 文件,這是Java綁定到本地OpenCV的安裝方法。
如果你系統里沒有安裝eclipse,可以去Eclipse官網下載最新版,就目前而言eclipse最新版的代號是Kepler。
Eclipse的安裝很容易,只需要解壓下載下來的包即可。如果是在Linux或者Mac機器上,開個命令行窗口,輸入如下命令:
$ tar -xzvf eclipse-jee-kepler-R-*.tar.gz
Windows下,你解壓到哪里,那里就會有一個eclipse文件夾,這樣就可以直接操作了,當然你也可以創建執行文件的快捷方式到桌面。
打開Eclipse IDE,然后到項目工作區,轉到目錄 Windows > Preferences > Java > Build Path > User Libraries 下,選擇添加一個新的庫。
給這個庫命名為OpenCV-2.4.7之類的名字,然后點擊“確定”。
點擊Add External Jars,然后添加 OpenCV-2.4.7 文件。
選擇Native library location,然后點擊“編輯(Edit)”。
點擊 External Folder。
在opencv-2.4.7/build/lib 文件夾下給出庫目錄(lib)的路徑。
現在,點擊“確定”,我們已經把 OpenCV 作為用戶庫(user library)添加進去了。
一步一步在File > New > Other > Java Project下創建新的Java項目,完成后,右鍵單擊該項目配置構建路徑。
轉到Libraries選項卡,然后點擊“添加庫(Add Library)”。
選擇“用戶庫(User Library)”
選擇我們最后一步添加進去的OpenCV-2.4.7用戶庫,點擊“完成”。
最后,你會看見這個Java項目里已經包含了OpenCV-2.4.7用戶庫。
在上面創建的Java項目里創建一個類(class),并添加下面的代碼:
package com.shekhar.facedetection; import org.opencv.core.Core; import org.opencv.core.Mat; import org.opencv.core.MatOfRect; import org.opencv.core.Point; import org.opencv.core.Rect; import org.opencv.core.Scalar; import org.opencv.highgui.Highgui; import org.opencv.objdetect.CascadeClassifier; public class FaceDetector { public static void main(String[] args) { System.loadLibrary(Core.NATIVE_LIBRARY_NAME); System.out.println(" Running FaceDetector"); CascadeClassifier faceDetector = new CascadeClassifier(FaceDetector.class.getResource("haarcascade_frontalface_alt.xml").getPath()); Mat image = Highgui .imread(FaceDetector.class.getResource("shekhar.JPG").getPath()); MatOfRect faceDetections = new MatOfRect(); faceDetector.detectMultiScale(image, faceDetections); System.out.println(String.format("Detected %s faces", faceDetections.toArray().length)); for (Rect rect : faceDetections.toArray()) { Core.rectangle(image, new Point(rect.x, rect.y), new Point(rect.x + rect.width, rect.y + rect.height), new Scalar(0, 255, 0)); } String filename = "ouput.png"; System.out.println(String.format("Writing %s", filename)); Highgui.imwrite(filename, image); } }
上面的這些代碼可以:
加載本地的OpenCV庫,這樣就可以用它來調用Java API。
創建實例CascadeClassifier,將已加載的分類器的文件名傳遞給它。
接下來我們將圖片轉化成Java API能夠接受使用Highui類的格式,鋪墊在OpenCV C++的n維密集數組類上邊。
然后,調用分類器上的detectMultiScale方法傳遞給它圖象和MatOfRect對象。這個過程之后,MatOfRect將有面部檢測。
我們遍歷所有的臉部檢測并用矩形標記圖像。
最后,將圖像寫入輸出的 .png 文件里。
這個程序的輸出展示如下,這是在人臉檢測之前和之后的圖片:
今天就這些,歡迎反饋。
原文 Day 12: OpenCV--Face Detection for Java Developers
整理 SegmentFault
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/63991.html
摘要:時間永遠都過得那么快,一晃從年注冊,到現在已經過去了年那些被我藏在收藏夾吃灰的文章,已經太多了,是時候把他們整理一下了。那是因為收藏夾太亂,橡皮擦給設置私密了,不收拾不好看呀。 ...
摘要:十開放模式識別項目開放模式識別項目,致力于開發出一套包含圖像處理計算機視覺自然語言處理模式識別機器學習和相關領域算法的函數庫。 一、開源生物特征識別庫 OpenBROpenBR 是一個用來從照片中識別人臉的工具。還支持推算性別與年齡。使用方法:$ br -algorithm FaceRecognition -compare me.jpg you.jpg二、計算機視覺庫 OpenCVOpenC...
閱讀 629·2023-04-26 01:53
閱讀 2753·2021-11-17 17:00
閱讀 2888·2021-09-04 16:40
閱讀 1988·2021-09-02 15:41
閱讀 838·2019-08-26 11:34
閱讀 1227·2019-08-26 10:16
閱讀 1338·2019-08-23 17:51
閱讀 820·2019-08-23 16:50