热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

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

效果展示原照片识别后照片实现过程Demo开发编译环境IDE:EclipseJDK:1.8OpenCV:2.4.6Eclip



效果展示

原照片
在这里插入图片描述
识别后照片
在这里插入图片描述


实现过程


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 ...");
// 创建脸部识别器
// lbpcascade_frontalface.xml 文件在下载的opencv安装目录下可以找到(..\opencv\sources\data\lbpcascades)
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);
//faceDetections.toArray().length 识别到脸部的数量
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)

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



推荐阅读
  • 本文整理了一份基础的嵌入式Linux工程师笔试题,涵盖填空题、编程题和简答题,旨在帮助考生更好地准备考试。 ... [详细]
  • 本文介绍了Java编程语言的基础知识,包括其历史背景、主要特性以及如何安装和配置JDK。此外,还详细讲解了如何编写和运行第一个Java程序,并简要介绍了Eclipse集成开发环境的安装和使用。 ... [详细]
  • 2020年9月15日,Oracle正式发布了最新的JDK 15版本。本次更新带来了许多新特性,包括隐藏类、EdDSA签名算法、模式匹配、记录类、封闭类和文本块等。 ... [详细]
  • 动态壁纸 LiveWallPaper:让您的桌面栩栩如生(第二篇)
    在本文中,我们将继续探讨如何开发动态壁纸 LiveWallPaper,使您的桌面更加生动有趣。作为 2010 年 Google 暑期大学生博客分享大赛 Android 篇的一部分,我们将详细介绍 Ed Burnette 的《Hello, Android》第三版中的相关内容,并分享一些实用的开发技巧和经验。通过本篇文章,您将了解到如何利用 Android SDK 创建引人入胜的动态壁纸,提升用户体验。 ... [详细]
  • 本文详细介绍了如何在项目中引入和配置KindEditor网页编辑器,包括脚本引用、初始化编辑器以及文件上传功能的实现。 ... [详细]
  • 本文详细介绍了如何在 Linux 系统上安装 JDK 1.8、MySQL 和 Redis,并提供了相应的环境配置和验证步骤。 ... [详细]
  • 应用链时代,详解 Avalanche 与 Cosmos 的差异 ... [详细]
  • 本文回顾了作者初次接触Unicode编码时的经历,并详细探讨了ASCII、ANSI、GB2312、UNICODE以及UTF-8和UTF-16编码的区别和应用场景。通过实例分析,帮助读者更好地理解和使用这些编码。 ... [详细]
  • 本文探讨了如何在 Java 中将多参数方法通过 Lambda 表达式传递给一个接受 List 的 Function。具体分析了 `OrderUtil` 类中的 `runInBatches` 方法及其使用场景。 ... [详细]
  • [转]doc,ppt,xls文件格式转PDF格式http:blog.csdn.netlee353086articledetails7920355确实好用。需要注意的是#import ... [详细]
  • 本文对SQL Server系统进行了基本概述,并深入解析了其核心功能。SQL Server不仅提供了强大的数据存储和管理能力,还支持复杂的查询操作和事务处理。通过MyEclipse、SQL Server和Tomcat的集成开发环境,可以高效地构建银行转账系统。在实现过程中,需要确保表单参数与后台代码中的属性值一致,同时在Servlet中处理用户登录验证,以确保系统的安全性和可靠性。 ... [详细]
  • 如何使用 `org.eclipse.rdf4j.query.impl.MapBindingSet.getValue()` 方法及其代码示例详解 ... [详细]
  • 基于JSP和SSM框架的超市收银系统毕业设计论文及源代码分析
    本研究基于JSP和SSM框架开发了一套超市收银系统,旨在提升超市收银效率和管理便捷性。系统运行环境包括JDK 1.8、Tomcat 7.0、MySQL数据库以及HBuilderX(也可使用WebStorm)作为前端开发工具,后端开发则采用Eclipse(IntelliJ IDEA亦可)。该系统实现了商品管理、订单处理、库存管理和报表生成等核心功能,具有良好的稳定性和扩展性。通过详细的设计与实现过程,本文为相关领域的研究提供了有价值的参考。 ... [详细]
  • Eclipse中解决JDK源码断点调试失效的问题 ... [详细]
  • Java测试服务器调试指南详细介绍了如何进行远程调试,并深入解析了Java Xdebug参数的使用方法。本文首先概述了Java内置的调试功能,重点介绍了JDB这一类似于GDB的强大调试工具。通过实例演示,读者可以掌握在测试环境中高效调试Java应用程序的技巧,包括配置远程调试环境和优化调试参数,以提高开发效率和代码质量。 ... [详细]
author-avatar
waiwaiwai
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有