使用Java+OpenCV实现照片人脸识别Demo

效果展示

原照片

使用Java+OpenCV实现照片人脸识别Demo
识别后照片
使用Java+OpenCV实现照片人脸识别Demo

; 实现过程

Demo开发编译环境

  • IDE:Eclipse
  • JDK:1.8
  • OpenCV:2.4.6

Eclipse配置OpenCV环境

查看我的另外一篇博文:《Java如何引入OpenCV包》

人脸识别Demo代码

package main;

import org.opencv.core.Core;
import org.opencv.core.Mat;
import org.opencv.core.MatOfRect;
import org.opencv.core.Point;
import org.opencv.core.Rect;
import org.opencv.core.Scalar;
import org.opencv.imgcodecs.Imgcodecs;
import org.opencv.imgproc.Imgproc;
import org.opencv.objdetect.CascadeClassifier;

public class OpenCVTest {

    public static void main(String[] args) {
        System.out.println("face detector application.");
        System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
        new DetectFaceDemo().run();
    }

}

class DetectFaceDemo {
    public void run() {
        System.out.println("detectFace application is running ...");

        CascadeClassifier faceDetector = new CascadeClassifier(
                System.getProperty("user.dir") + "/resources/lbpcascade_frontalface.xml");
        Mat imread = Imgcodecs.imread(System.getProperty("user.dir") + "/resources/3.jpg");

        MatOfRect faceDetections = new MatOfRect();
        faceDetector.detectMultiScale(imread, faceDetections);

        System.out.println(String.format("Detected %s face", faceDetections.toArray().length));

        for (Rect rect : faceDetections.toArray()) {
            Imgproc.rectangle(imread, new Point(rect.x, rect.y), new Point(rect.x + rect.width, rect.y + rect.height),
                    new Scalar(0, 255, 0));
        }

        String fileName = "faceDetection.png";
        System.out.println(String.format("Writing %s", fileName));
        Imgcodecs.imwrite(fileName, imread);

    }
}

注意事项

上面代码中需要注意的是 lbpcascade_frontalface.xml文件,它的位置在opencv安装目录里,例如我将opencv解压到C盘下的env目录,那么该文件可在下面的路径中找到

C:\env\opencv\opencv\sources\data\lbpcascades

上面的文件路径问题也需要注意,如果路径没有指定到对应文件可能会报如下的错误:

Exception in thread "main" CvException [org.opencv.core.CvException: cv::Exception: OpenCV(4.5.4) C:\build\master_winpack-bindings-win64-vc14-static\opencv\modules\objdetect\src\cascadedetect.cpp:1689: error: (-215:Assertion failed) !empty() in function 'cv::CascadeClassifier::detectMultiScale'
]
    at org.opencv.objdetect.CascadeClassifier.detectMultiScale_5(Native Method)
    at org.opencv.objdetect.CascadeClassifier.detectMultiScale(CascadeClassifier.java:255)
    at main.DetectFaceDemo.run(OpenCVTest.java:33)
    at main.OpenCVTest.main(OpenCVTest.java:18)

出现上述错误大概率是文件路径没有指定对,我这里的文件目录结构如下:

使用Java+OpenCV实现照片人脸识别Demo

