java采集自己的人脸底库,并用于FaceNet训练

上一篇文章讲解了如何使用 jdeep-learning 调用本地摄像头进行人脸识别,那么如果您想在人脸底库中添加自己的人脸数据,您需要自己采集并重新训练FaceNet网络。具体步骤如下:

1.打开cn.jiming.jdlearning.test.face.FaceDetectionByDevice.java

@Test
	public void test() throws Exception {
		OpenCVFrameGrabber grabber = new OpenCVFrameGrabber(0);
        grabber.start();   //开始获取摄像头数据
        CanvasFrame canvas = new CanvasFrame("摄像头");//新建一个窗口
        canvas.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        canvas.setAlwaysOnTop(true);
        
        int i = 200;
        while(true){
            if(!canvas.isDisplayable()){//窗口是否关闭
                grabber.stop();//停止抓取
                System.exit(2);//退出
                break;
            }    
            Frame frame = grabber.grabFrame();
            // 将Frame转为Mat
    		Mat mat = converter.convertToMat(frame);
    		
    		//人脸定位
			List<Mat> faces = RetinaFaceDetection.faceDetection(mat);
			
    		//保存人脸 (您自己修改路径)
            for(Mat face:faces) {
            	// 输出图片
        		imwrite("E:\\faces\\" + i + ".png", face);
        		i++;
            }
    		
			
    		//Image转Frame
			Frame convertFrame1 = Java2DFrameUtils.toFrame(mat);
    		
            canvas.showImage(convertFrame1);//获取摄像头图像并放到窗口上显示, 这里的Frame frame=grabber.grab(); frame是一帧视频图像
            mat.release();
            
            try {
				Thread.sleep(200);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
        }

		
		
	}

2.修改好保存人脸的路径地址后直接运行即可开始采集。

结果:

到此人脸采集完成!

训练自己的FaceNet网络

1.打开cn.jiming.jdlearning.test.face.TrainFaceNetTest.java

@Test
	public void train() {
		String trainPath = "img/face/train";
		String faceNetPath = "models/face_net.xm";
		
		//开始训练
		System.out.println("***** 开始训练 ***** ");
		FaceClassificationTrain.training(null , trainPath, faceNetPath);
		System.out.println("***** 训练完成 ***** ");
	}

2.把前面采集好的人脸照片都copy到“img/face/train”目录下,并给自己新建一个文件夹,名称最好使用数字字母,如:

3.以上步骤准备好后,就可以开始执行@Test单元了,训练好的模型文件保存在"models/face_net.xm",这样您的项目就可以使用自己新训练出来的FaceNet了,算法将会识别到您。

FaceNet是一种用于人脸识别的模型,它是基于深度学习的神经网络。要训练自己的人脸模型,首先需要准备一个大规模的人脸数据集。这个数据集包含了多个人的人脸图像,每个人至少有几十张不同角度和表情的图片。 接下来,将这个数据集输入到FaceNet模型进行训练FaceNet模型包含了多个卷积神经网络和全连接层,它能够将输入的人脸图像转换成一个固定长度的向量表示。这个向量表示可以保留人脸的特征,并且可以比较不同人脸之间的相似度。 在训练过程中,FaceNet使用了三个重要的技术。首先是人脸对齐,通过对齐人脸图像,可以将人脸的特征点对齐到固定的位置,减少姿态和角度变化对模型造成的干扰。其次是三元组损失函数,这个损失函数比较了同一个人脸图像和不同人脸图像的相似度,目标是使同一个人的人脸向量距离较近,不同人的人脸向量距离较远。最后是在线硬负样本挖掘,通过难例挖掘的方法,选择出最具挑战性的负样本进行训练,提高了模型的泛化能力。 完成训练后,我们可以使用FaceNet模型进行人脸识别。对于一个未知人脸,将其输入到模型中得到一个向量表示,然后与已知的人脸向量进行比较,找到最相似的人脸。这样,我们就可以实现自己的人脸模型,用于人脸识别人脸验证等应用领域。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值