Spring Boot结合OpenCV进行人脸识别

项目架构

  1. 后端:Spring Boot。
  2. 视觉框架:OpenCV。

文件结构

  • src/main/java:Spring Boot的主目录,包含类、控制器、服务、DLL动态链接库、data/haarcascades分类器等。
  • src/main/resources:配置文件、静态资源等。

OpenCV依赖

  • 下载完毕后,进行解压(我的是opencv-4.10.0-windows)。
  • 将解压文件中的 opencv/build/java 文件夹中的所有文件复制到 ${project.basedir}/lib/ 中。
  • 导入opencv依赖(pom.xml
        <dependency>
            <groupId>cn.lz.zy</groupId>
            <artifactId>opencv</artifactId>
            <version>4.10.0</version>
            <scope>system</scope>
            <systemPath>${project.basedir}/lib/opencv-4100.jar</systemPath>
        </dependency>

实现

添加VM Options

 可根据自身需求设置library路径

-Djava.library.path=C:\MyFiles\Projects\Spring_Boot_Projects\opencv_demo\lib\x64

人脸识别测试

将opencv中的opencv/sources/data目录中文件复制到项目/data中。

import org.opencv.core.*;
import org.opencv.objdetect.CascadeClassifier;
import org.opencv.videoio.VideoCapture;

import static org.opencv.highgui.HighGui.*;
import static org.opencv.imgproc.Imgproc.*;

/**
 * @author zy
 * @date 2024/6/24
 * @Description 人脸视频测试
 */
@Slf4j
public class FaceDetection {
    static {
        System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
        String systemProperties = String.valueOf(System.getProperties().get("os.arch"));
        log.info("系统架构:{}", systemProperties);
    }

    static CascadeClassifier faceDetector  = new CascadeClassifier("data/haarcascades/haarcascade_frontalface_alt.xml");
    public static void main(String[] args) {
        //获取摄像头
        VideoCapture capture = new VideoCapture(0);
        //判断摄像头是否打开
        if (!capture.isOpened()) {
            log.info("摄像头打开失败");
            return;
        }
        //循环读取摄像头数据
        while (true) {
            Mat frame = new Mat();
            //读取摄像头数据
            capture.read(frame);
            Mat grayFrame = new Mat();
            if (frame.empty()) {
                log.info("没有获取到视频流");
                break;
            }
            cvtColor(frame, grayFrame, COLOR_BGR2GRAY);
            equalizeHist(grayFrame, grayFrame);
            MatOfRect faces = new MatOfRect();
            faceDetector.detectMultiScale(grayFrame, faces);
            for (Rect rect : faces.toArray()) {
                rectangle(frame, rect, new Scalar(0, 255, 0), 2);
            }

            imshow("人脸检测:", frame);
            if (waitKey(1) == 27) {
                break;
            }
        }
        capture.release();//释放摄像头资源
        destroyAllWindows();//释放窗口资源
    }
}

运行结果


总结

  •  确保Maven引入本地JAR包的正确性。

  • VM Options的正确配置。

  • 获取摄像头,并确保摄像头可用。

  • 灰度图、人脸检测的正确调用。

  • 资源释放。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值