Original: https://www.cnblogs.com/hhl1011/p/16478910.html
Author: 胡海龙
Title: 使用Java+OpenCV实现照片人脸识别Demo

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/588007/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 初识设计模式-原型模式

    简介 对于大部分系统来说,创建对象包括申请内存、给成员变量赋值等过程,这些操作耗费的时间基本可以忽略不计。 如果对象中的数据需要经过复杂的计算才能得到(比如排序、计算哈希值),或者…

    数据结构和算法 2023年6月8日
    093
  • 力扣224. 基本计算器

    224. 基本计算器 224. 基本计算器难度:困难描述:给你一个字符串表达式 s ,请你实现一个基本计算器来计算并返回它的值。注意:不允许使用任何将字符串作为数学表达式计算的内置…

    数据结构和算法 2023年6月16日
    0125
  • NavMeshAgent.SetDestination后不会自动寻路问题

    下面的代码是想实现点击鼠标左键,寻路到指定的位置;但是运行后,并不会寻路,而是立即打印了end void Update() { if (Input.GetMouseButtonUp…

    数据结构和算法 2023年6月7日
    073
  • 一文带你搞懂 SSR

    欲语还休,欲语还休,却道天凉好个秋 —- 《丑奴儿·书博山道中壁》辛弃疾 什么是 SSR ShadowsocksR?阴阳师?FGO? Server-side rende…

    数据结构和算法 2023年6月12日
    072
  • 寒假集训四补题与题解

    从初始状态开始,每次判断”走到当前最大值的位置,采摘花生,再回到马路上”整个流程的时间是否够用:如果够用,则采摘下一最大值;如果不够用,则停止; 采摘花生也…

    数据结构和算法 2023年6月7日
    081
  • 深度学习——正则化

    深度学习——正则化 作者:Oto_G 全是自我理解,表达不严谨,仅供参考 本文默认正则化范数为L1范数 这是今天讨论的问题: 为什么融入正则的损失函数能够防止过拟合 为什么正则融入…

    数据结构和算法 2023年6月12日
    0111
  • AtCoder Beginner Contest 235

    AtCoder Beginner Contest 235 A – Rotate 思路分析: 因为他给的数是三位数,我们直接取出每一位,然后拼凑就可以了 代码如下: #i…

    数据结构和算法 2023年6月7日
    087
  • 带你学习BFS最小步数模型

    最小步数模型 一、简介 最小步数模型和最短路模型的区别? 最短路模型:某一个点到另一个点的最短距离(坐标与坐标之间)最小步数模型:不再是点(坐标),而是状态到另一个状态的转变 BF…

    数据结构和算法 2023年6月7日
    084
  • 算法竞赛——二分图及应用

    二分图 二分图简介 定义: 简而言之,就是顶点集V可分割为两个互不相交的子集,并且图中每条边依附的两个顶点都分属于这两个互不相交的子集,两个子集内的顶点不相邻。——百度百科 辨析示…

    数据结构和算法 2023年6月7日
    090
  • 离散化

    3 -1 2 -2 这个数列有 5个逆序对 4 2 3 1 也是五个 我们把最小的-2视作1 第二的-1看做2 … 法一(推荐): 结构体保存数组num 和它在原数组里…

    数据结构和算法 2023年6月7日
    081
  • SPOJ GSS3-Can you answer these queries III

    (n) 个数,(q) 次操作 操作 0 x y把(A_x) 修改为(y) 操作 1 l r询问区间([l, r]) 的最大子段和 (1 \leq n\leq 50000) 线段树。…

    数据结构和算法 2023年6月12日
    080
  • 大前端JS篇之搞懂【WeakSet】

    和Set一样,WeakSet也是es6新增的一种数据结构,那么它和Set有什么区别呢? WeakSet对比Set主要是两个区别: 这里我们理解下什么叫对对象的弱引用,也就是说js的…

    数据结构和算法 2023年6月7日
    083
  • 二分图最大匹配

    大佬的详细解释:https://www.cnblogs.com/zzh666/p/9038299.html 这里我们来介绍一种求二分图最大匹配的算法—— 匈牙利算法: 我们可以这样…

    数据结构和算法 2023年6月7日
    095
  • P8135 [ICPC2020 WF] QC QC

    404. 抱歉,您访问的资源不存在。 可能是网址有误,或者对应的内容被删除,或者处于私有状态。 代码改变世界,联系邮箱 contact@cnblogs.com 园子的商业化努力-困…

    数据结构和算法 2023年6月12日
    081
  • 两种树的直径求法

    两遍DFS 优点:方便记录直径的两端点。 缺点:无法除理带负权的树。 树形DP 优点:短,可以处理有负权的树。 缺点:不好记录端点,容易打错。 最初每条路要走两遍,修一条路就可使与…

    数据结构和算法 2023年6月7日
    083
  • 大逃离

    基本就是模板题 加了1个限制,能到达点的个数不小于k 注意:出度+入度≠能到达点的个数,此时n的范围又很小,可以开个二维数组标记能到达的点,且同时统计数量 #include<…

    数据结构和算法 2023年6月7日
    077
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球