和同事接触了下甲方,对方算是一个资源整合的自由人,手里有项目,然后认识些开发就聊下有什么事情可以做的,对方聊了下做人脸签到,或者说人脸打开。就这方面我做了下简单的了解。做了个java小demo。
我们常用的人脸识别的摄像头屏幕就是一个简单的图片视频提供的工具,人脸识别的实现都是后台的实现。
java中有个opencv-platform封装好的包,简单的引入项目然后通过下面的代码就能清晰的圈出图片中的人脸
package com.gzl.opence;
import org.bytedeco.javacpp.Loader;
import org.bytedeco.opencv.global.opencv_core;
import org.bytedeco.opencv.global.opencv_imgcodecs;
import org.bytedeco.opencv.global.opencv_imgproc;
import org.bytedeco.opencv.opencv_core.*;
import org.bytedeco.opencv.opencv_objdetect.CascadeClassifier;
public class OpencvApplication {
static {
Loader.load(opencv_core.class);
}
public static void main(String[] args) {
// 读取图像
String filePath = "F:\\GAO\\Desktop/person1.jpg";
Mat image = opencv_imgcodecs.imread(filePath);
if (image.empty()) {
System.out.println("图像加载失败!");
return;
}
// 转换为灰度图像
Mat grayImage = new Mat();
opencv_imgproc.cvtColor(image, grayImage, opencv_imgproc.COLOR_BGR2GRAY);
// 加载人脸分类器
String xmlFile = "E:\\study\\gzl_base\\gzl_opencv\\gzl_opencv_server\\src\\main\\resources/haarcascade_frontalface_alt.xml";
CascadeClassifier faceDetector = new CascadeClassifier(xmlFile);
// 检测人脸
RectVector faceDetections = new RectVector();
faceDetector.detectMultiScale(grayImage, faceDetections);
System.out.println(String.format("检测到 %s 张人脸", faceDetections.size()));
// 在图像上绘制人脸矩形
for (int i = 0; i < faceDetections.size(); i++) {
Rect rect = faceDetections.get(i);
opencv_imgproc.rectangle(image, new Point(rect.x(), rect.y()),
new Point(rect.x() + rect.width(), rect.y() + rect.height()),
new Scalar(0, 255, 0, 0));
}
// 保存处理后的图像
String outputFilePath = "output.jpg";
opencv_imgcodecs.imwrite(outputFilePath, image);
System.out.println("处理后的图像已保存:" + outputFilePath);
}
}
上面的代码是实现了 图片中识别到人。如果做人脸签到还需要做些其他的操作。后续更新