java高度人脸识别,再也不用受python的气了!

是不是经常看见python程序猿玩高科技,人脸识别什么听起来好像很高大上?看完这篇你再也不用吵着学python了,java也可以玩高科技,人脸识别我们也很在行!

现在比较流行的一个开源人脸识别框架是opencv,人脸识别的话有两种,一种较为简单的xml建模,一种就是比较精确的dnn

opencv使用xml建模,识别度不高,然后侧脸无法识别,所以就想到了opencv dnn,网上搜索了很久,dnn基本没有java版本的,资料太少了,弄了一天,终于把这个java版本人脸识别写出来。

public class Test01{
	public static void main(String[] args) {
	//加载c++库
	        System.load(FileUtil.getAppicationPath() + File.separator + "libs\\opencv_java410.dll");
	//加载识别文件,这两个东西在opencv-master\samples\dnn\face_detector文件里面有个download_weights.py,执行下就可以自动下载模型了
	        Net net = Dnn.readNetFromCaffe("E:\\workhome\\openct-test\\libs\\deploy.prototxt", "E:\\workhome\\openct-test\\libs\\res10_300x300_ssd_iter_140000_fp16.caffemodel");
	        //要识别的图片
	        Mat img = Imgcodecs.imread("E:\\workhome\\opencv-master\\samples\\dnn\\face_detector\\0.png");
	        //        Mat mat = new Mat();
	//        Size size = new Size(300, 300);//统一尺寸 对比更好
	//        Imgproc.resize(img, mat, size);
	//这里注意,当图片长宽小于300就会报错,所以需要判定图片大小
	        Mat inputBlob = Dnn.blobFromImage(img, 1.0f,
	                new Size(img.size().width ,img.size().height ),
	                new Scalar(124, 97, 113), false, false);
	        net.setInput(inputBlob);
	        Mat res = net.forward();
	        Mat faces = res.reshape(1, res.size(2));
	        System.out.println("faces" + faces);
	        float [] data = new float[7];
	        for (int i=0; i<faces.rows(); i++)
	        {
	            faces.get(i, 0, data);
	            float confidence = data[2];
	            if (confidence > 0.4f)
	            {
	                int left   = (int)(data[3] * img.cols());
	                int top    = (int)(data[4] * img.rows());
	                int right  = (int)(data[5] * img.cols());
	                int bottom = (int)(data[6] * img.rows());
	                System.out.println("("+left + "," + top + ")("+right+","+bottom+") " + confidence);
	                Imgproc.rectangle(img, new Point(left,top), new Point(right,bottom), new Scalar(0,200,0), 3);
	            }
	        }
	        //生成的图片名字
	        Imgcodecs.imwrite("new.png", img);
	        BufferedImage img2paint = OpenCvUtil.mat2BI(img);
	        Myframe f = new Myframe();
	        f.setSize(img2paint.getWidth() + 200, img2paint.getHeight() + 200);
	        f.draw(img2paint);
	
	 }
}

话不多说,我们来看看效果!
在这里插入图片描述

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

小明程序猿

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

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

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

打赏作者

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

抵扣说明:

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

余额充值