「java绘制人脸」人脸识别java实现

博主:adminadmin 2022-12-08 17:09:07 73

本篇文章给大家谈谈java绘制人脸,以及人脸识别java实现对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:

人脸识别系统使用java的开发

现在主流的还是用的百度,千搜等公司的在线API,就是传图片过去,等接收结果就行,seetaface这个东西太复杂了。

java 实现人脸的动漫化 照片用数组存还是image对象?提取人脸的什么特征?人脸处理常用哪些特征?

YOGUAI为保险柜,自动门,考勤等行业提供人脸识别方案。

随着计算机网络和通信技术的发展,信息安全、知识产权保护和身份认证等问题成了一个重要而紧迫的研究课题。身份认证是保证系统安全的必要前提,在多种不同的安全领域都需要准确的身份认证。传统的身份证、智能卡、密码等身份认证方法存在携带不便、容易遗失、不可读或密码易被破解等诸多问题。基于人脸识别技术的身份认证方法与传统的方法相比,具有更好的安全性、可靠性和有效性,因此正越来越受到人们的重视,并逐渐进入社会生活的各个领域。

人脸识别技术具有广泛的应用前景,可以应用到多种不同的安全领域,因其识别特征的独特性、惟一性和相对稳定性,逐渐成为一非常热门的研究课题。许多典型的人脸识别算法和应用系统都是针对标准或特定的人脸数据库,利用库内人脸进行训练,并在相同的库中实现人脸识别。但在软件保护、计算机安全等特殊应用中,身份认证仅针对单个对象进行人脸识别,现有的人脸识别方法并不能胜任这样的识别任务。为此,本文针对单对象人脸识别的特点,讨论了单对象人脸检测和识别的关键技术,在此基础上提出了一种单对象人脸识别算法,实验结果证明了该方法的有效性。

2单对象人脸识别的特点

与典型的人脸识别相比,单对象人脸识别有以下4个方面的特点:

应用领域人脸识别的应用领域很广,如刑侦破案、证件核对、保安监控等,而单对象人脸识别主要应用在软件保护、计算机安全锁、特定对象追踪等领域。

识别系统的目标单对象人脸识别的最终目标是系统必须具有高度的安全性和可靠性,即识别错误率趋于0。虽然降低识别错误率的同时识别率也会降低,但可以通过提示用户调整姿态(如注视摄像头等)加以改善。

肤色模型由于单对象人脸识别仅针对特定的对象,所以人脸检测的肤色模型可采用自适应的方法调整肤色范围。

分类方法单对象人脸识别不存在人脸数据库,常用的最小距离分类法不能够正确识别特定的对象,只能用阈值作为判据。因此,阈值的选取十分重要,阈值过大则容易出现错判,存在安全隐患;而阈值过小又会影响识别效率。

3人脸的检测和归一化

人脸检测是人脸识别的前提。对于给定的图像,人脸检测的目的在于判断图像中是否存在人脸,如果存在,则返回其位置和空间分布。利用人脸肤色和面部特征,将人脸检测分为两个阶段:外脸检测和内脸定位。外脸检测主要利用人脸肤色进行初步的脸区检测,分割出肤色区域;内脸检测是在外脸区域中利用面部几何特征进行验证和定位。

3.1外脸检测

外脸检测的任务是将待检图像中可能的人脸区域找出来并加以标记,其步骤如下:

(1)根据人类肤色在色彩空间中存在区域性的特点,将可能为人脸的像素检测出来。为更好地利用肤色特征,同时选用HSI和YcbCr两种色彩空间对图像进行二值化处理,肤色范围限定在H∈[0,46],S∈[0.10,0.72],Cb∈[98,130],Cr∈[128,170]内。将满足条件的像素标记为肤色像素,其余的均为非肤色像素。

(2)去噪处理。在以每一个肤色点为中心的5×5邻域内统计肤色像素的个数,超过半数时中心点保留为肤色,否则认为是非肤色。

(3)将二值图像中的肤色块作区域归并,并对目标区域进行比例、结构分析,过滤掉不可能的人脸区域。目标区域的高度/宽度比例限定在0.8~2.0。

3.2内脸检测和定位

将包含眼、眉、鼻和嘴的区域称为内脸区域。内脸区域能够很好地表达人脸特征,且不易受背景、头发等因素的干扰,因此内脸区域的检测和定位对后续的特征提取和识别至关重要。

在外脸区域的上半部,对二值图像进行水平方向和垂直方向的投影,确定两个包含黑点的矩形区域作为双眼的大致区域。在确定的两个区域中,对黑点进行区域膨胀,可以得到眼睛的基本轮廓和左石眼角,黑点坐标的平均值作为瞳孔的位置。

