考拉一次性能压测需求,需要准备大量的带有人脸的图片,找了nos的人提供了一批图片的URL链接,但是里面不一定包含人脸,而且没有规律可循,那么怎么办,总不能人工一张张筛选吧,累死不说,效率太低,根本无法满足项目需求。 以上为背景

这个时候从网上查找人脸识别的相关知识,基本上都是基于OpenCV来实现的,但是实现的语言就比较多了,像Python、Java等,本人对Java相对更熟悉一点,选择了Java。




java opencv 人脸识别算法 基于java的人脸识别_java 人脸识别jar包


环境搭建

1.首先下载核心库 OpenCV2.4.6,下载的时候,选择windows版的。然后安装

附 下载地址:https://opencv.org/releases.html ,自行下载需要的版本,不过246版本比较老,现在官网上面不提供此版本下载,

给大家一个 网盘地址 https://pan.baidu.com/s/1dFnlxjN 密码: 1wcs

2.其实安装的过程就是解压的过程,并没有什么安装向导之类的,安装完成后,我们最关心的是这个目录:opencvbuildjava

注意:opencv-246.jar是需要在opencv的java类库,但是,真正的实现是opencv_java246.dll(X86和X64之分,关键看你的计算机是多少位的)

3.eclipse安装、Java安装、建工程就不讲了,自行百度


java opencv 人脸识别算法 基于java的人脸识别_xml_02


4.引入jar包和本地库


java opencv 人脸识别算法 基于java的人脸识别_xml_03


环境搭建结束

识别一张图片

1.编写DetectFaceDemo.java,代码如下:


1. package com.netease.openCV246; 
2. import org.opencv.core.Core; 
3. import org.opencv.core.Mat; 
4. import org.opencv.core.MatOfRect; 
5. import org.opencv.core.Point; 
6. import org.opencv.core.Rect; 
7. import org.opencv.core.Scalar; 
8. import org.opencv.highgui.Highgui; 
9. import org.opencv.objdetect.CascadeClassifier; 
10. 
11. // 
12. // Detects faces in an image, draws boxes around them, and writes the results 
13. // to "faceDetection.png". 
14. // 
15. public class DetectFaceDemo { 
16.  public void run() { 
17.  System.out.println("Running DetectFaceDemo"); 
18.  System.out.println(getClass().getResource("lbpcascade_frontalface.rar.xml").getPath()); 
19.  // Create a face detector from the cascade file in the resources 
20.  // directory. 
21.  //CascadeClassifier faceDetector = new CascadeClassifier(getClass().getResource("lbpcascade_frontalface.xml").getPath()); 
22.  //Mat image = Highgui.imread(getClass().getResource("lena.png").getPath()); 
23.  //注意:源程序的路径会多打印一个‘/’,因此总是出现如下错误 
24.  /* 
25.  * Detected 0 faces Writing faceDetection.png libpng warning: Image 
26.  * width is zero in IHDR libpng warning: Image height is zero in IHDR 
27.  * libpng error: Invalid IHDR data 
28.  */ 
29.  //因此,我们将第一个字符去掉 
30.  String xmlfilePath=getClass().getResource("lbpcascade_frontalface.xml").getPath().substring(1); 
31.  CascadeClassifier faceDetector = new CascadeClassifier(xmlfilePath); 
32.  Mat image = Highgui.imread(getClass().getResource("we.jpg").getPath().substring(1)); 
33.  // Detect faces in the image. 
34.  // MatOfRect is a special container class for Rect. 
35.  MatOfRect faceDetections = new MatOfRect(); 
36.  faceDetector.detectMultiScale(image, faceDetections); 
37. 
38.  System.out.println(String.format("Detected %s faces