博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
利用Java调用OpenCV进行人脸识别
阅读量:5906 次
发布时间:2019-06-19

本文共 3288 字,大约阅读时间需要 10 分钟。

详见:

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

什么是OpenCV?

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


Github库

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


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最新版的代号是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 文件里。

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

今天就这些,欢迎反馈。

转载地址:http://hucpx.baihongyu.com/

你可能感兴趣的文章
艾级计算机的发展与挑战
查看>>
RocketMQ事务消息实战
查看>>
手把手教你做出好看的文本输入框
查看>>
zabbix 3.2.7 (源码包)安装部署
查看>>
vsCode 快捷键、插件
查看>>
网络最大流问题算法小结 [转]
查看>>
iOS推送消息报错误“Domain=NSCocoaErrorDomain Code=3000”的可能问题
查看>>
kvm-1
查看>>
leetcode 64. Minimum Path Sum
查看>>
textkit
查看>>
CentOS7+CDH5.14.0安装CDH错误排查: HiveServer2 该角色的进程已退出。该角色的预期状态为已启动...
查看>>
The Oregon Trail 俄勒冈之旅
查看>>
Excel VBA连接MySql 数据库获取数据
查看>>
Developing a Service Provider using Java API(Service Provider Interface)(转)
查看>>
oschina程序开发
查看>>
nested exception is java.lang.NoClassDefFoundError: net/sf/cglib/proxy/CallbackFilter
查看>>
“正在注册字体”问题解决
查看>>
iOS开发-OpenGL ES入门教程1
查看>>
Java 设计模式专栏
查看>>
使用ASP.NET Atlas SortBehavior实现客户端排序
查看>>