设左右瞳孔的坐标分别为(Lx,Ly)和(Rx,Ry),两个瞳孔之间的距离为d,根据人脸的几何特征,我们将内脸区域定义为:宽度=-d×1.6,高度=-d×1.8,左上角坐标为(Lx-d×0.3,(Ly Ry)/2-(-d)×0.3)。实验表明,该区域能够很好地表达人脸特征。

3.3内脸区域的归一化

由于各待测图像中的人脸大小具有很大的随机性,因此,有必要对内脸区域进行归一化操作。人脸归一化是指对内脸区域的图像进行缩放变换,得到统一大小的标准图像,实验中,我们规定标准图像的大小为128×128。归一化处理,保证了人脸大小的一致性,体现了人脸在图像平面内的尺寸不变性。

对归一化的人脸图像,采用小波变换与DCT相结合的方法提取人脸特征。首先对人脸图像进行3层小波分解,取低频子图像LL3作为人脸特征提取的对象,从而获得每幅训练样本或测试样本的低频子图像;然后对低频子图像进行离散余弦变换(DCT),DCT系数个数与子图像的大小相等(即256),由于图像DCT变换,能量集中在低频部分,因此只取其中的136个低频系数作为特征向量。

5人脸的识别

完成训练过程并获得待测样本的特征后,即可进行人脸识别,本文采用欧氏距离进行分类。

5.1计算样本与平均脸的欧氏距离

用m和x表示平均脸和样本的特征向量,则样本与平均脸的欧氏距离为:

其中mk表示平均脸的第k个特征向量,xk表示待测样本的第k个特征向量。身份认证时,计算待测样本与平均脸的欧氏距离,并与特定对象的自适应阈值进行比较,将小于阈值的样本判为该对象的人脸,即认证通过。

5.2自适应阈值的选取

与典型的人脸识别方法不同,单对象人脸认识没有人脸数据库,不能用距离最小作为判据,只能用阈值作为判别依据。阈值的选取应兼顾识别率和识别的准确性,实验中我们取训练样本与平均脸的欧氏距离平均值作为分类阈值,即:

其中,N为训练样本数,此值不宜太小;di为第i个样本与平均脸之间的欧氏距离。

莫士特科技有限公司提供模式识别主板及解决方案。

希望采纳

Java可以做人脸识别吗

单纯的java是不能的

这东西应该属于图形图象的范畴,C++选择不错.Java的图形图象单看Java给准备的那些类库就晓得了,垃圾的要死,根本没有任何价值,本身图形图象这块Java就干不过别人,也就没有进行主流发展,靠它去做这些东西,做梦吧.你见过有人伐树拿绳子伐的吗?它确实可以做到,但是要多大的成本和代价啊,衡量一下,如果用Java做出来,恐怕要的MONEY不会单单是你着100分的问题了,你在后面加上三个0,然后换成$单位,恐怕还有人会去想一想.

如何开发Java动态人脸识别

1.环境搭建

整个项目的结构图

2.编写DetectFaceDemo.java,代码如下:

[java] view plaincopy

package com.njupt.zhb.test;

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;

//

// Detects faces in an image, draws boxes around them, and writes the results

// to "faceDetection.png".

//

public class DetectFaceDemo {

public void run() {

System.out.println("\nRunning DetectFaceDemo");

System.out.println(getClass().getResource("lbpcascade_frontalface.xml").getPath());

// Create a face detector from the cascade file in the resources

// directory.

//CascadeClassifier faceDetector = new CascadeClassifier(getClass().getResource("lbpcascade_frontalface.xml").getPath());

//Mat image = Highgui.imread(getClass().getResource("lena.png").getPath());

//注意:源程序的路径会多打印一个‘/’,因此总是出现如下错误

/*

* Detected 0 faces Writing faceDetection.png libpng warning: Image

* width is zero in IHDR libpng warning: Image height is zero in IHDR

* libpng error: Invalid IHDR data

*/

//因此,我们将第一个字符去掉

String xmlfilePath=getClass().getResource("lbpcascade_frontalface.xml").getPath().substring(1);

CascadeClassifier faceDetector = new CascadeClassifier(xmlfilePath);

Mat image = Highgui.imread(getClass().getResource("we.jpg").getPath().substring(1));

// Detect faces in the image.

// MatOfRect is a special container class for Rect.

MatOfRect faceDetections = new MatOfRect();

faceDetector.detectMultiScale(image, faceDetections);

System.out.println(String.format("Detected %s faces", faceDetections.toArray().length));

// Draw a bounding box around each face.

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

}

// Save the visualized detection.

String filename = "faceDetection.png";

System.out.println(String.format("Writing %s", filename));

Highgui.imwrite(filename, image);

}

}

3.编写测试类:

[java] view plaincopy

package com.njupt.zhb.test;

public class TestMain {

public static void main(String[] args) {

System.out.println("Hello, OpenCV");

// Load the native library.

System.loadLibrary("opencv_java246");

new DetectFaceDemo().run();

}

}

//运行结果:

//Hello, OpenCV

