基于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. A - Investment

    A - Investment John never knew he had a grand-uncle, until he received the notary's letter. He learn ...

  2. 关于github报错:ssh: connect to host github.com port 22: Connection timed outfatal: Could not read from remote repository.Please make sure you have the correct access rightsand the repository exists.

    当执行git命令如:git clone.git pull等等 出现报错:ssh: connect to host github.com port 22: Connection timed outfat ...

  3. 浅谈C++三种传参方式

    浅谈C++三种传参方式 C++给函数传参中,主要有三种方式:分别是值传递.指针传递和引用传递. 下面通过讲解和实例来说明三种方式的区别. 值传递 我们都知道,在函数定义括号中的参数是形参,是给函数内专 ...

  4. 关于selenium定位元素时,出现此问题的处理办法:find_element=wait.until(ec.presence_of_element_locatetd(locator))定位不到页面元素的问题

    最近再用,selenium中的from selenium.webdriver.common.by import By方法时,一直报错如下(图一),各种百度都没有解决,最后只能脱离框架,从最原始的代码开 ...

  5. mysql 聚集函数 count 使用详解

    mysql 聚集函数 count 使用详解 本文将探讨以下问题 1.count(*) . count(n).count(null)与count(fieldName) 2.distinct 与 coun ...

  6. python redis 实现简单的消息订阅

    python + redis 实现简单的消息订阅 订阅端 import redis from functools import wraps class Subscribe: def __init__( ...

  7. VSCode——自定义VSCode背景图片

    本文转载自https://blog.csdn.net/yukinoai/article/details/84564949 1.以管理员身份运行VS Code,安装background插件 2.打开se ...

  8. 聊聊Disruptor 和 Aeron 这两个开源库

    Disruptor The best way to understand what the Disruptor is, is to compare it to something well under ...

  9. Linux终端命令格式

    01.终端命令格式 command [-options] [parameter] 说明: command:命令名,响应功能的英文单词或单词的缩写 [-options]:选项,可用来对命令进行控制,也可 ...

  10. ADT_Bundle搭建

    1.打开SDK Manager.exe,打开的速度有点慢.点击右下角的[install n packages...],选择[accept ...],点击[install],然后等待安装.过程有点漫长, ...