美文网首页
[Java] 人脸识别 - 相似度

[Java] 人脸识别 - 相似度

作者: 卓灬不凡 | 来源:发表于2023-05-28 14:18 被阅读0次

OpenCV 版本:4.4.0

下载地址:
链接:https://pan.quark.cn/s/9e8a53344e57

准备文件:

# 1. 特征分类器:windows 和 linux 中的配置文件都一样,随便用哪个都行
haarcascade_frontalface_alt.xml
# windows 路径 : opencv\build\etc\haarcascades
# linux 路径 : /usr/local/share/opencv4/haarcascades

# 2. jar 包 - 也可以直接使用 javacv 中的 opencv 包
opencv-440.jar
# windows 路径 : {opencv安装目录}\opencv\build\java
# linux 路径 : /usr/local/share/java/opencv4

# 3. 动态库
opencv_java440.dll (windows系统使用此文件)
# windows 路径 : {opencv安装目录}\opencv\build\java\{x64}/{x86} 跟据系统选择
libopencv_java440.so (linux系统使用此文件)
# linux 路径 : /usr/local/share/java/opencv4

添加依赖

# 方式1:引入本地jar包 ${project.basedir} : pom文件所在的目录
<dependency>
  <groupId>org</groupId>
  <artifactId>opencv</artifactId>
  <scope>system</scope>
  <systemPath>${project.basedir}\src\lib\opencv-440.jar</systemPath>
</dependency>
# 方式2:除了上面引入本地的,还可以直接使用 javacv 中的 opencv 包
<dependency>
  <groupId>org.bytedeco</groupId>
  <artifactId>opencv</artifactId>
  <version>4.4.0-1.5.4</version>
</dependency>
FaceCompare.java
package com.face.demo.util;

import org.opencv.core.*;
import org.opencv.imgcodecs.Imgcodecs;
import org.opencv.imgproc.Imgproc;
import org.opencv.objdetect.CascadeClassifier;

import java.util.Arrays;

public class FaceCompare {

    // 初始化人脸探测器
    static CascadeClassifier faceDetector;

    static {

        // 判断系统
        String os = System.getProperty("os.name");

        // 加载动态库
        if (os != null && os.toLowerCase().startsWith("windows")) {
            // Windows操作系统
            // todo windows 系统部署加载 .dll 文件 - 路径跟据自己存放位置更改
            System.load("C:\\Users\\Desktop\\lib\\windows\\opencv_java440.dll");
        } else if (os != null && os.toLowerCase().startsWith("linux")) {
            // Linux操作系统
            // todo Linux 服务器部署加载 .so 文件 - 路径跟据自己存放位置更改
            System.load("/opt/face/libopencv_java440.so");
        }

        // 引入 特征分类器配置 文件:haarcascade_frontalface_alt.xml 文件路径
        String property = "/opt/face/haarcascade_frontalface_alt.xml";
        System.out.println(property);
        faceDetector = new CascadeClassifier(property);
    }

    // 灰度化人脸
    public static Mat conv_Mat(String img) {
        Mat image0 = Imgcodecs.imread(img);
        Mat image1 = new Mat();
        // 灰度化
        Imgproc.cvtColor(image0, image1, Imgproc.COLOR_BGR2GRAY);
        // 探测人脸
        MatOfRect faceDetections = new MatOfRect();
        faceDetector.detectMultiScale(image1, faceDetections);
        // rect中人脸图片的范围
        for (Rect rect : faceDetections.toArray()) {
            Mat face = new Mat(image1, rect);
            return face;
        }
        return null;
    }

    // 比较图片
    public static double compare_image(String img_1, String img_2) {
        Mat mat_1 = conv_Mat(img_1);
        Mat mat_2 = conv_Mat(img_2);
        Mat hist_1 = new Mat();
        Mat hist_2 = new Mat();
        //颜色范围
        MatOfFloat ranges = new MatOfFloat(0f, 256f);
        //直方图大小, 越大匹配越精确 (越慢)
        MatOfInt histSize = new MatOfInt(10000000);
        Imgproc.calcHist(Arrays.asList(mat_1), new MatOfInt(0), new Mat(), hist_1, histSize, ranges);
        Imgproc.calcHist(Arrays.asList(mat_2), new MatOfInt(0), new Mat(), hist_2, histSize, ranges);
        // CORREL 相关系数
        double res = Imgproc.compareHist(hist_1, hist_2, Imgproc.CV_COMP_CORREL);
        return res;
    }

    public static void main(String[] args) {
        //图片路径不能包含中文
        String str1 = "C:\\Users\\Desktop\\head\\1.jpg";
        String str2 = "C:\\Users\\Desktop\\head\\4.jpg";

        double compareHist = compare_image(str1, str2);
        System.out.println(compareHist);
        if (compareHist > 0.6) {
            System.out.println("人脸匹配");
        } else {
            System.out.println("人脸不匹配");
        }
    }

}

相关文章

  • 基于opencv3的人脸检测

    人脸识别简单的归结为: 人脸检测->人脸特征点定位->人脸特征抽取->人脸相似度对比->输出识别结果 本文将站在巨...

  • java ArcFace 2.0,java SDK使用、人脸识

    java人脸识别 虹软ArcFace 2.0,java SDK使用、人脸识别-抽取人脸特征并做比对 虹软产品地址:...

  • 人脸识别相关技术

    应用场景 1:1 人脸识别获取单个人脸,与库中明确的一个人脸对比,满足一定相似度即对比成功如手机人脸验证场景 1:...

  • 2020-09-07

    人脸识别消费机 人脸识别食堂消费管理系统 采用先进的人脸识别技术进行身份验证,具有识别速度快、识别准确度高、免接触...

  • 树莓派人脸识别实际应用:人脸识别门禁

    在上一篇文章树莓派调用百度人脸识别API实现人脸识别,我们完成了树莓派人脸识别的基础环境配置,人脸识别功能也测试成...

  • 人脸识别入门简介-基于百度AI

    百度人脸识别 人脸识别概念 人脸识别(Face Recognition)是一种依据人的面部特征(如统计或几何特征等...

  • java版天网人脸识别系统,获取视频流人脸识识别推送服务器展示

    java版天网人脸识别系统,获取视频流 进行人脸识别后推送到流媒体服务器实时展示 获取视频流 进行人脸识别后推送到...

  • 2020-07-01

    【产品介绍】 动态人脸识别消费管理系统:识别速度快、识别准确度高、免接触、防盗刷、无损耗。采用人脸识别取代...

  • 2020-07-07

    【产品介绍】 动态人脸识别消费管理系统:识别速度快、识别准确度高、免接触、防盗刷、无损耗。采用人脸识别取代...

  • 2020-07-04

    【产品介绍】 动态人脸识别消费管理系统:识别速度快、识别准确度高、免接触、防盗刷、无损耗。采用人脸识别取代...

网友评论

      本文标题:[Java] 人脸识别 - 相似度

      本文链接:https://www.haomeiwen.com/subject/yohdedtx.html