首页 > 解决方案 > 使用 OpenImaj 进行 Java 人脸检测

问题描述

我正在尝试实现一个检查 png 图像是否包含人脸的功能。我正在尝试使用 OpenImaj 并注意到它有 4 个检测器(Identity、Haar 等)

感谢是否有人可以分享相关的代码片段

标签: javaopencvimage-processing

解决方案


import java.io.File;
import java.io.IOException;
import java.util.Iterator;
import java.util.List;
import org.openimaj.image.DisplayUtilities;
import org.openimaj.image.FImage;
import org.openimaj.image.ImageUtilities;
import org.openimaj.image.MBFImage;
import org.openimaj.image.colour.RGBColour;
import org.openimaj.image.colour.Transforms;
import org.openimaj.image.processing.face.detection.DetectedFace;
import org.openimaj.image.processing.face.detection.FaceDetector;
import org.openimaj.image.processing.face.detection.HaarCascadeDetector;
import org.openimaj.math.geometry.shape.Rectangle;


public class App {
    public static void main(String[] args) throws Exception, IOException {


        final MBFImage image = ImageUtilities.readMBF(new File("d:\\java\\face\\bin.jpeg"));

        FaceDetector<DetectedFace, FImage> fd = new HaarCascadeDetector(200);
        List<DetectedFace> faces = fd.detectFaces(Transforms.calculateIntensity(image));
        System.out.println("# Found faces, one per line.");
        System.out.println("# <x>, <y>, <width>, <height>");

        for (Iterator<DetectedFace> iterator = faces.iterator(); iterator.hasNext();) {
            DetectedFace face = iterator.next();
            Rectangle bounds = face.getBounds();

            image.drawShape(face.getBounds(), RGBColour.RED);

            // System.out.println(bounds.x + ";" + bounds.y + ";" + bounds.width + ";" +
            // bounds.height);

        }

        DisplayUtilities.display(image);

    }
}

推荐阅读