当前位置: 主页 > 建站知识 > 软件开发

人脸识别软件开发人员配置-iphone照相机如何识别人脸

发布时间:2023-02-12 10:24   浏览次数:次   作者:佚名

编者按:我们发现了一系列有趣的文章《30天学会30种新技术》,准备翻译,每天更新一篇,年终大礼包。 以下是第十二天的内容。

今天我将学习如何使用Java进行人脸检测。 人脸检测有助于识别任何数字图像上的人脸,经过一些研究,我发现了 OpenCV 库可以帮助我检测图像中的人脸。 但是,我无法找到关于从 Java 使用 OpenCV 库的完整初学者教程,因此这篇文章可能是其他人在该领域学习的资源。

logo

什么是 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 罐子

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

$ cd opencv-2.4.7

1n识别能存多少人脸_iphone照相机如何识别人脸_人脸识别软件开发人员配置

$ 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。

img-1

Eclipse的安装非常简单,解压下载的包即可。 如果您使用的是 Linux 或 Mac 计算机,请打开命令行窗口并输入以下命令:

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

1n识别能存多少人脸_人脸识别软件开发人员配置_iphone照相机如何识别人脸

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

添加用户库

打开Eclipse IDE,然后进入项目工作区,进入目录Windows > Preferences > Java > Build Path > User Libraries,选择添加新库。

img-3

为库提供类似 OpenCV-2.4.7 的内容,然后单击“确定”。

img-3

单击添加外部 Jar,然后添加 OpenCV-2.4.7 文件。

img-4

选择本机库位置并单击编辑。

img-5

单击外部文件夹。

img-6

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

img-7

现在,单击“确定”,我们已将 OpenCV 添加为用户库。

创建新的 Java 项目

一步一步,在文件 > 新建 > 其他 > Java 项目下创建一个新的 Java 项目,完成后,右键单击该项目以配置构建路径。

1n识别能存多少人脸_人脸识别软件开发人员配置_iphone照相机如何识别人脸

img-9

转到“库”选项卡并单击“添加库”。

img-10

选择“用户库”

img-11

选择我们上一步添加的OpenCV-2.4.7用户库人脸识别软件开发人员配置,点击“Finish”。

img-12

最后,您将看到 Java 项目包含了 OpenCV-2.4.7 用户库。

img-13

编写人脸检测器(FaceDetector)

在上面创建的Java项目中创建一个类,添加如下代码:

package com.shekhar.facedetection;
import org.opencv.core.Core;
import org.opencv.core.Mat;
import org.opencv.core.MatOfRect;
import org.opencv.core.Point;

人脸识别软件开发人员配置_1n识别能存多少人脸_iphone照相机如何识别人脸

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();

1n识别能存多少人脸_人脸识别软件开发人员配置_iphone照相机如何识别人脸

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); } }

上面的代码可以:

加载本机 OpenCV 库,以便它可以用于调用 Java API。 创建 CascadeClassifier 的实例,将加载的分类器的文件名传递给它。 接下来,我们使用Highhui类将图像转换成Java API可以接受的格式,为OpenCV C++的n维密集数组类打下基础。 然后,调用分类器上的 detectMultiScale 方法,将图像和 MatOfRect 对象传递给它。 经过这个过程,MatOfRect 就会进行人脸检测。 我们遍历所有面部检测并用矩形标记图像。 最后,将图像写入输出 .png 文件。

这个程序的输出结果如下图,是人脸检测前后的图片:

img-14