Java+OpenCV实现人脸检测并自动拍照

java+opencv实现人脸检测,调用笔记本摄像头实时抓拍,人脸会用红色边框标识出来,并且将抓拍的目录存放在src下,图片名称是时间戳。

环境配置:win7 64位,jdk1.8

CameraBasic.java

package com.njupt.zhb.test;

import java.awt.EventQueue;

import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;

import org.opencv.core.*;
import org.opencv.highgui.Highgui;
import org.opencv.highgui.VideoCapture;
import org.opencv.imgproc.Imgproc;
import org.opencv.objdetect.CascadeClassifier;
/**
 * 动态人脸检测并裁剪
 * @author hyj
 *
 */
public class CameraBasic {
  static {
   System.out.println(System.getProperty("java.library.path"));
    System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
  }
  private JFrame frame;
  private static JLabel label;
  private static int flag = 0;

  public static void main(String[] args) {
    EventQueue.invokeLater(new Runnable() {
      @Override
      public void run() {
        try {
          CameraBasic window = new CameraBasic();
          window.frame.setVisible(true);
        } catch (Exception e) {
          e.printStackTrace();
        }
      }
    });

    VideoCapture camera = new VideoCapture();//创建Opencv中的视频捕捉对象
    camera.open(0);//open函数中的0代表当前计算机中索引为0的摄像头,如果你的计算机有多个摄像头,那么一次1,2,3……
    if (!camera.isOpened()) {//isOpened函数用来判断摄像头调用是否成功
      System.out.println("Camera Error");//如果摄像头调用失败,输出错误信息
    } else {
      Mat frame = new Mat();//创建一个输出帧
      while (flag == 0) {
        camera.read(frame);//read方法读取摄像头的当前帧
//        CascadeClassifier faceDetector = new CascadeClassifier("src/com/njupt/zhb/test/lbpcascade_frontalface.xml");
        CascadeClassifier faceDetector = new CascadeClassifier("src/com/njupt/zhb/test/haarcascade_frontalface_alt.xml");
        MatOfRect faceDetections = new MatOfRect();
        faceDetector.detectMultiScale(frame, faceDetections);
        Rect [] rectArray = faceDetections.toArray();
        if (rectArray.length > 0) {

          for (int i=0;i<rectArray.length;i++) {
           Rect rect = rectArray[i];
            Rect rectCrop = new Rect(rect.x, rect.y, rect.width, rect.height);
            if (rect.width + rect.height > rectCrop.height + rectCrop.width) {
              rectCrop = new Rect(rect.x, rect.y, rect.width, rect.height);
            }
             System.out.println(String.format("检测到 %s 个人脸! ", rectArray.length));
             Mat imageRoi = new Mat(frame, rectCrop);
             String name = System.currentTimeMillis()+".png";
             Highgui.imwrite(name, imageRoi);

            Core.rectangle(frame, new Point(rect.x, rect.y), new Point(rect.x + rect.width, rect.y + rect.height), new Scalar(0, 0, 255), 2);
          }
        }

        //转换图像格式并输出
        label.setIcon(new ImageIcon(mat2BufferedImage.matToBufferedImage(frame)));

        try {
          Thread.sleep(500);//线程暂停500ms
        } catch (InterruptedException e) {
          // TODO Auto-generated catch block
          e.printStackTrace();
        }

//        if (faceCount > 0) {
//          faceSerialCount++;
//          System.out.println(faceSerialCount);
//        } else {
//          faceSerialCount = 0;
//        }
//
//        if (faceSerialCount > 6) {
//          Mat imageRoi = new Mat(frame, rectCrop);
//          Highgui.imwrite("haha.png", imageRoi);
//          faceSerialCount = 0;
//        }
      }
    }
  }

  private CameraBasic() {
    initialize();
  }

  private void initialize() {
    frame = new JFrame();
    frame.setBounds(100, 100, 1000, 600);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.getContentPane().setLayout(null);
    label = new JLabel("");
    label.setBounds(0, 0, 1000, 500);
    frame.getContentPane().add(label);
  }

}

