依赖jar包:
faceRecognition.java
 package opencv;

 import java.awt.Graphics;
import java.awt.image.BufferedImage; import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.WindowConstants; import org.opencv.core.Core;
import org.opencv.core.Mat;
import org.opencv.core.MatOfDouble;
import org.opencv.core.MatOfRect;
import org.opencv.core.Point;
import org.opencv.core.Rect;
import org.opencv.core.Scalar;
import org.opencv.imgproc.Imgproc;
import org.opencv.objdetect.CascadeClassifier;
import org.opencv.objdetect.HOGDescriptor;
import org.opencv.videoio.VideoCapture;
import org.opencv.videoio.Videoio; @SuppressWarnings("serial")
public class faceRecognition extends JPanel { private BufferedImage mImg; private BufferedImage mat2BI(Mat mat) {
int dataSize = mat.cols() * mat.rows() * (int) mat.elemSize();
byte[] data = new byte[dataSize];
mat.get(0, 0, data);
int type = mat.channels() == 1 ? BufferedImage.TYPE_BYTE_GRAY : BufferedImage.TYPE_3BYTE_BGR; if (type == BufferedImage.TYPE_3BYTE_BGR) {
for (int i = 0; i < dataSize; i += 3) {
byte blue = data[i + 0];
data[i + 0] = data[i + 2];
data[i + 2] = blue;
}
}
BufferedImage image = new BufferedImage(mat.cols(), mat.rows(), type);
image.getRaster().setDataElements(0, 0, mat.cols(), mat.rows(), data); return image;
} public void paintComponent(Graphics g) {
if (mImg != null) {
g.drawImage(mImg, 0, 0, mImg.getWidth(), mImg.getHeight(), this);
}
} public static void main(String[] args) {
try {
System.loadLibrary(Core.NATIVE_LIBRARY_NAME); Mat capImg = new Mat();
VideoCapture capture = new VideoCapture(0);
int height = (int) capture.get(Videoio.CAP_PROP_FRAME_HEIGHT);
int width = (int) capture.get(Videoio.CAP_PROP_FRAME_WIDTH);
if (height == 0 || width == 0) {
throw new Exception("未发现摄像头!");
} // 创建jframe
JFrame frame = new JFrame("摄像头");
frame.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
faceRecognition panel = new faceRecognition();
// 添加鼠标监听器
// panel.addMouseListener(new MouseAdapter() {
// @Override
// public void mouseClicked(MouseEvent arg0) {
// System.out.println("鼠标点击");
// }
//
// @Override
// public void mouseMoved(MouseEvent arg0) {
// System.out.println("鼠标移开");
//
// }
//
// @Override
// public void mouseReleased(MouseEvent arg0) {
// System.out.println("鼠标释放");
// }
//
// @Override
// public void mousePressed(MouseEvent arg0) {
// System.out.println("鼠标按下");
// }
//
// @Override
// public void mouseExited(MouseEvent arg0) {
// System.out.println("鼠标出界");
// // System.out.println(arg0.toString());
// }
//
// @Override
// public void mouseDragged(MouseEvent arg0) {
// System.out.println("mouseDragged");
// // System.out.println(arg0.toString());
// }
// });
frame.setContentPane(panel);
frame.setVisible(true);
frame.setSize(width + frame.getInsets().left + frame.getInsets().right,
height + frame.getInsets().top + frame.getInsets().bottom);
int n = 1;
Mat temp = new Mat();
// while (frame.isShowing() && n <= 500) {
while (frame.isShowing()) {
// System.out.println("第" + n + "张");
capture.read(capImg); // 载入图片
Imgproc.cvtColor(capImg, temp, Imgproc.COLOR_RGB2GRAY);
// Imgcodecs.imwrite("E:/opencv/wzg/picture_" + n + ".png", temp); // 存储图片到本地
panel.mImg = panel.mat2BI(detectFace(capImg)); // 调用人脸识别方法
panel.repaint();
// n++;
// break; // 识别500存入本地
}
capture.release();
frame.dispose();
} catch (Exception e) {
System.out.println("例外:" + e);
} finally {
System.out.println("--done--");
} } /**
* opencv实现人脸识别
*
* @param img
*/
public static Mat detectFace(Mat img) throws Exception { // System.out.println("开始人像识别 ... ");
// 从配置文件lbpcascade_frontalface.xml中创建一个人脸识别器,该文件位于opencv安装目录中
CascadeClassifier faceDetector = new CascadeClassifier("E:\\my_dev\\haarcascade_frontalface_alt.xml"); // 在图片中检测人脸
MatOfRect faceDetections = new MatOfRect(); faceDetector.detectMultiScale(img, faceDetections); if (faceDetections.toArray().length == 0) {
// System.out.println("no face");
} else {
System.out.println(String.format("检测到 %s 个人像", faceDetections.toArray().length));
} Rect[] rects = faceDetections.toArray();
if (rects != null && rects.length >= 1) {
for (Rect rect : rects) {
Imgproc.rectangle(img, new Point(rect.x, rect.y), new Point(rect.x + rect.width, rect.y + rect.height),
new Scalar(0, 0, 255), 2);
}
}
return img;
} /**
* opencv实现人型识别,hog默认的分类器。所以效果不好。
*
* @param img
*/
public static Mat detectPeople(Mat img) {
// System.out.println("detectPeople...");
if (img.empty()) {
System.out.println("image is exist");
}
HOGDescriptor hog = new HOGDescriptor();
hog.setSVMDetector(HOGDescriptor.getDefaultPeopleDetector());
System.out.println(HOGDescriptor.getDefaultPeopleDetector());
hog.setSVMDetector(HOGDescriptor.getDaimlerPeopleDetector());
MatOfRect regions = new MatOfRect();
MatOfDouble foundWeights = new MatOfDouble();
System.out.println(foundWeights.toString());
hog.detectMultiScale(img, regions, foundWeights);
for (Rect rect : regions.toArray()) {
Imgproc.rectangle(img, new Point(rect.x, rect.y), new Point(rect.x + rect.width, rect.y + rect.height),
new Scalar(0, 0, 255), 2);
}
return img;
} }

