java结合opencv进行照片人脸检测
前言:
公司前期有图片上传需求,已经满足,然后在此基础上又要求实现人脸检测,这时我懵逼了呀,没做过这呀,这不是难为我吗?我们用的还是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进行照片人脸检测相关推荐
- 【使用OpenCV进行视频人脸检测】------机器学习(附完整代码和数据集)
上篇文章介绍了OpenCV进行照片人脸检测,今天学习的是OpenCV进行视频人脸检测,所有的参考博文.文献.视频.代码都会在文末附上链接或文件压缩包. 本文的目录如下: 内容目录 一.Opencv 进 ...
- OpenCV + python 实现人脸检测(基于照片和视频进行检测)
OpenCV + python 实现人脸检测(基于照片和视频进行检测) Haar-like 通俗的来讲,就是作为人脸特征即可. Haar特征值反映了图像的灰度变化情况.例如:脸部的一些特征能由矩形特征 ...
- opencv快速入门人脸检测与人脸识别
让"它"认得你 --利用opencv快速入门人脸检测与人脸识别 opencv,顾名思义"开源,计算机视觉".OpenCV就是这样的一个特殊的框架,一群大牛然绕自 ...
- opencv 美白磨皮人脸检测转
1. 简介 这学期的计算机视觉课,我们组的课程项目为"照片自动美化",其中我负责的模块为人脸检测与自动磨皮. 功能为:用户上传一张照片,自动检测并定位出照片中的人脸,将照片中所有的 ...
- OpenCV OMZ MTCNN人脸检测的实例(附完整代码)
OpenCV OMZ MTCNN人脸检测的实例 OpenCV OMZ MTCNN人脸检测的实例 OpenCV OMZ MTCNN人脸检测的实例 #include <algorithm> # ...
- OpenCV cv::CascadeClassifier人脸检测的实例(附完整代码)
OpenCV cv::CascadeClassifier人脸检测的实例 OpenCV cv::CascadeClassifier人脸检测的实例 OpenCV cv::CascadeClassifier ...
- [Python图像处理] 二十八.OpenCV快速实现人脸检测及视频中的人脸
该系列文章是讲解Python OpenCV图像处理知识,前期主要讲解图像入门.OpenCV基础用法,中期讲解图像处理的各种算法,包括图像锐化算子.图像增强技术.图像分割等,后期结合深度学习研究图像识别 ...
- OpenCV实现视频人脸检测
利用OpenCV实现视频人脸检测,包含眼部检测.首先,将人脸检测和眼部检测需要的模型文件haarcascade_eye.xml和haarcascade_frontalface_default.xml放 ...
- OpenCV vs Dlib 人脸检测比较分析
点击我爱计算机视觉标星,更快获取CVML新技术 人脸检测是计算机视觉最典型的应用之一,早期OpenCV的logo就是Haar人脸检测的示意图. 很多人的第一个OpenCV学习目标就是跑通Haar级联人 ...
- python+opencv+dlib实现人脸检测与表情识别
python+opencv+dlib实现人脸检测与表情识别 一,dlib简单介绍:Dlib包含广泛的机器学习算法.所有的设计都是高度模块化的,快速执行,并且通过一个干净而现代的C ++ API,使用起 ...
最新文章
- 快速开发一个PHP扩展
- 【译】①JWS之Java[tm] Web Start开发者指南目录
- Linq to sql与EF零碎知识点总结
- mstar v56几路hdmi_Android TV : Mstar平台 GPIO 调试
- 使用windows的小技巧
- ip integrator_使用Oracle Data Integrator(和Kafka / MapR流)完善Lambda体系结构
- 2016年湖南省第十二届大学生计算机程序设计竞赛
- 互联网晚报 | 3月22日 星期二 |​ ​工作人员标注mu5735残骸并展开调查;万门大学疑似解散VIP群跑路...
- 有关迷宫的c语言程序的编写,3种C语言编写走迷宫的方法
- hexo需要先编辑好html文件吗,教你定制Hexo的landscape打造自己的主题_html/css_WEB-ITnose...
- 计算机电路电子技术试题答案,数字电子技术基础测试题及其答案.doc
- win7 配置JDK环境变量
- 分组卷积和深度可分离卷积
- 2020平面设计新手入门技巧
- 物联网开发笔记(58)- 使用Micropython开发ESP32开发板之控制2.90寸电子墨水屏模块黑白套件
- 常规诊疗条件下比较依那西普生物类似药(益赛普)与阿达木、英夫利西对RA的疗效[EULAR2015_SAT0360]...
- kernel_neon_begin
- 迈拓恢复出厂设置图解_迈拓维矩电脑切换器使用方法?
- RabbitMQ实战 - Confirm机制
- csgo账号连接服务器错误,steam csgo连接服务器发生错误 | 手游网游页游攻略大全...
热门文章
- 网站性能优化的34条黄金守则(三)—JavaScript和CSS
- python 秘钥_python – 使用ssh密钥加密和解密密码
- vscode调试时几个常用参数的含义和设置总结
- DPDK - Symmetric Receive-side Scaling
- VS+Qt报错无法解析的外部符号
- 微型计算机在硬件上是由,208可打印本资料微机原理与汇编期末考试试卷A卷答案...
- C++ string构造函数和析构函数
- docker常用操作(八) docker安装Zookeeper
- 21考研数学二和英语二复习规划
- c语言经典100例对考研有用吗,考研数学经验,没用算这学长输