今天我准备学习如何用Java来进行人脸检测。人脸检测有助于在任何数字图像上识别人脸,在做了一些研究后,我发现OpenCV的库可以帮我检测图像中的人脸。不过,我没能找到一个完整的通过Java使用OpenCV库的初学者教程,所以这篇文章可能会是他人在这方面学习的资料。

什么是OpenCV?

OpenCV(Open Source Computer Vision) 是一个开源的计算机视觉算法库。是用C/C++写的,旨在发挥多核心的优势。它提供C++、C、Python和Java的接口,并支持所有主流操作系统平台,包括Windows、Linux、Mac OS、iOS及Android。


Github库

今天的演示应用程序的代码在GitHub上有:day12-face-detection 。


OpenCV入门

开始学习OpenCV,第一步就是去它官网下载支持你目前操作系统的最新版本OpenCV包,文中使用的是2.4.7版。

程序包下载完成后,使用tar命令解压:

$ tar xvf opencv-2.4.7.tar.gz

切换目录到opencv-2.4.7

$ cd opencv-2.4.7

构建OpenCV jar

我花了很多时间来了解如何获得OpenCV的jar文件。文档中的Java教程假设OpenCV jar文件是在生成文件夹中,适用于Windows用户的OpenCV包(包括jar文件),但并不适用于Linux和Mac OS用户。为了构建OpenCV jar,请执行如下命令:

$ cd opencv-2.4.7$ mkdir build$ cd build/$ cmake -G "Unix Makefiles" -D CMAKE_CXX_COMPILER=/usr/bin/g++ -D CMAKE_C_COMPILER=/usr/bin/gcc -D WITH_CUDA=ON .. $ make -j4 $ make install

上面的命令会在 opencv-2.4.7/build/bin 的目录下创建opencv-247.jar 文件,这是Java绑定到本地OpenCV的安装方法。


下载Eclipse

如果你系统里没有安装eclipse,可以去Eclipse官网下载最新版,就目前而言eclipse最新版的代号是Kepler。

Eclipse的安装很容易,只需要解压下载下来的包即可。如果是在Linux或者Mac机器上,开个命令行窗口,输入如下命令:

$ tar -xzvf eclipse-jee-kepler-R-*.tar.gz

Windows下,你解压到哪里,那里就会有一个eclipse文件夹,这样就可以直接操作了,当然你也可以创建执行文件的快捷方式到桌面。


添加用户库

打开Eclipse IDE,然后到项目工作区,转到目录 Windows > Preferences > Java > Build Path > User Libraries 下,选择添加一个新的库。

给这个库命名为OpenCV-2.4.7之类的名字,然后点击“确定”。

点击Add External Jars,然后添加 OpenCV-2.4.7 文件。

选择Native library location,然后点击“编辑(Edit)”。

点击 External Folder

opencv-2.4.7/build/lib 文件夹下给出库目录(lib)的路径。

现在,点击“确定”,我们已经把 OpenCV 作为用户库(user library)添加进去了。


创建新的Java项目

一步一步在File > New > Other > Java Project下创建新的Java项目,完成后,右键单击该项目配置构建路径。

转到Libraries选项卡,然后点击“添加库(Add Library)”。

选择“用户库(User Library)

选择我们最后一步添加进去的OpenCV-2.4.7用户库,点击“完成”。

最后,你会看见这个Java项目里已经包含了OpenCV-2.4.7用户库。


写人脸检测器(FaceDetector)

在上面创建的Java项目里创建一个类(class),并添加下面的代码:

package com.shekhar.facedetection;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.highgui.Highgui;
import org.opencv.objdetect.CascadeClassifier;public class FaceDetector {public static void main(String[] args) {System.loadLibrary(Core.NATIVE_LIBRARY_NAME);System.out.println("\nRunning FaceDetector");CascadeClassifier faceDetector = new CascadeClassifier(FaceDetector.class.getResource("haarcascade_frontalface_alt.xml").getPath());Mat image = Highgui.imread(FaceDetector.class.getResource("shekhar.JPG").getPath());MatOfRect faceDetections = new MatOfRect();faceDetector.detectMultiScale(image, faceDetections);System.out.println(String.format("Detected %s faces", faceDetections.toArray().length));for (Rect rect : faceDetections.toArray()) {Core.rectangle(image, new Point(rect.x, rect.y), new Point(rect.x + rect.width, rect.y + rect.height),new Scalar(0, 255, 0));}String filename = "ouput.png";System.out.println(String.format("Writing %s", filename));Highgui.imwrite(filename, image);}
}

上面的这些代码可以:

  1. 加载本地的OpenCV库,这样就可以用它来调用Java API。
  2. 创建实例CascadeClassifier,将已加载的分类器的文件名传递给它。
  3. 接下来我们将图片转化成Java API能够接受使用Highui类的格式,铺垫在OpenCV C++的n维密集数组类上边。
  4. 然后,调用分类器上的detectMultiScale方法传递给它图象和MatOfRect对象。这个过程之后,MatOfRect将有面部检测。
  5. 我们遍历所有的脸部检测并用矩形标记图像。
  6. 最后,将图像写入输出的 .png 文件里。

