热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Java使用Opencv进行人脸识别

最近项目上需要用Java做人脸识别,上手了两个星期的Opencv对于人脸识别也有了一定的认识.首先,我们需要下载Opencv官网:opencv.org我用的是4

最近项目上需要用Java做人脸识别,上手了两个星期的Opencv对于人脸识别也有了一定的认识.

首先,我们需要下载Opencv

官网:opencv.org

我用的是4.10版本

点击Release进行下载Opencv

下载好后 在Eclipse中配置Opencv

Window-Perference-Java-Build Path-User Libraries->New

添加一个新的用户库

然后将Opencv目录下Build-Java中的jar包添加进库

然后设置jar包中的Native library location为对应的C++生成的dll文件 一般在OpenCV的jar中的 X64文件夹或者X86

配置好后就可以进行编写代码了

下面是我用到的API 自己通过理解进行翻译的

-------------------------

API
org.opencv.core包
    Core类
        NATIVE_LIBRARY_NAME                返回一个字符串,内容为库的名称
        
        
    Mat类(图片类)
        Mat(Mat,Rect);                    获取一个图片,为分割后的mat
        size();                            返回一个Size,行数列数
        depth();                        返回一个int,像素深度
        channels();                        返回一个int,通道数
        rows();                            返回一个int,行数
        cols();                            返回一个int,列数
        type();                            返回一个int,创建的矩阵的类型
        release();                        释放资源-会自动调用,所以一般不需要
        clone();                        复制Mat
        eye(int rows,int cols,int type);代表一个单位矩阵
        dump();
    
    MatOfRect类(图片范围类)
        size();                            返回一个Size 输出为到检测的人脸
        size(int);                        返回一个int    如果int为0 则返回检测到的人脸数量
        toArray();                        返回一个Rect数组
        
    CvType类
    
    Scalar类(颜色)
        
org.opencv.objdetect包
    CascadeClassifier类(级联分类器)
        load(String fileName);            返回一个boolean 加载OpenCv中的xml文件,加载成功返回true否则返回false
        detectMultiScale(Mat,MatOfRect,double,int,int,Size);    通过指定的xml文件检测人脸,将值保存在MatofRect中
            mat为输入的灰度图像
            MatOfRect为得到被检测物体的矩形框向量组
            double为每一个图像尺度中的尺度参数,默认值为1.1,可以决定两个不同大小的窗口扫描之间有多大的跳跃
                这个参数设置的大,则意味着计算会变快,但如果窗口错过了某个大小的人脸,则可能丢失物体
            int为每一个级联矩形应该保留的临近个数,默认为3,控制着误检测,
                默认值为3表明至少有3次重叠检测,我们才认为人脸实存
            int对于新的分类器没有用,为0就行
            Size指示寻找人脸的最小区域,设置这个参数过大,会以丢失小物体为代价减少计算量
            
org.opencv.videoio包
    VideoCapture类(视频捕捉)
        VideoCapture(int index);        如果为0则打开本地摄像头
        VideoCapture(String fileName);    读取视频
    
        isOpened();                        返回boolean,视频不能打开返回false
        open(String fileName);            读取视频
        read(Mat image);                获取,解码并返回下一个视频帧,保存在image内

        release();                        关闭
    
org.opencv.imgproc包
    Imgproc类
        COLOR_BGR2GRAY;                    灰色
        cvtColor(Mat,Mat,int,int);        灰度格式
            第一个参数是原图像,第二个参数是转换后的图像保存的变量
        rectangle(Mat,Rect,Scalar);        画矩形
        calcHist
org.opencv.imgcodecs包
    Imgcodecs类
        imread(String fileName);            返回一个Mat,读取图片
        imwrite(String fileName,Mat img);    保存mat为图片,fileName为保存的路径

--------------------------

将库在项目中引用

要想用Opencv首先得加载库

System.loadLibrary(Core.NATIVE_LIBRARY_NAME);

做人脸检测很简单

只需要用CascadeClassifier类就行了

加载opencv给我们提供的训练好的xml文件--在Opencv-source-data目录下 我这里用的haarcascades这个目录里的

private CascadeClassifier faceCascade;//人脸检测器static {//加载库System.loadLibrary(Core.NATIVE_LIBRARY_NAME);//获取人脸检测器faceCascade = new CascadeClassifier(人脸的xml文件-haarcascade_frontalface_alt.xml);
}
/*** -检测人脸 根据一张mat*/
public static Mat detectFace(Mat mat) {//检测到的人脸的位置-矩形集MatOfRect rect = new MatOfRect();//进行检测 根据一个Mat,将结果返回到MatOfRect中faceCascade.detectMultiScale(mat,rect);//遍历rect 给每个人脸画个框Rect[] re = rect.toArray();for (Rect r : re) {//给图片上画框框 参数1是图片 参数2是矩形 参数3是颜色 参数四是画出来的线条大小Imgproc.rectangle(mat,r,new Scalar(0,0,255),2);}//输出图片Imgcodecs.imwrite(路径+1.jpg,mat);
}