完整源码下载地址:Java+OpenCV实现人脸检测并拍照

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • Java+opencv3.2.0实现人脸检测功能

    说到人脸检测,首先要了解Haar特征分类器.Haar特征分类器说白了就是一个个的xml文件,不同的xml里面描述人体各个部位的特征值,比如人脸.眼睛等等.OpenCV3.2.0中提供了如下特征文件: haarcascade_eye.xml haarcascade_eye_tree_eyeglasses.xml haarcascade_frontalcatface.xml haarcascade_frontalcatface_extended.xml haarcascade_frontalface

  • JavaCV实现人脸检测功能

    本文实例为大家分享了JavaCV实现人脸检测功能的具体代码,供大家参考,具体内容如下 /* * Copyright (C) 2010,2011,2012 Samuel Audet * * FacePreview - A fusion of OpenCV's facedetect and Android's CameraPreview samples, * with JavaCV + JavaCPP as the glue in between. * * This file was based o

  • Java+OpenCV实现人脸检测并自动拍照

    java+opencv实现人脸检测,调用笔记本摄像头实时抓拍,人脸会用红色边框标识出来,并且将抓拍的目录存放在src下,图片名称是时间戳. 环境配置:win7 64位,jdk1.8 CameraBasic.java package com.njupt.zhb.test; import java.awt.EventQueue; import javax.swing.ImageIcon; import javax.swing.JFrame; import javax.swing.JLabel; im

  • OpenCV实现人脸检测

    前段日子,写了个人脸检测的小程序,可以检测标记图片.视频.摄像头中的人脸.效果还行吧,用的是opencv提供人脸库.至于具体的人脸检测原理,找资料去啃吧. 环境:VS2013+OPENCV2.4.10+Win8.1 一.基于对话框的MFC 首先,新建一个基于对话框的MFC应用程序,命名为myFaceDetect(取消"安全开发周期(SDL)检查"勾选,我自己习惯取消这个). 放置Button,设置Button的ID和Caption. 图片按钮--ID:IDC_FACEDETECT 视频

  • Android 利用OpenCV制作人脸检测APP

    目录 前言 第一步:下载并安装Android studio 第二步:下载SDK tools 第三步:新建一个Android APP项目 第四步:下载Opencv 第五步:导入OpenCV 第六步:添加代码 第七步:连接手机运行程序 前言 本篇文章手把手教大家使用OpenCV来实现一个能在安卓手机上运行的人脸检测APP.其实不仅仅是能检测人脸,还能检测鼻子,嘴巴,眼睛和耳朵.花了不少精力写这篇文章,希望点赞收藏关注. 无图无真相,先把APP运行的结果给大家看看. 如上图所示,APP运行后,点击"选

  • Android 利用OpenCV制作人脸检测APP

    目录 前言 第一步:下载并安装Android studio 第二步:下载SDK tools 第三步:新建一个Android APP项目 第四步:下载Opencv 第五步:导入OpenCV 第六步:添加代码 第七步:连接手机运行程序 前言 本篇文章手把手教大家使用OpenCV来实现一个能在安卓手机上运行的人脸检测APP.其实不仅仅是能检测人脸,还能检测鼻子,嘴巴,眼睛和耳朵.花了不少精力写这篇文章,希望点赞收藏关注. 无图无真相,先把APP运行的结果给大家看看. 如上图所示,APP运行后,点击"选

  • 基于openCV实现人脸检测

    openCV的人脸识别主要通过Haar分类器实现,当然,这是在已有训练数据的基础上.openCV安装在 opencv/opencv/sources/data/haarcascades_cuda(或haarcascades)中存在预先训练好的物体检测器(xml格式),包括正脸.侧脸.眼睛.微笑.上半身.下半身.全身等. openCV的的Haar分类器是一个监督分类器,首先对图像进行直方图均衡化并归一化到同样大小,然后标记里面是否包含要监测的物体.它首先由Paul Viola和Michael Jon

  • C++利用opencv实现人脸检测

    小编所有的帖子都是基于unbuntu系统的,当然稍作修改同样试用于windows的,经过小编的绞尽脑汁,把刚刚发的那篇python 实现人脸和眼睛的检测的程序用C++ 实现了,当然,也参考了不少大神的博客,下面我们就一起来看看: Linux系统下安装opencv我就再啰嗦一次,防止有些人没有安装没调试出来喷小编的程序是个坑, sudo apt-get install libcv-dev sudo apt-get install libopencv-dev 看看你的usr/share/opencv

  • Python基于OpenCV实现人脸检测并保存

    本文实例为大家分享了Python基于OpenCV实现人脸检测,并保存的具体代码,供大家参考,具体内容如下 安装opencv 如果安装了pip的话,Opencv的在windows的安装可以直接通过cmd命令pip install opencv-python(只需要主要模块),也可以输入命令pip install opencv-contrib-python(如果需要main模块和contrib模块) 详情可以点击此处 导入opencv import cv2 所有包都包含haarcascade文件.这

  • Python下应用opencv 实现人脸检测功能

    使用OpenCV's Haar cascades作为人脸检测,因为他做好了库,我们只管使用. 代码简单,除去注释,总共有效代码只有10多行. 所谓库就是一个检测人脸的xml 文件,可以网上查找,下面是一个地址: https://github.com/opencv/opencv/blob/master/data/haarcascades/haarcascade_frontalface_default.xml 如何构造这个库,学习完本文后可以参考: http://note.sonots.com/Sc

  • java+opencv实现人脸识别功能

    背景:最近需要用到人脸识别,但又不花钱使用现有的第三方人脸识别接口,为此使用opencv结合java进行人脸识别(ps:opencv是开源的,使用它来做人脸识别存在一定的误差,效果一般). 1.安装opencv 官网地址:https://opencv.org/ , 由于官网下载速度是真的慢 百度网盘: 链接: https://pan.baidu.com/s/1RpsP-I7v8pP2dkqALDw7FQ 提取码: pq7v 如果是官网下载,就无脑安装就行了,安装完毕后. 将图一的两个文件复制到图

  • python中使用OpenCV进行人脸检测的例子

    OpenCV的人脸检测功能在一般场合还是不错的.而ubuntu正好提供了python-opencv这个包,用它可以方便地实现人脸检测的代码. 写代码之前应该先安装python-opencv: 复制代码 代码如下: $ sudo apt-get install python-opencv 具体原理就不多说了,可以参考一下这篇文章.直接上源码. 复制代码 代码如下: #!/usr/bin/python# -*- coding: UTF-8 -*- # face_detect.py # Face De

随机推荐