• java基于OpenCV的人脸识别


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

    程序效果

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

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

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

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

  • 相关阅读:
    Elasticsearch 技术分析(五):如何通过SQL查询Elasticsearch
    IntelliJ IDEA 2018.3 重大升级,哪些功能打动了你?
    终于有人把“TCC分布式事务”实现原理讲明白了!
    Elasticsearch 技术分析(一): 基础入门
    拜托!面试请不要再问我Spring Cloud底层原理
    一个正则表达式引发的血案
    程序员啊,他又加班了
    程序员你为什么这么累 | 编码规范
    全文搜索引擎 ElasticSearch 还是 Solr?
    TCP三次握手原理,你真的了解吗?
  • 原文地址:https://www.cnblogs.com/prodigal-son/p/12774217.html
Copyright © 2020-2023  润新知