opencv for java实现人脸检测

部署运行你感兴趣的模型镜像

    opencv是一个很优秀的图像处理框架,可以通过源码编译,让他支持java开发,这里如果在windows下开发,可以直接使用opencv-453.jar和opencv_java452.dll动态库就够了。

    下面给出一个简单的代码,实现人脸检测,所谓人脸检测,就是从一个图片或者视频里面找到人脸,一般我们测试,会直接把检测到的人脸轮廓标识出来,这样就表示我们检测成功了。

    代码需要使用机器学习训练好的人脸模型数据haarcasecade_frontalface_alt.xml,这个文件在很多地方都可以下载。

    don't talk, show me the code:

import org.opencv.core.*;
import org.opencv.imgcodecs.Imgcodecs;
import org.opencv.imgproc.Imgproc;
import org.opencv.objdetect.CascadeClassifier;
import java.net.URL;
public class FaceDetectDemo {
    public static void main(String[] args) {
        URL url = null;
        String os = System.getProperty("os.name");
        if(os.startsWith("Linux")){
            url = ClassLoader.getSystemResource("opencvlib/libopencv_java452.so");
        }else{
            url = ClassLoader.getSystemResource("opencvlib/opencv_java452.dll");
        }
        System.load(url.getPath());
        String path = "D:/java/workspaces/qrcodedemo/haarcascade_frontalface_alt.xml";
        String imgPath = "C:/Users/86159/Pictures/face.jpg";
        CascadeClassifier faceDetector = new CascadeClassifier(path);
        Mat image = Imgcodecs.imread(imgPath);
        MatOfRect faceDetections = new MatOfRect();
        faceDetector.detectMultiScale(image,faceDetections);
        System.out.println(String.format("Detected %s faces",faceDetections.toArray().length));
        for(Rect rect:faceDetections.toArray()){
            Imgproc.rectangle(image,new Point(rect.x,rect.y),new Point(rect.x+rect.width,rect.y+rect.height),new Scalar(0,255,0));
        }
        String out = "output.png";
        System.out.println(String.format("Writing %s",out));
        boolean flag = Imgcodecs.imwrite(out,image);
        System.out.println("done->"+flag);
    }
}

    运行代码,会加载face.jpg,然后根据人脸检测的结果,生成一个新的图片,图片中会使用矩形表示出人脸的轮廓。

    原图face.jpg:

    output.png

    这里使用的是绿色1px的线条,可能看的不是很清晰,但是仔细看,图片中的人脸的确是被标识出来了。

    这里给出的代码,没有详细说明opencv-453.jar怎么引入工程的,以及opencv_java453.dll怎么放到工程里面。 其实jar只需要加入开发工具classpath,dll文件放到合适的位置,程序能够像读文件一样读取到就可以了。

    在开发中,遇到这样的问题:

/D:/java/workspaces/qrcodedemo/target/classes/haarcascade_frontalface_alt.xml
Exception in thread "main" CvException [org.opencv.core.CvException: cv::Exception: OpenCV(4.5.2) C:\Users\hlw\Desktop\opencv\opencv\modules\objdetect\src\cascadedetect.cpp:1689: error: (-215:Assertion failed) !empty() in function 'cv::CascadeClassifier::detectMultiScale'
]
	at org.opencv.objdetect.CascadeClassifier.detectMultiScale_5(Native Method)
	at org.opencv.objdetect.CascadeClassifier.detectMultiScale(CascadeClassifier.java:255)
	at FaceDetectDemo.main(FaceDetectDemo.java:23)

    我的项目路径可能比较长,然后把训练模型文件haarcascade_frontalface_alt.xml放在资源文件路径下,最后加载的路径就成了:/D:/java/workspaces/qrcodedemo/target/classes/haarcascade_frontalface_alt.xml,运行程序报错,后来把这个文件提出来,放到项目路径下,运行不报错。

     有的文章说,这个训练模型文件的路径 不能带中文,我这里是路径太长。另外,我下载的模型文件好像不全,也报过这个错误。大家在编码的时候注意一下。

您可能感兴趣的与本文相关的镜像

ACE-Step

ACE-Step

音乐合成
ACE-Step

ACE-Step是由中国团队阶跃星辰(StepFun)与ACE Studio联手打造的开源音乐生成模型。 它拥有3.5B参数量,支持快速高质量生成、强可控性和易于拓展的特点。 最厉害的是,它可以生成多种语言的歌曲,包括但不限于中文、英文、日文等19种语言

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

luffy5459

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值