【人脸检测】OpenCV调用深度学习模型实现人脸检测-java

介绍

这个Dome是利用OpenCV加载Tensorflow训练的模型,然后返回图片中人脸的位置信息,然后再显示出来

效果,大家可以参考这里7.46 复制打开抖音,看看【写的一手烂代码的作品】人脸检测 java也能用深度学习模型,识别率还挺高... https://v.douyin.com/iU8cUxj5/ zGi:/ 07/10 x@s.eb

说明

  • 为了方便大家直接使用,我把代码封装到jar包中了,后期有时间我上传到maven仓库
  • 想要了解原理的,可以直接反编译看jar代码,其实也没有几行,很简单
  • 我写了2个列子,一个是图片,一个摄像头显示的视频,识别其实只有一行代码FaceDetection.getInstance().action(imgPath);

步骤

jar包和备用的图片

jar下载地址:https://files.yixueai.cn/jar/face-detections-0.31.jar

识别图片的代码

复制代码
import com.lancode.Face;
import com.lancode.FaceDetection;
import org.opencv.core.*;
import org.opencv.highgui.HighGui;
import org.opencv.imgcodecs.Imgcodecs;
import org.opencv.imgproc.Imgproc;
import java.util.List;

public class Demo {
    public static void main(String[] args) throws Exception {
        // 随便找一个张带有人脸的图片
        String imgPath = "E:\\age_gender.jpg";
        // =================关键代码==============
        List<Face> rets = FaceDetection.getInstance().action(imgPath);
        // =================关键代码==============
        Mat frame = Imgcodecs.imread(imgPath);
        for (Face face : rets) {
            System.out.println("左上角坐标信息 = (" + face.getX() +"," + face.getY() + ")  人脸的高度 = " + face.getHeight() + " 人脸的宽度 = " + face.getWidth() + " 有多少把握是正确的" + face.getScore());
            // 下面是将信息在原图中画出来显示出来,实际不需要的代码
            Rect rect = new Rect((int)face.getX(), (int)face.getY(), (int)face.getWidth(), (int)face.getHeight());
            Imgproc.rectangle(frame, rect, new Scalar(0, 0, 255), 2 , 8);
            Imgproc.putText(frame, String.format("%.2f", face.getScore()), new Point(rect.x, rect.y-5), Imgproc.FONT_HERSHEY_COMPLEX,1.0,new Scalar(255,0,0));
        }
        // 显示画好后的图片
        HighGui.imshow("LanCode人脸检测演示", frame);
        HighGui.waitKey(0);
    }
}

代码效果

视频的代码

复制代码
import com.lancode.Face;
import com.lancode.FaceDetection;
import org.opencv.core.*;
import org.opencv.highgui.HighGui;
import org.opencv.imgproc.Imgproc;
import org.opencv.videoio.VideoCapture;

import java.util.List;

public class CameraDisplay {


    public static void main(String[] args) throws Exception {
        // 获取FaceDetection类
        FaceDetection instance = FaceDetection.getInstance();
        // 打开默认摄像头
        VideoCapture camera = new VideoCapture(0);

        // 检查摄像头是否成功打开
        if (!camera.isOpened()) {
            System.out.println("无法打开摄像头");
            return;
        }

        // 创建一个窗口
        HighGui.namedWindow("摄像头", HighGui.WINDOW_AUTOSIZE);

        // 定义一个Mat对象来存储帧
        Mat frame = new Mat();

        // 循环读取摄像头帧
        while (true) {
            // 读取新一帧
            camera.read(frame);
            // ======关键代码==========
            List<Face> faces = instance.action(frame);
            // ======关键代码==========
            // 下面和图片是一样的
            for (Face face : faces) {
                Rect rect = new Rect((int)face.getX(), (int)face.getY(), (int)face.getWidth(), (int)face.getHeight());
                Imgproc.rectangle(frame, rect, new Scalar(0, 0, 255), 2 , 8);
                Imgproc.putText(frame, String.format("%.2f", face.getScore()), new Point(rect.x, rect.y-5), Imgproc.FONT_HERSHEY_COMPLEX,1.0,new Scalar(255,0,0));
            }

            // 如果读取帧成功,显示在窗口中
            if (!frame.empty()) {
                HighGui.imshow("摄像头", frame);
            } else {
                System.out.println("没有捕获到帧,退出...");
                break;
            }
            // 按 'q' 键退出循环
            if (org.opencv.highgui.HighGui.waitKey(1) == 'q') {
                break;
            }
        }
        // 释放摄像头资源
        camera.release();
        // 销毁所有窗口
        org.opencv.highgui.HighGui.destroyAllWindows();
    }

}
相关推荐
rebel5 分钟前
若依框架整合 CXF 实现 WebService 改造流程(后端)
java·后端
Blossom.11844 分钟前
机器学习在智能制造业中的应用:质量检测与设备故障预测
人工智能·深度学习·神经网络·机器学习·机器人·tensorflow·sklearn
代码的余温1 小时前
5种高效解决Maven依赖冲突的方法
java·maven
慕y2741 小时前
Java学习第十六部分——JUnit框架
java·开发语言·学习
烟锁池塘柳01 小时前
【深度学习】强化学习(Reinforcement Learning, RL)主流架构解析
人工智能·深度学习·机器学习
paishishaba1 小时前
Maven
java·maven
张人玉2 小时前
C# 常量与变量
java·算法·c#
Java技术小馆2 小时前
GitDiagram如何让你的GitHub项目可视化
java·后端·面试
Codebee2 小时前
“自举开发“范式:OneCode如何用低代码重构自身工具链
java·人工智能·架构
Ronin-Lotus3 小时前
深度学习篇---Yolov系列
人工智能·深度学习