如何实现人脸检测,并且对照片进行编辑?

作者站长头像
站长
· 阅读数 7

问题描述

用户传递一个照片,这个照片没有太多要求,只要本人穿深色衣服站在白墙拍照并上传上半身就行。我要压缩照片大小,修改照片规格,更改背景颜色,并实现检查人脸图像是否符合要求,例如:人脸宽度,发顶与顶部的像素距离,双眼中部与左侧的距离等等。

问题出现的环境背景及自己尝试过哪些方法

由于要搞成网页端,Java的服务器。所以我搜索了Java的实现。发现open cv和Java Advanced Imaging。JAI没找到教程,所以使用了opencv。但是也只能搞定压缩和修改照片规格。如何实现背景色更换和校验图片呢。能否有大佬指条明路,告诉我学习什么技术能完成类似的需求。

回复
1个回答
avatar
test
2024-07-03

1.用 OpenCV 的 Java 接口来实现

import org.opencv.core.*;
import org.opencv.objdetect.CascadeClassifier;
import org.opencv.imgcodecs.Imgcodecs;
import org.opencv.imgproc.Imgproc;

public class FaceDetector {
    public static void main(String[] args) {
        System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
        CascadeClassifier faceDetector = new CascadeClassifier("path/to/haarcascade_frontalface_default.xml");
        Mat image = Imgcodecs.imread("path/to/input/image.jpg");
        MatOfRect faceDetections = new MatOfRect();
        faceDetector.detectMultiScale(image, faceDetections);
        System.out.println(String.format("Detected %s faces", faceDetections.toArray().length));
    }
}

2.照片压缩和大小修改:

Mat resizedImage = new Mat();
Size newSize = new Size(newWidth, newHeight);
Imgproc.resize(image, resizedImage, newSize);

改背景颜色可以用 OpenCV 的图像分割技术,比如 GrabCut 算法。你可以用 faceDetections 计检查人脸图像是否符合要求:

Rect face = faceDetections.toArray()[0]; // Assuming only one face is detected
int faceWidth = face.width;
int faceTop = face.y;
int faceHeight = face.height;

opencv学习资料:https://docs.opencv.org/4.x/d9/df8/tutorial_root.html

回复
likes
适合作为回答的
  • 经过验证的有效解决办法
  • 自己的经验指引,对解决问题有帮助
  • 遵循 Markdown 语法排版,代码语义正确
不该作为回答的
  • 询问内容细节或回复楼层
  • 与题目无关的内容
  • “赞”“顶”“同问”“看手册”“解决了没”等毫无意义的内容