利用OpenCV进行人脸识别
OpenCV的全稱是Open Source Computer Vision Library,是一個(gè)跨平臺的計(jì)算機(jī)視覺庫。OpenCV是由英特爾公司發(fā)起并參與開發(fā),以BSD許可證授權(quán)發(fā)行,可以在商業(yè)和研究領(lǐng)域中免費(fèi)使用。OpenCV可用于開發(fā)實(shí)時(shí)的圖像處理、計(jì)算機(jī)視覺以及模式識別程序。該程序庫也可以使用英特爾公司的IPP進(jìn)行加速處理。 ----摘自維基百科http://zh.wikipedia.org/wiki/OpenCV。
在本例中在Windows系統(tǒng)中采用Java+Eclipse,采用OpenCV-2.4.5庫,編寫一段簡單的人臉識別代碼。
首先,下載OpenCV-2.4.5.exe,進(jìn)行安裝,實(shí)際上只是解壓而已。
然后將jar包導(dǎo)入Eclipse,jar包路徑為opencv解壓目錄中的opencv\build\java\opencv-245.jar。
接下來導(dǎo)入opencv庫,參考下面的步驟:
接下來,修改ClassPath中的opencv-2.4.5中的Native library location為opencv解壓目錄中的opencv\build\java\x64(64位操作系統(tǒng)的路徑,如果是32位操作系統(tǒng)請選擇opencv\build\java\x86路徑)。
eclipse開發(fā)環(huán)境搭建成功之后就可以編寫代碼進(jìn)行人臉識別了,代碼樣例Test.java如下:
package com.tcl.uviewer.features.featuresImpl; import org.opencv.core.Core; import org.opencv.core.Mat; import org.opencv.core.MatOfRect; import org.opencv.core.Point; import org.opencv.core.Scalar; import org.opencv.highgui.Highgui; import org.opencv.objdetect.CascadeClassifier; public class Test { public static void detectFace(String p_w_picpathPath) { System.out.println("\nRunning DetectFaceDemo"); // 導(dǎo)入opencv的庫 System.loadLibrary(Core.NATIVE_LIBRARY_NAME); // 從配置文件lbpcascade_frontalface.xml中創(chuàng)建一個(gè)人臉識別器,該文件位于opencv安裝目錄中 CascadeClassifier faceDetector = new CascadeClassifier( "C:/lbpcascade_frontalface.xml"); Mat p_w_picpath = Highgui.imread(p_w_picpathPath); // 在圖片中檢測人臉 MatOfRect faceDetections = new MatOfRect(); faceDetector.detectMultiScale(p_w_picpath, faceDetections); System.out.println(String.format("Detected %s faces", faceDetections.toArray().length)); // 在每一個(gè)識別出來的人臉周圍畫出一個(gè)方框 for (org.opencv.core.Rect rect : faceDetections.toArray()) { Core.rectangle(p_w_picpath, new Point(rect.x, rect.y), new Point(rect.x + rect.width, rect.y + rect.height), new Scalar(0, 255, 0)); } // 將結(jié)果保存到文件 String filename = "faceDetection.png"; System.out.println(String.format("Writing %s", filename)); Highgui.imwrite(filename, p_w_picpath); } public static void main(String[] args) { String p_w_picpathPath = "C:/005.jpg"; Test.detectFace(p_w_picpathPath); } } |
其中原始圖片路徑是C:/005.jpg,如下圖所示:
運(yùn)行上面的代碼,輸出如下:
Running DetectFaceDemo Detected 33 faces Writing faceDetection.png |
表示檢測到了33個(gè)人臉,輸出文件是faceDetection.png,圖片如下所示:
至此,一個(gè)很簡單的人臉識別程序就實(shí)現(xiàn)完了,當(dāng)然opencv的功能遠(yuǎn)不止如此,有興趣的話可以繼續(xù)研究。
轉(zhuǎn)載于:https://blog.51cto.com/yuanhuan/1301368
總結(jié)
以上是生活随笔為你收集整理的利用OpenCV进行人脸识别的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: GNU PID
- 下一篇: 使用DPM 2010备份还原Exchan