java深度学习人脸检测、特征提取、人脸对比

java深度学习人脸检测、特征提取、人脸对比

网上几乎没有关于java使用深度学习的人脸识别完整的源码,这个是我进半年来自己摸索出来的,现在开源出来,希望对喜欢人脸识别的java社区有帮助。

人脸识别分为以下3步骤完成:

1.人脸定位,也叫人脸检测,就是在一张图片中去定位人脸区域,并截图人脸照片。

2.根据步骤1得到的人脸截图输入模型,提取特征,得出一个512维度的特征向量数组。

3.根据2得出的向量数组输入分类网络,输出分类最相似的结果:lab和相似度。

本人已经完全封装好了,可直接运行测试代码调用海康等摄像头或者本地usb摄像头进行人脸识别,笨例子运行的是调用本地的usb摄像头进行试验。

项目源码:jdeep-learning: java深度学习:人脸识别、安全帽、防护服、车牌检测、抽烟、火苗等

项目是标准的maven工程,直接导入到您的开发工具,如eclipse。

打开cn.jiming.jdlearning.test.face.FaceMain.java,如图:

FaceMain.Java 核心源码:

@Test

public void test() throws Exception {

FaceNet faceNet = FaceNet.load("models/face_net.xm");

OpenCVFrameGrabber grabber = new OpenCVFrameGrabber(0);

grabber.start(); //开始获取摄像头数据

CanvasFrame canvas = new CanvasFrame("摄像头");//新建一个窗口

canvas.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

canvas.setAlwaysOnTop(true);

while(true){

if(!canvas.isDisplayable()){//窗口是否关闭

grabber.stop();//停止抓取

System.exit(2);//退出

break;

}

Frame frame = grabber.grabFrame();

// 将Frame转为Mat

Mat mat = converter.convertToMat(frame);

//mat转换imag

BufferedImage bimg = Java2DFrameUtils.toBufferedImage(mat);

//转DJL img

Image img = ImageFactory.getInstance().fromImage(bimg);

//人脸定位

List faces = RetinaFaceDetection.faceDetection(img, true, mat);//RetinaFace

// List faces = FaceDetection.detection(mat);//moble net

//特征提取

if(faces != null && faces.size() > 0) {

for(Image face:faces) {

float[] f = FeatureExtraction.faceFeatureExtraction(face);

if(f != null) {

//lab推理

MaxLab maxLab = faceNet.predict(f);

System.out.println("lab=" + maxLab.maxLab + " 相似度=" + maxLab.maxSimilar);

}

}

}

//Image转Frame

BufferedImage bi = (BufferedImage)img.getWrappedImage();

Frame convertFrame1 = Java2DFrameUtils.toFrame(bi);

// Frame convertFrame1 = Java2DFrameUtils.toFrame(mat);

canvas.showImage(convertFrame1);//获取摄像头图像并放到窗口上显示, 这里的Frame frame=grabber.grab(); frame是一帧视频图像

mat.release();

}

运行该@Test单元测试即可,注意前提是您电脑必须有usb或者内嵌有摄像头。

运行结果:

说明:从结果上来看已经分类出来是“xiaoming” 相似度最好的是0.973,精度还是非常好的,我应用在实际项目中效果都不错,即使摄像头挂在墙上也能准确识别出来是我。

好了这一篇先介绍到这里把,下一篇再讲解怎么自己采集自己的人脸用于训练FaceNet网络。。。

相关推荐

赛前捂嘴抗议FIFA彩虹袖标禁令,德国队输球后被群嘲……
可食用鲨鱼的种类外观(哪种鲨鱼可以吃)
365bet娱乐场平台

可食用鲨鱼的种类外观(哪种鲨鱼可以吃)

📅 07-19 👁️ 3092
苹果软件怎么更新qq(如何在苹果设备上更新qq软件)
365bet娱乐场平台

苹果软件怎么更新qq(如何在苹果设备上更新qq软件)

📅 07-31 👁️ 5742
Carat London
365bet娱乐场平台

Carat London

📅 07-11 👁️ 4715
虎扑APP怎么保存视频 虎扑APP保存视频方法【详解】
中国巨蚓科蚯蚓的起源与演化
365bet娱乐场平台

中国巨蚓科蚯蚓的起源与演化

📅 07-13 👁️ 1685