前言
在我自己的另一个java项目中想添加一个人脸识别模块,但是在网上搜寻了很多后资料后发现使用java实现人脸识别的例子几乎没有(用C++实现的特别多,用java的真的很少,虽然有很多类似标题的文章,但是经本人尝试很多都实现不了或者有很多小问题),经过自己的不断摸索,终于用JavaCV实现了人脸识别,这篇文章尽可能的详细说明实现过程。
一些说明
- 环境:系统Win10,编译环境eclipse,JavaCV1.4.4
- 说明:JavaCV内置了OpenCV,本次实现就是利用内置的OpenCV 的 facerecognizer分类器实现人脸训练的。需要特殊注意的一点是,虽然JavaCV内置了OpenCV,但是不代表JavaCV中的Opencv等于独立的OpenCV,再次强调,JavaCV中的OpenCV不等于单独的OpenCV!使用过程中一定不可以混用(也就是import的时候注意名称问题);
- 此外,如果想单独通过OpenCV来实现当时也是可行的,但是最新版本的OpenCV把face模块给独立出来扔到扩展包里面去了,所以正常安装OpenCV然后配置环境是没法调用的,还需要重新编译扩展包,总之很麻烦,不建议。。。
样本训练+测试
1.使用facerecognizer分类器进行训练,对分类器不熟悉的可以自行百度,这里不过多介绍分类器,而是着重介绍java代码
package FacePack1;
import static org.bytedeco.javacpp.opencv_core.*;
import static org.bytedeco.javacpp.opencv_face.*;
import static org.bytedeco.javacpp.opencv_imgproc.*;
import static org.bytedeco.javacpp.opencv_objdetect.*;
import java.nio.IntBuffer;
import java.util.List;
import java.util.Vector;
import javax.swing.JFrame;
import org.bytedeco.javacpp.opencv_imgcodecs;
import org.bytedeco.javacpp.BytePointer;
import org.bytedeco.javacpp.DoublePointer;
import org.bytedeco.javacpp.IntPointer;
import org.bytedeco.javacpp.opencv_core;
import org.bytedeco.javacv.CanvasFrame;
import org.bytedeco.javacv.Frame;
import org.bytedeco.javacv.Fram