AI:OPENCV实现人脸的自动识别的更多相关文章

  1. OpenCV检测人脸实例代码

    下面是使用OpenCV通过在硬盘中读入图像来对其进行Haar人脸检测的代码. //包含头文件 #include <opencv2/core/core.hpp> #include " ...

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

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

  3. Python学习--使用dlib、opencv进行人脸检测标注

    参考自https://www.pyimagesearch.com/2017/04/03/facial-landmarks-dlib-opencv-python/ 在原有基础上有一部分的修改(image ...

  4. OpenCV + Python 人脸检测

    必备知识 Haar-like opencv api 读取图片 灰度转换 画图 显示图像 获取人脸识别训练数据 探测人脸 处理人脸探测的结果 实例 图片素材 人脸检测代码 人脸检测结果 总结 下午的时候 ...

  5. 【转载】opencv实现人脸检测

    全文转载自CSDN的博客(不知道怎么将CSDN的博客转到博客园,应该没这功能吧,所以直接复制全文了),转载地址如下 http://blog.csdn.net/lsq2902101015/article ...

  6. Java+opencv实现人脸检测

    版本 Java1.8 opencv3.4 代码: import java.awt.Graphics; import java.awt.image.BufferedImage; import javax ...

  7. 使用OpenCV进行人脸识别

    不断维护的地址:http://plzcoding.com/face-recognition-with-opencv/ 怎样使用OpenCV进行人脸识别 本文大部分来自OpenCV官网上的Face Re ...

  8. c# 利用AForge和百度AI开发实时人脸识别

    baiduAIFaceIdentify项目是C#语言,集成百度AI的SDK利用AForge开发的实时人脸识别的小demo,里边包含了人脸检测识别,人脸注册,人脸登录等功能 人脸实时检测识别功能 思路是 ...

  9. OpenCV学习系列(一) Mac下OpenCV + xcode人脸检测实现

    # OpenCV学习系列(一) Mac下OpenCV + xcode人脸检测实现 [-= 博客目录 =-] 1-学习目标 1.1-本章介绍 1.2-实践内容 1.3-相关说明 2-学习过程 2.1-环 ...

随机推荐

  1. 空暇时候思考之const

    对于多数人来说那些const的使用方法比方修饰返回值和修饰參数都应该是十分好理解的下来我要讨论 对于C语言中 #include <stdio.h> void main() { const ...

  2. vb.net版机房收费系统——教你七层架构(三)—外观模式

    上次我们看到了D层是如何运作的,如今.我简单演示一下我的外观和B层是如何和U层和D层打交道的. 首先我跟大家说的是我的外观是依照界面功能划分的,粒度有点小,大家在做的时候,记得外观有几个即可了,可是不 ...

  3. 图像切割—基于图的图像切割(Graph-Based Image Segmentation)

     图像切割-基于图的图像切割(Graph-Based Image Segmentation) Reference: Efficient Graph-Based Image Segmentation ...

  4. springboot 注入xml自定义类

    新建入口类可扫描类: @Configuration @ImportResource(locations = {"classpath:spring-bean.xml"}) publi ...

  5. CUDA笔记12

    这几天配置了新环境,而且流量不够了就没写. 看到CSDN一个人写了些机器学习的笔记,于是引用一下http://blog.csdn.net/yc461515457/article/details/504 ...

  6. Unified BeginFrame scheduling for Chrome

    Unified BeginFrame scheduling for Chrome http://goo.gl/D1Qxrr Status: http://crbug.com/401331 and ht ...

  7. ubuntu 18.04网卡命名规则改回传统的ethx

    自15版本开始网卡命名规则就不叫eth0了.而是用可预期网络接口设备名称的命名规则,比如网卡名为enp3s0 . 如果想要变回ethx也是可以的,参考以下步骤: 1.编辑/etc/default/gr ...

  8. 大数问题(相加) A + B

    I have a very simple problem for you. Given two integers A and B, your job is to calculate the Sum o ...

  9. MySql系列之单表查询

    单表查询的语法 SELECT 字段1,字段2... FROM 表名 WHERE 条件 GROUP BY field HAVING 筛选 ORDER BY field LIMIT 限制条数 关键字的执行 ...

  10. Centos7不修改默认交换分区下添加交换分区

    交换分区介绍 Linux系统中的交换分区是当物理内存(RAM)被充满时,作为物理内存的缓存来使用. 当系统需要更多的内存资源而物理内存已经充满,内存中不活跃的页就会被移动到交换分区上. 交换分区位于硬 ...