考拉一次性能压测需求,需要准备大量的带有人脸的图片,找了nos的人提供了一批图片的URL链接,但是里面不一定包含人脸,而且没有规律可循,那么怎么办,总不能人工一张张筛选吧,累死不说,效率太低,根本无法满足项目需求。 以上为背景
这个时候从网上查找人脸识别的相关知识,基本上都是基于OpenCV来实现的,但是实现的语言就比较多了,像Python、Java等,本人对Java相对更熟悉一点,选择了Java。
环境搭建
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安装、建工程就不讲了,自行百度
4.引入jar包和本地库
环境搭建结束
识别一张图片
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