基于Java简单的人脸和人眼识别程序

使用这个程序之前必须先安装配置OpenCV详细教程见:https://www.cnblogs.com/prodigal-son/p/12768948.html

注意:
D:/1-NCVT/1.2/1.JavaProgramming/OpenCV/opencv/*前面这部分地址是看你存放的位置决定的*/sources/data/haarcascades/haarcascade_frontalface_alt.xml/*后面的地址不变固定在这个地方*/
package faceDistinguish2;

import java.util.List;

import org.opencv.core.Core;

import org.opencv.core.CvType;

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.imgproc.Imgproc;

import org.opencv.objdetect.CascadeClassifier;

import org.opencv.videoio.VideoCapture;

 /**
* 基于openc的人脸识别
* @author Ocean
*
*/
public class FaceID { /**
* OpenCV人脸识别
* @param rgb
* @param gray
*/
public static void faceRecognition(Mat rgb, Mat gray) { // 读取OpenCV的人脸特征识别文件
CascadeClassifier cascade = new CascadeClassifier("D:/1-NCVT/1.2/1.JavaProgramming/OpenCV/opencv/sources/data/haarcascades/haarcascade_frontalface_alt.xml");
//在路径上没有找到相关文件返回1
if (cascade.empty()) {
System.out.println("人脸识别文件读取失败");
//return;
} MatOfRect rect = new MatOfRect();
//检测人脸
cascade.detectMultiScale(gray, rect);
// 为每张识别到的人脸画一个圈
for (Rect re : rect.toArray()) { Imgproc.rectangle(rgb, new Point(re.x, re.y), new Point(re.x+ re.width, re.y + re.height), new Scalar(0, 0, 255)); }
//图形界面显示
HighGui.imshow("人脸识别", rgb); }
/**
* OpenCV人眼识别
* @param rgb
* @param gray
*/
public static void eyeRecognition(Mat rgb, Mat gray) { // 读取OpenCV的人眼特征识别文件
CascadeClassifier cascade = new CascadeClassifier("D:/1-NCVT/1.2/1.JavaProgramming/OpenCV/opencv/sources/data/haarcascades/haarcascade_eye_tree_eyeglasses.xml");
if (cascade.empty()) {
System.out.println("人眼识别文件读取失败");
return;
} MatOfRect rect = new MatOfRect(); cascade.detectMultiScale(gray, rect); for (Rect re : rect.toArray()) {
Imgproc.rectangle(rgb, new Point(re.x, re.y), new Point(re.x+ re.width, re.y + re.height), new Scalar(255, 0, 0)); } // HighGui.imshow("人脸识别", rgb); } public static void main(String[] args) {
System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
// 实例化相机
VideoCapture videoCapture = new VideoCapture();
// 如果要从摄像头获取视频 则要在 VideoCapture 的构造方法写 0
if (!videoCapture.open(0)) { System.out.println("相机打开失败");
return; }
while (true) {
Mat img = new Mat(); if (!videoCapture.read(img)) { return; }
Mat rgb = new Mat();
// 灰度化
Imgproc.cvtColor(img, rgb, Imgproc.COLOR_BGR2RGB); Mat gray = new Mat(); Imgproc.cvtColor(rgb, gray, Imgproc.COLOR_RGB2GRAY);
faceRecognition(img, gray);
eyeRecognition(img, gray);
HighGui.waitKey(10); } } }

程序效果



如果在运行完成关闭图形窗口后再次运行出现下面这种错误是因为程序还没有结束



解决办法是点击下面这个除去启动



再点击终止就解决这个问题了



以后关闭图形界面后就点击终止按钮或者直接点击终止按钮就可以终止程序了