//

//Running DetectFaceDemo

///E:/eclipse_Jee/workspace/JavaOpenCV246/bin/com/njupt/zhb/test/lbpcascade_frontalface.xml

//Detected 8 faces

//Writing faceDetection.png

用Java画人脸

完整代码如下:

import java.awt.Dimension;

import java.awt.Graphics;

import java.awt.Toolkit;

import javax.swing.JFrame;

public class Face extends JFrame  {

/**

*

*/

private static final long serialVersionUID = 1L;

public Face(){

setSize(500, 500);

setResizable(false);

setDefaultCloseOperation(EXIT_ON_CLOSE);

Dimension screenSize = Toolkit.getDefaultToolkit()

.getScreenSize();

Dimension frameSize = getSize();

setLocation((screenSize.width - frameSize.width) / 2,

(screenSize.height - frameSize.height) / 2);

setVisible(true);

}

//下面的是关键的绘图代码

public void paint(Graphics g){

//画头

g.drawOval(100, 50, 300, 400);

//画眼睛

g.drawOval(140, 150, 100, 50);

g.drawOval(260, 150, 100, 50);

//画鼻子

g.drawArc(140, 150, 100, 150, -90, 90);

g.drawArc(260, 150, 100, 150, 180, 90);

//画嘴巴

g.drawOval(170, 320, 150, 50);

}

public static void main(String args[]){

new Face();

}

}

主要是用了几个java的画图函数,如果有用的话,希望采纳

用java编写一个颜色为红色,粗线型的笑脸和哭脸,需要继承JFrame类,用java中的绘制图形做

JFreeChart------------它是一种组件技术,专用于在java中实现图形报表

----------饼图,柱状图,折线图

JFreeChart它是一种独立图表技术,它与struts2本身并无关系,只不过,它可以与struts2配合使用

饼图的步骤:

1、创建一个web工程

2、导入struts2框架(core,struts2-jfreeChart)

3、向工程导入(jfreechart.jar,jcommon.jar)

4、创建BaseAction继承于ActionSupport,并且,在类中,声明一个属性 JFreeChart chart;并且生成set,get方法

5、编写ChartAction类,继承于BaseAction

6、在ChartAction类中,编写 showPie()用于显示饼图

7、在struts.xml配置当前action

8、在index.jsp配置,通过img src="chart!showPie.action"进入到指定方法

=================================================================================================================

9、编写ChartDao类,模拟从数据库查询数据

//得到饼图需要的数据集

public DefaultPieDataset getPieDataset(){

DefaultPieDataset dp = new DefaultPieDataset();

dp.setValue("联想",321);

dp.setValue("华硕",189);

dp.setValue("戴尔",98);

dp.setValue("IBM",213);

dp.setValue("Apple",287);

dp.setValue("惠普",120);

dp.setValue("SONY",87);

return dp;

}

==============================================================================================================

10、在ChartAction中的showPie方法,生成饼图

public String showPie(){

//得以要显示的数据集,根据数据,生成饼图

DefaultPieDataset dp = dao.getPieDataset();

//chart = ChartFactory.createPieChart("标题",要显示在饼图中的数据集,是否显示颜色说明,"是否显示工具提示","是否显示网络地址 ");

chart = ChartFactory.createPieChart("一季度各电脑品牌销售汇总",dp,true,false,false);

return "success";

}

=============================================================================================================

11、在struts.xml文件,进行相关配置

package name="struts2" extends="struts-default"

result-types

result-type name="chart" class="org.apache.struts2.dispatcher.ChartResult"/

/result-types

action name="chart" class="org.java.web.ChartAction"

result name="success" type="chart"

param name="width"800/param

param name="height"600/param

/result

/action

/package

=================================================================================================================

12、解决乱码

标题区的乱码

Font f1 = new Font("隶书",Font.BOLD,40);

TextTitle tt = new TextTitle("一季度各电脑品牌销售汇总",f1);

chart.setTitle(tt);//绑定标题

颜色提示区乱码

Font f2 = new Font("隶书",Font.BOLD,20);

LegendTitle lt = chart.getLegend();

lt.setItemFont(f2);//设置该区域的字体

解决饼图中的乱码

PiePlot pp = (PiePlot) chart.getPlot();//得到饼图区域

pp.setLabelFont(f2);//设置饼图区域中的字体

=============================================================================================================

13、设置饼图中要显示的数据格式

//该对象,用于指定饼图要显示的数据格式 //0:key //1:value 2:百分比

StandardPieSectionLabelGenerator sc = new StandardPieSectionLabelGenerator("{0},{1}台,{2}");

//把显示的格式,绑定饼图中

pp.setLabelGenerator(sc);

需要完整版请联系我

关于java绘制人脸和人脸识别java实现的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。

The End

发布于:2022-12-08,除非注明,否则均为首码项目网原创文章,转载请注明出处。