Java使用OpenCV实现人脸识别
通过OpenCV实现人脸识别,包括图片,视频,摄像头中人脸识别。
首先看一下效果(在网上随便找的一张图片):
下面开始说一下如何实现的:
第一步: 需要安装OpenCV
下载链接:https://opencv.org/ 或 https://download.csdn.net/download/u012804490/10813245
第二步:创建一个Java项目
第三步:将OpenCV的jar包引入项目(截图演示)
然后 点OK。
第四步:代码实现
package com.opencv;import org.opencv.core.*;
import org.opencv.core.Point;
import org.opencv.imgcodecs.Imgcodecs;
import org.opencv.imgproc.Imgproc;
import org.opencv.objdetect.CascadeClassifier;
import org.opencv.videoio.VideoCapture;import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.awt.image.DataBufferByte;
import java.awt.image.WritableRaster;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;import static org.opencv.imgproc.Imgproc.CV_BILATERAL;public class FaceRecognitionDemo {public static void main(String[] args) {System.loadLibrary(Core.NATIVE_LIBRARY_NAME);// filePath可以是图片路径,也可以是视频路径String filePath ="pic1236710b.jpg";playVideo(filePath);// 调取摄像头,进行人脸识别
// recording();}public static void playVideo(String fileName){VideoCapture capture = new VideoCapture(fileName);System.out.println(capture.get(CV_BILATERAL));if (!capture.isOpened()) {System.out.println("未能打开文件");return;}showFace(capture);}public static void recording(){VideoCapture capture = new VideoCapture(0);System.out.println(capture.get(CV_BILATERAL));if (!capture.isOpened()) {System.out.println("未能打开文件");return;}showFace(capture);}public static void showFace(VideoCapture capture){//获得视屏流帧的宽度int frame_width = (int) capture.get(3);//获得视屏流帧的高度int frame_height = (int) capture.get(4);//将视频显示类进行实例化VideoGui videoGui = new VideoGui();videoGui.createWin("视频播放",new Dimension(frame_width,frame_height));Mat mat = new Mat();String file = "haarcascade_frontalface_alt.xml";CascadeClassifier classifier = new CascadeClassifier(file);MatOfRect faceDetections = new MatOfRect();while (capture.read(mat)){classifier.detectMultiScale(mat, faceDetections);System.out.println(String.format("Detected %s faces",faceDetections.toArray().length));for (Rect rect : faceDetections.toArray()) {Imgproc.rectangle(mat, new Point(rect.x, rect.y),new Point(rect.x + rect.width, rect.y + rect.height), new Scalar(0, 0, 255));}BufferedImage bufferedImage = matToBufferedImage(mat);//显示视频videoGui.imgShow(bufferedImage);}// 关闭视频文件capture.release();try {Thread.sleep(5000);videoGui.imgClose();} catch (InterruptedException e) {e.printStackTrace();}}public static BufferedImage matToBufferedImage(Mat mat){try {MatOfByte matOfByte = new MatOfByte();Imgcodecs.imencode(".jpg", mat, matOfByte);byte[] byteArray = matOfByte.toArray();InputStream in = new ByteArrayInputStream(byteArray);BufferedImage bufImage = ImageIO.read(in);return bufImage;} catch (IOException e) {e.printStackTrace();}return null;}
}
package com.opencv;import javax.swing.*;
import java.awt.*;
import java.awt.image.BufferedImage;public class VideoGui extends JComponent {private BufferedImage image;private JDialog ui = new JDialog();@Overridepublic void paintComponent(Graphics g){Graphics2D g2d = (Graphics2D) g;if(image == null){g2d.setPaint(Color.BLACK);g2d.fillRect(0,0,this.getWidth(),this.getHeight());}else{g2d.drawImage(image,0,0,this.getWidth(),this.getHeight(),null);}}public void createWin(String title,Dimension size){ui.setTitle(title);ui.getContentPane().setLayout(new BorderLayout());ui.getContentPane().add(this,BorderLayout.CENTER);ui.setSize(new Dimension(size));ui.setVisible(true);}public void imgShow(BufferedImage image){this.image = image;this.repaint();}public void imgClose(){ui.dispose();}
}
第五步:运行:
可能抛异常:Exception in thread "main" java.lang.UnsatisfiedLinkError: no opencv_java400 in java.library.path
解决办法: 需要配置一下 VM options:
-Djava.library.path=C:\OpenCV\opencv\build\java\x64;C:\OpenCV\opencv\build\x64\vc14\bin
再次运行,成功!
项目下载链接: https://download.csdn.net/download/u012804490/10813371
如果对您有帮助就打个赏吧(一元以内即可)
Java使用OpenCV实现人脸识别相关推荐
- Java借助OpenCV实现人脸识别登录完整示例
Java借助OpenCV实现人脸识别登录完整示例 OpenCV 效果预览 概述 下载与安装 目录说明 OpenCV的基本使用 项目集成 图片人脸检测 人脸对比相似度 识别视频中的人脸 摄像头识别人脸 ...
- java调起本地摄像头,利用openCV进行人脸识别(一)
嗨咯,又好久没有更新了.今天写个前阵子做的人脸识别程序.该程序客户端基于Jave JFrame 客户端的主要作用是,调用电脑的摄像头(我的直接调用笔记本摄像头),然后回显摄像头录取的信息,再利用ope ...
- java利用openCV进行人脸对比(三)
之前写过用openCV识别人脸和训练模型,这次说说用模型文件来对比人脸 首先要调起本地摄像头,然后识别一下人脸,这个人脸框出来,再调用模型文件进行人脸对比,识别成功显示用户名在人脸框框上面 这次我把这 ...
- Java + opencv 实现人脸识别,图片人脸识别、视频人脸识别、摄像头实时人脸识别
搭建环境 opencv官网下载windows安装包 https://opencv.org/releases/ 选择最新版4.1.1 下载完成后是一个opencv-4.1.1-vc14_vc15.exe ...
- 基于OpenCV的人脸识别自助商店(源码&部署视频)
1.模块功能介绍 实现人脸识别模块.人脸登录与注册功能.商店显示和用户余额页显示功能 用GUl图形界面实现(pyqt)语言python windows下软件pycharm 1.用户登录模块:刷脸登录 ...
- Python基于OpenCV的人脸识别自助商店(源码&部署视频)
1.模块功能介绍 实现人脸识别模块.人脸登录与注册功能.商店显示和用户余额页显示功能 用GUl图形界面实现(pyqt)语言python windows下软件pycharm 1.用户登录模块:刷脸登录 ...
- Android之OpenCv简单人脸识别功能(Bitmap)
Android之OpenCv简单人脸识别功能 OpenCv的下载 下载地址 - https://opencv.org/releases/ doc 文档目录 samples 示例代码 sdk 编译后的动 ...
- 怎样使用OpenCV进行人脸识别
不断维护的地址:http://plzcoding.com/face-recognition-with-opencv/ 怎样使用OpenCV进行人脸识别 本文大部分来自OpenCV官网上的Face Re ...
- python使用opencv实现人脸识别系统
1.首先安装过python环境,在这里就不过说 检测是否安装成功如下,在cmd中输入Python 2.安装numpy 现在开始安装numpy,打开cmd,输入pip install nu ...
最新文章
- oracle 存储过程 状态,查看ORACLE中正在运行的存储过程 | 学步园
- EDS之后的block
- numpy.ndarray size changed, may indicate binary incompatibil
- 以太坊 比特币 nounce有什么不同
- 基于SSM的猫头鹰物流网站
- java servlet的包下载_javax.servlet jar包下载_javax.servlet jar包官方下载-太平洋下载中心...
- Gradle下载手动安装
- 示波器探头的 x1x10衰减、补偿校准手法
- 大前端技术发展趋势刨析
- 如何用Java运行.jar文件
- Web前端html表格制作
- 【饭谈】【超详细】的资深测开的招聘要求,大家看看这符合了值多少钱?
- 如何用laragon框架运行php文件
- UE4,UE5虚幻引擎源码版下载
- 微服务网关和服务注册中心
- java 实习生刚入职都会做些什么工作呢?
- AS运行app闪退,出现keeps stopping错误
- 4g/GPRS DTU 开发板软件代码硬件图纸料
- 机器学习算法——贝叶斯分类器3(朴素贝叶斯分类器)
- Redis Cluster [WARNING] Node 127.0.0.1:7003 has slots in migrating state (15495).