不同的分类器检测出来的效果也会不同

并且detectMultiScale方法里有很多参数可以设置,更改有不同效果

人脸识别的话首先需要一个人脸库

--这里建议用Javacv 因为要做人脸识别需要contrib模块

JavaCv已经整合好了

目前我的解决方法是用百度AI上进行人脸识别

--------待学习

如果各位有会的话请在下方评论


推荐阅读
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • 本文介绍了关于apache、phpmyadmin、mysql、php、emacs、path等知识点,以及如何搭建php环境。文章提供了详细的安装步骤和所需软件列表,希望能帮助读者解决与LAMP相关的技术问题。 ... [详细]
  • flowable工作流 流程变量_信也科技工作流平台的技术实践
    1背景随着公司业务发展及内部业务流程诉求的增长,目前信息化系统不能够很好满足期望,主要体现如下:目前OA流程引擎无法满足企业特定业务流程需求,且移动端体 ... [详细]
  • 本文介绍了Swing组件的用法,重点讲解了图标接口的定义和创建方法。图标接口用来将图标与各种组件相关联,可以是简单的绘画或使用磁盘上的GIF格式图像。文章详细介绍了图标接口的属性和绘制方法,并给出了一个菱形图标的实现示例。该示例可以配置图标的尺寸、颜色和填充状态。 ... [详细]
  • Week04面向对象设计与继承学习总结及作业要求
    本文总结了Week04面向对象设计与继承的重要知识点,包括对象、类、封装性、静态属性、静态方法、重载、继承和多态等。同时,还介绍了私有构造函数在类外部无法被调用、static不能访问非静态属性以及该类实例可以共享类里的static属性等内容。此外,还提到了作业要求,包括讲述一个在网上商城购物或在班级博客进行学习的故事,并使用Markdown的加粗标记和语句块标记标注关键名词和动词。最后,还提到了参考资料中关于UML类图如何绘制的范例。 ... [详细]
  • 如何实现JDK版本的切换功能,解决开发环境冲突问题
    本文介绍了在开发过程中遇到JDK版本冲突的情况,以及如何通过修改环境变量实现JDK版本的切换功能,解决开发环境冲突的问题。通过合理的切换环境,可以更好地进行项目开发。同时,提醒读者注意不仅限于1.7和1.8版本的转换,还要适应不同项目和个人开发习惯的需求。 ... [详细]
  • Activiti7流程定义开发笔记
    本文介绍了Activiti7流程定义的开发笔记,包括流程定义的概念、使用activiti-explorer和activiti-eclipse-designer进行建模的方式,以及生成流程图的方法。还介绍了流程定义部署的概念和步骤,包括将bpmn和png文件添加部署到activiti数据库中的方法,以及使用ZIP包进行部署的方式。同时还提到了activiti.cfg.xml文件的作用。 ... [详细]
  • 2016 linux发行版排行_灵越7590 安装 linux (manjarognome)
    RT之前做了一次灵越7590黑苹果炒作业的文章,希望能够分享给更多不想折腾的人。kawauso:教你如何给灵越7590黑苹果抄作业​zhuanlan.z ... [详细]
  • 深入解析Linux下的I/O多路转接epoll技术
    本文深入解析了Linux下的I/O多路转接epoll技术,介绍了select和poll函数的问题,以及epoll函数的设计和优点。同时讲解了epoll函数的使用方法,包括epoll_create和epoll_ctl两个系统调用。 ... [详细]
  • 开发笔记:spring boot项目打成war包部署到服务器的步骤与注意事项
    本文介绍了将spring boot项目打成war包并部署到服务器的步骤与注意事项。通过本文的学习,读者可以了解到如何将spring boot项目打包成war包,并成功地部署到服务器上。 ... [详细]
  • Spring框架《一》简介
    Spring框架《一》1.Spring概述1.1简介1.2Spring模板二、IOC容器和Bean1.IOC和DI简介2.三种通过类型获取bean3.给bean的属性赋值3.1依赖 ... [详细]
  • 面试经验分享:华为面试四轮电话面试、一轮笔试、一轮主管视频面试、一轮hr视频面试
    最近有朋友去华为面试,面试经历包括四轮电话面试、一轮笔试、一轮主管视频面试、一轮hr视频面试。80%的人都在第一轮电话面试中失败,因为缺乏基础知识。面试问题涉及 ... [详细]
  • Struts2+Sring+Hibernate简单配置
    2019独角兽企业重金招聘Python工程师标准Struts2SpringHibernate搭建全解!Struts2SpringHibernate是J2EE的最 ... [详细]
  • android ... [详细]
  • Maven构建Hadoop,
    Maven构建Hadoop工程阅读目录序Maven安装构建示例下载系列索引 序  上一篇,我们编写了第一个MapReduce,并且成功的运行了Job,Hadoop1.x是通过ant ... [详细]
author-avatar
天天宅家里变胖的小黑
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有