前言:

公司前期有图片上传需求,已经满足,然后在此基础上又要求实现人脸检测,这时我懵逼了呀,没做过这呀,这不是难为我吗?我们用的还是H5页面,于是一顿网上查找资料,最终决定使用opencv.

正文:

1 首先导入maven jar包

<dependency><groupId>org.bytedeco.javacpp-presets</groupId><artifactId>opencv-platform</artifactId><version>3.4.1-1.4.1</version></dependency>

2 opencv下载,并将一些文件放置项目

首先需要安装opcv opcv官网下载链接,在这里下载版本要和maven里的版本区别不能太大,我曾经因为版本相差太大,调试了好久才发现这个问题。
下载完之后,进行安装。安装比较简单,直接装就行。

1 获取opencv dll文件,放到到项目里。

根据下方图片找到java需要用到的dll文件,
然后我这里放的位置是web-inf下面,当然也可以放到其他位置,只要能读取到就行。

2 项目里读取dll文件,并且放到环境变量中。

这里我是放到了filter里,在项目启动的时候就加载。

public class InitOpencv  implements ServletContextListener {@Overridepublic void contextDestroyed(ServletContextEvent servletContextEvent) {}public void contextInitialized(ServletContextEvent arg0) {// 1 如果服务器装了opencv,则直接用这个就行//System.load("D:/opencv/opencv/build/java/x64/opencv_java341.dll");//2 如果没装 则用此方法//获取存放dll文件的绝对路径(假设将dll文件放在系统根目录下的WEB-INF文件夹中)String path=arg0.getServletContext().getRealPath("WEB-INF");//将此目录添加到系统环境变量中addDirToPath(path);//加载相应的dll文件,注意要将'\'替换为'/'System.load(path.replaceAll("\\\\","/")+"/opencv_java341.dll");}private void addDirToPath(String s){try {//获取系统path变量对象Field field=ClassLoader.class.getDeclaredField("sys_paths");//设置此变量对象可访问field.setAccessible(true);//获取此变量对象的值String[] path=(String[])field.get(null);//创建字符串数组,在原来的数组长度上增加一个,用于存放增加的目录String[] tem=new String[path.length+1];//将原来的path变量复制到tem中System.arraycopy(path,0,tem,0,path.length);//将增加的目录存入新的变量数组中tem[path.length]=s;//将增加目录后的数组赋给path变量对象field.set(null,tem);} catch (Exception e) {e.printStackTrace();}}
}

3在web.xml里加入listener

 <listener><listener-class>com.ejoysoft.ecton.web.filter.InitOpencv</listener-class></listener>

2 人脸检测器放置项目里

根据此目录将人脸检测器xml放到项目里,这里我放的位置是资源文件里resources/propertites

到此,要做的环境准备工作以ok,下面是调用代码:

