最近做一个项目,需要用到虹软的JDK实现一个人脸识别的电脑桌面应用系统。本认为是一项很简单的事情,却踩了不少的坑,特此记录一下,方便需要的兄弟借鉴。

打开摄像头是最简单的一步,也是坑最多的一步。java中打开摄像头主要有两种方式,通过两种方式:

  • JMF
  • javacv

JMF中的坑比较多,我找了很多资料,最后成功安装之后,却发现运行出错,使用不了,也不知道是哪里的原因,所以最后还是考虑用javacv来打开摄像头
首先我们先下载javacv,最重要的就是四个文件:javacppjavacvopencvopencv-windows-x86_64。把四个文件复制一份放到项目的lib文件夹中,方便管理。然后我们在intellij IDE中导入再四个库文件:File->Project Structure->Libraries->"+"
在这里插入图片描述
然后把四个库文件分别添加进来,我们导入完成之后的情况:
在这里插入图片描述
需要注意:javacv是依赖opencv库的,因此需要自行去opencv官网下载最新版的opencv并安装。图中opencv-430便是官网下载的。

我们测试一下是否成功:

import org.bytedeco.javacv.CanvasFrame;
import org.bytedeco.javacv.Frame;
import org.bytedeco.javacv.FrameGrabber;
import org.bytedeco.javacv.OpenCVFrameGrabber;
import javax.swing.*;

public class study {


    public static void main(String[] args) throws FrameGrabber.Exception, InterruptedException {

        OpenCVFrameGrabber grabber = new OpenCVFrameGrabber(0);
        grabber.start();   //开始获取摄像头数据
        CanvasFrame canvas = new CanvasFrame("人脸检测");//新建一个窗口
        canvas.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        while(true)
        {
            if(!canvas.isEnabled())
            {//窗口是否关闭
                grabber.stop();//停止抓取
                System.exit(0);//退出
            }
            Frame frame=grabber.grab();
            canvas.showImage(frame);//获取摄像头图像并放到窗口上显示, 这里的Frame frame=grabber.grab(); frame是一帧视频图像
            Thread.sleep(50);//50毫秒刷新一次图像
        }

    }

}

运行效果

在这里插入图片描述

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