这个程序的输出展示如下,这是在人脸检测之前和之后的图片:

今天就这些,欢迎反馈。


原文 Day 12: OpenCV--Face Detection for Java Developers
整理 SegmentFault

Day 12: OpenCV —— Java开发者的人脸检测相关推荐

  1. Java 图像处理教程(人脸检测,添加水印,图像颜色转换)

    Java 图像处理教程(人脸检测,添加水印,图像颜色转换) 文章目录 Java 图像处理教程(人脸检测,添加水印,图像颜色转换) 1:图片的读和写 2:彩色图像转换成灰度图像 3:彩色图像转换成负图像 ...

  2. python 视频人脸替换_Python基于OpenCV实现视频的人脸检测

    本文实例为大家分享了基于OpenCV实现视频的人脸检测具体代码,供大家参考,具体内容如下 前提条件 1.摄像头 2.已安装Python和OpenCV3 代码 import cv2 import sys ...

  3. python视频人脸检测_Python基于OpenCV实现视频的人脸检测

    本文实例为大家分享了基于OpenCV实现视频的人脸检测具体代码,供大家参考,具体内容如下 前提条件 1.摄像头 2.已安装Python和OpenCV3 代码 import cv2 import sys ...

  4. 基于OpenCV的视频处理 - 人脸检测

    一个不知名大学生,江湖人称菜狗 original author: jacky Li Email : 3435673055@qq.com  Time of completion:2023.2.7 Las ...

  5. OpenCV图像处理——iOS端人脸检测

    前言 1.OpenCV有专门的iOS平台的包,可以真接下载导入工程,也可以用cmake把OpenCV源码编成.a文件,以静态库的形式导入工程. 2.我这里用的Xcode11,OpenCV用的是最4.2 ...

  6. OpenCV实践之路——人脸检测(C++/Python) 【转】

    转自:http://blog.csdn.net/xingchenbingbuyu/article/details/51105159 版权声明:本文为博主原创文章,转载请联系作者取得授权. 本文由@星沉 ...

  7. opencv基于DNN的人脸检测

    from:https://blog.csdn.net/minstyrain/article/details/78907425 opencv3.4 版之前自带的人脸检测器是基于Haar+Adaboost ...

  8. 使用mediapipe和OpenCV实现摄像头实时人脸检测

    # 摄像头实时人脸检测 # opencv import timeimport cv2 # mediapipe ai工具包 import mediapipe as mp # 进度条库 from tqdm ...

  9. 人工智能Java SDK:人脸检测,应用于包括人脸门禁系统、刷脸支付等各行各业

    人脸检测SDK 人脸识别 广义的人脸识别实际包括构建人脸识别系统的一系列相关技术,包括人脸图像采集.人脸定位.人脸识别预处理.身份确认以及身份查找等: 而狭义的人脸识别特指通过人脸进行身份确认或者身份 ...

最新文章

  1. ssh开发实战之整合篇
  2. python pickle模块
  3. ServletContext_概述
  4. 【Lucene4.8教程之二】索引
  5. ls mac 显示最近修改日期_如何在Mac上按日期排序文件 | MOS86
  6. 湖南工程学院+c语言程序设计人事档案管理系统,程序设计人事档案管理系统.doc...
  7. mybatis 自动填充无效_开发小知识-mybatis-plus自动填充与读写分离
  8. 第1章 数据库系统及应用
  9. easyui form表单提交标准格式
  10. linux 删除压缩包_【干货】记住!这些 Linux 命令千万不要运行!
  11. 网站部署——基于Django框架的天天生鲜电商网站项目系列博客(十六)
  12. java计算机毕业设计小区宠物管理系统源码+系统+数据库+lw文档
  13. java中的oop是什么意思_什么是面向对象编程(OOP)?
  14. Inno自定义界面学习笔记(一)
  15. [迁移] Luac的使用
  16. 【供应链架构day12】电商仓储WMS的业务UseCase
  17. 站在巨人肩膀上——vb.net学习
  18. 移动硬盘格式化了,要怎么恢复数据
  19. 关于计算机的职业畅想,我的职业畅想作文
  20. Matlab 色图控制

热门文章

  1. jvm性能调优实战 - 24模拟因动态年龄判断对象进入老年代的场景
  2. Apache ZooKeeper - Leader 选举 如何保证分布式数据的一致性
  3. Spring-AOP @AspectJ切点函数之@within()和@target
  4. linux系统一下剪贴板在哪里,Linux的最佳剪贴板管理器
  5. sqlplus执行mysql_在SQLPLUS启动和停止Oracle数据库
  6. Win10不能使用Genymotion模拟器的解决方案
  7. numpy.random.uniform()
  8. pg 递归算法_16. 图的________优先搜索遍历算法是一种递归算法,图的________优先搜索遍历算法需要使用队列。...
  9. C语言实验——最小公倍数和最大公约数_JAVA
  10. faster rcnn源码解读(六)之minibatch