 @Value("classpath:properties/haarcascade_frontalface_alt.xml")private Resource xml;public int check(MultipartFile file, HttpServletRequest request,String userNo) {try {log.info("人脸检测开始……");String path = request.getSession().getServletContext().getRealPath("/") + "/static/images/upload/opencv/";File targetXmlFile = new File(path + xml.getFilename() + "");FileUtils.copyInputStreamToFile(xml.getInputStream(), targetXmlFile);CascadeClassifier faceDetector = new CascadeClassifier(targetXmlFile.toString());if (faceDetector.empty()) {log.info("请引入文件……");return 0;}// 创建图片tempFile// File tempFile = new File(path + file.getOriginalFilename() + "");File tempFile = new File(path + userNo + ".jpg");FileUtils.copyInputStreamToFile(file.getInputStream(), tempFile);// 读取创建的图片tempFileMat image = Imgcodecs.imread(tempFile.toString());MatOfRect faceDetections = new MatOfRect();// 进行人脸检测faceDetector.detectMultiScale(image, faceDetections);int checkNum = faceDetections.toArray().length;log.info("检测到人脸{}",checkNum);if (checkNum>0&& tempFile.exists() && tempFile.isFile()) {if (tempFile.delete()) {log.info("删除临时文件{}成功!",tempFile);}}// System.out.println(String.format("检测到人脸: %s", faceDetections.toArray().length));return checkNum;} catch (IOException e) {log.info("人脸检测失败{}",e);return 0;}}

在后台图片上传地方,先调用此方法检测照片是否有人脸,如果有进行原先逻辑保存图片,没有检测到返给前端。

在我使用的过程中,有时候检测不是很精确,但是大部分情况下是ok的。

懒人模式:直接去我的主页下载写好的文件也行。直通门

java结合opencv进行照片人脸检测相关推荐

  1. 【使用OpenCV进行视频人脸检测】------机器学习(附完整代码和数据集)

    上篇文章介绍了OpenCV进行照片人脸检测,今天学习的是OpenCV进行视频人脸检测,所有的参考博文.文献.视频.代码都会在文末附上链接或文件压缩包. 本文的目录如下: 内容目录 一.Opencv 进 ...

  2. OpenCV + python 实现人脸检测(基于照片和视频进行检测)

    OpenCV + python 实现人脸检测(基于照片和视频进行检测) Haar-like 通俗的来讲,就是作为人脸特征即可. Haar特征值反映了图像的灰度变化情况.例如:脸部的一些特征能由矩形特征 ...

  3. opencv快速入门人脸检测与人脸识别

    让"它"认得你 --利用opencv快速入门人脸检测与人脸识别 opencv,顾名思义"开源,计算机视觉".OpenCV就是这样的一个特殊的框架,一群大牛然绕自 ...

  4. opencv 美白磨皮人脸检测转

    1. 简介 这学期的计算机视觉课,我们组的课程项目为"照片自动美化",其中我负责的模块为人脸检测与自动磨皮. 功能为:用户上传一张照片,自动检测并定位出照片中的人脸,将照片中所有的 ...

  5. OpenCV OMZ MTCNN人脸检测的实例(附完整代码)

    OpenCV OMZ MTCNN人脸检测的实例 OpenCV OMZ MTCNN人脸检测的实例 OpenCV OMZ MTCNN人脸检测的实例 #include <algorithm> # ...

  6. OpenCV cv::CascadeClassifier人脸检测的实例(附完整代码)

    OpenCV cv::CascadeClassifier人脸检测的实例 OpenCV cv::CascadeClassifier人脸检测的实例 OpenCV cv::CascadeClassifier ...

  7. [Python图像处理] 二十八.OpenCV快速实现人脸检测及视频中的人脸

    该系列文章是讲解Python OpenCV图像处理知识,前期主要讲解图像入门.OpenCV基础用法,中期讲解图像处理的各种算法,包括图像锐化算子.图像增强技术.图像分割等,后期结合深度学习研究图像识别 ...

  8. OpenCV实现视频人脸检测

    利用OpenCV实现视频人脸检测,包含眼部检测.首先,将人脸检测和眼部检测需要的模型文件haarcascade_eye.xml和haarcascade_frontalface_default.xml放 ...

  9. OpenCV vs Dlib 人脸检测比较分析

    点击我爱计算机视觉标星,更快获取CVML新技术 人脸检测是计算机视觉最典型的应用之一,早期OpenCV的logo就是Haar人脸检测的示意图. 很多人的第一个OpenCV学习目标就是跑通Haar级联人 ...

  10. python+opencv+dlib实现人脸检测与表情识别

    python+opencv+dlib实现人脸检测与表情识别 一,dlib简单介绍:Dlib包含广泛的机器学习算法.所有的设计都是高度模块化的,快速执行,并且通过一个干净而现代的C ++ API,使用起 ...

最新文章

  1. 快速开发一个PHP扩展
  2. 【译】①JWS之Java[tm] Web Start开发者指南目录
  3. Linq to sql与EF零碎知识点总结
  4. mstar v56几路hdmi_Android TV : Mstar平台 GPIO 调试
  5. 使用windows的小技巧
  6. ip integrator_使用Oracle Data Integrator(和Kafka / MapR流)完善Lambda体系结构
  7. 2016年湖南省第十二届大学生计算机程序设计竞赛
  8. 互联网晚报 | 3月22日 星期二 |​ ​工作人员标注mu5735残骸并展开调查;万门大学疑似解散VIP群跑路...
  9. 有关迷宫的c语言程序的编写,3种C语言编写走迷宫的方法
  10. hexo需要先编辑好html文件吗,教你定制Hexo的landscape打造自己的主题_html/css_WEB-ITnose...
  11. 计算机电路电子技术试题答案,数字电子技术基础测试题及其答案.doc
  12. win7 配置JDK环境变量
  13. 分组卷积和深度可分离卷积
  14. 2020平面设计新手入门技巧
  15. 物联网开发笔记(58)- 使用Micropython开发ESP32开发板之控制2.90寸电子墨水屏模块黑白套件
  16. 常规诊疗条件下比较依那西普生物类似药(益赛普)与阿达木、英夫利西对RA的疗效[EULAR2015_SAT0360]...
  17. kernel_neon_begin
  18. 迈拓恢复出厂设置图解_迈拓维矩电脑切换器使用方法?
  19. RabbitMQ实战 - Confirm机制
  20. csgo账号连接服务器错误,steam csgo连接服务器发生错误 | 手游网游页游攻略大全...

热门文章

  1. 网站性能优化的34条黄金守则(三)—JavaScript和CSS
  2. python 秘钥_python – 使用ssh密钥加密和解密密码
  3. vscode调试时几个常用参数的含义和设置总结
  4. DPDK - Symmetric Receive-side Scaling
  5. VS+Qt报错无法解析的外部符号
  6. 微型计算机在硬件上是由,208可打印本资料微机原理与汇编期末考试试卷A卷答案...
  7. C++ string构造函数和析构函数
  8. docker常用操作(八) docker安装Zookeeper
  9. 21考研数学二和英语二复习规划
  10. c语言经典100例对考研有用吗,考研数学经验,没用算这学长输