java基于OpenCV的人脸识别的更多相关文章

  1. 基于 OpenCV 的人脸识别

    基于 OpenCV 的人脸识别 一点背景知识 OpenCV 是一个开源的计算机视觉和机器学习库.它包含成千上万优化过的算法,为各种计算机视觉应用提供了一个通用工具包.根据这个项目的关于页面,OpenC ...

  2. 【计算机视觉】基于OpenCV的人脸识别

    一点背景知识 OpenCV 是一个开源的计算机视觉和机器学习库.它包含成千上万优化过的算法,为各种计算机视觉应用提供了一个通用工具包.根据这个项目的关于页面,OpenCV 已被广泛运用在各种项目上,从 ...

  3. 利用Java调用OpenCV进行人脸识别

    详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcyt409 今天我准备学习如何用Java来进行人脸检测.人脸检测有助于在任何数字图 ...

  4. 基于OpenCV的人脸识别[iOS开发笔记(2)]

    开始了OpenCV的试水工作了... 1.Get ready 在OpenCV中我们会使用函数cv::CascadeClassifier 来进行人脸检测.但是在使用本函数之前我们需要添加一个XML文件对 ...

  5. python基于OpenCV的人脸识别系统

    想获得所有的代码,请下载(来自我的CSDN): https://download.csdn.net/download/qq_40875849/11292912 主函数: from recognitio ...

  6. 基于opencv的人脸识别程序

    1. 解析opencv自带人脸识别源码(……/opencv-3.1.0/samples/cpp/facedetect.cpp) @ 操作系统:Ubuntu 15.04 OpenCV版本:3.1.0 # ...

  7. 转:基于开源项目OpenCV的人脸识别Demo版整理(不仅可以识别人脸,还可以识别眼睛鼻子嘴等)【模式识别中的翘楚】

    文章来自于:http://blog.renren.com/share/246648717/8171467499 基于开源项目OpenCV的人脸识别Demo版整理(不仅可以识别人脸,还可以识别眼睛鼻子嘴 ...

  8. Java基于opencv实现图像数字识别(五)—投影法分割字符

    Java基于opencv实现图像数字识别(五)-投影法分割字符 水平投影法 1.水平投影法就是先用一个数组统计出图像每行黑色像素点的个数(二值化的图像): 2.选出一个最优的阀值,根据比这个阀值大或小 ...

  9. Java基于opencv实现图像数字识别(四)—图像降噪

    Java基于opencv实现图像数字识别(四)-图像降噪 我们每一步的工作都是基于前一步的,我们先把我们前面的几个函数封装成一个工具类,以后我们所有的函数都基于这个工具类 这个工具类呢,就一个成员变量 ...

随机推荐

  1. Oracle给权限和同义词

    在同一个DB下,用户A创建了一个Table(student),用户B无法访问.如果B想要访问,就需要A赋予B权限. 登录用户A执行下面语句: GRANT SELECT, INSERT, UPDATE, ...

  2. JVM基础结构与字节码执行引擎

    JVM基础结构 JVM内部结构如下:栈.堆. 栈 JVM中的栈主要是指线程里面的栈,里面有方法栈.native方法栈.PC寄存器等等:每个方法栈是由栈帧组成的:每个栈帧是由局部变量表.操作数栈等组成. ...

  3. input radio点击选中再点击取消

    这里主要说一下这个jquery中的data()方法,个人感觉这个方法平时挺少用到的,所以说一说,按照官方的解释就是 向元素附加数据,然后取回该数据; 嗯,是的,就是这么简单. 那这里说一下这个方法的使 ...

  4. 1055 The World's Richest (25分)(水排序)

    Forbes magazine publishes every year its list of billionaires based on the annual ranking of the wor ...

  5. ELK 是什么?

                                                                         ELK 是什么? 2018年07月04月  09:37:46 ...

  6. python 终端带颜色的打印文本

    import sys from termcolor import colored, cprint text = colored('Hello, World!', 'red', attrs=['reve ...

  7. django-rest-framework限流

    django-rest-framework限流 在项目根目录下新建utils的文件 新建throttling.py from django_redis import get_redis_connect ...

  8. Jenkins构建项目后发送钉钉消息推送

    前言 钉钉是我们日常工作的沟通工具,在Jenkins构建持续集成项目配合钉钉机器人的功能,可以让我们在持续集成测试环节快速接收到测试结果的消息推送. 一:新建一个钉钉群,选择自定义机器人 二:添加机器 ...

  9. PHP获取当天、本周、本月、本季度、本年度时间

    function get_date($date, $t = 'd', $n = 0) { if ($t == 'd') { $firstday = date('Y-m-d 00:00:00', str ...

  10. Jmeter使用Websocket插件测试SingalR,外加还有阿里云PTS的Jmeter原生测试爬坑日志。

    题外话:距离我的上一篇博客已经过去7年多了,我实在是个不务正业的程序员,遇到测试方面的东西总想分享一下,因为可用的资料实在太少了(包括国外的资料). 本人不喜欢授人以鱼,所以不会直接给出问题和解决方案 ...