javacpp 人脸_『 JavaCV 』JavaCV之调用本机摄像头

最近学习用java语言如何进行人脸识别的功能,人脸检测有助于在任何数字图像上识别人脸,在做了一些研究后,我发现OpenCV的库可以帮我检测图像中的人脸,所以接触到了opencv这门技术。

什么是opencv? OpenCV(Open Source Computer Vision) 是一个开源的计算机视觉算法库。是用C/C++写的,旨在发挥多核心的优势。它提供C++、C、Python和Java的接口,并支持所有主流操作系统平台,包括Windows、Linux、Mac OS、iOS及Android。

1.写在前面的话

因为博主在用java开发人脸识别功能时走了不少的弯路,所以有些话我要写在前面,避免你走不少的弯路:

1.因为opencv是用c++写的,所以你要是打算用c++或者python在opencv上进行开发,那么你首先需要的就是在自己的电脑上搭建opencv的开发环境,若是mac系统搜”mac下opencv的搭建”,windows系统搜”windows下opencv的搭建”即可。若是你真的采用上面所说的两种语言开发的,那么本篇文章你就可以跳过去了,因为本篇文章是在java环境下描述的。

2.如果你像我一样打算用java去完成人脸识别,那么恭喜你,opencv的环境就不用你亲自动手去搭建了,本篇文章也很适合你。或许有人会问:opencv是用c++写的嘛,所以自然而言我们要用c++去调用它的相关方法嘛,那么用java如何调用呢?opencv是从2.2.4版本开始后就提供了java语言编写的相关接口,使得java开发人员可以通过JNI去调用opencv的相关库,这里有个很酷的库叫javacv,从javacv0.8版本以后,就完全将opencv的功能封装在自己的库中,所以我们可以直接通过引用opencv对应的系统平台的引用包而不用再搭建繁琐的opencv环境咯。首先点击链接下载javacv中所有的jar包,解压后里面有所有的javacv开发的相关jar包,本篇文章我们需要的jar包只有4个:opencv.jar、javacv.jar、javacpp.jar、opencv-macosx-x86_64.jar(这个jar包要跟自己的操作系统相同,你要是是windows系统就选择相应的opencv-windows-x86_64位或者32位jar包),其他的jar包当遇到时我会再说。

这里说说我遇到的坑,网上很多关于javacv的搭建环境的教程,然后都是大同小异先教你搭建opencv的环境,然后给你一个实例让你测试自己的opencv环境是否成功搭建。说到这里我就想骂人了,那些教需要在电脑上搭建opencv环境的,你不知道javacv0.8版本之后就不用再搭建opencv的环境了吗?麻烦你知道了就快点把博客内容改改吧,不要再耽误我们这些java开发人员的时间了好吗?我看了你们的教程可是关搭建opencv的环境就浪费了两天时间…

另外本篇文章是在mac环境下运行的,windows系统也同样能参考我这篇文章。

2.准备环境

1.相关jar包,本篇文章只需要4个jar包即可:

mac系统:javacpp.jar,javacv.jar,opencv.jar,opencv-macosx-x86_64.jar。

windows系统:javacpp.jar,javacv.jar,opencv.jar,oepncv-windows-x86_64.jar(或者oepncv-windows-x86.jar)。

Linux系统:javacpp.jar,javacv.jar,opencv.jar,,opencv-linux-x86_64.jar。

2.貌似准备环境只需要上述四个jar包即可。。。本地opencv的环境已不再需要你在自己的电脑上搭建。。。当然开发工具eclipse和IDEA都可以。

3.Demo:java通过javacv获取本机电脑摄像头

好了废话不要那么多,直接开始coding吧。新建一个java项目,普通项目即可,创建一个JavacvCameraTest.java,代码如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25//import相关类

public class JavacvCameraTest

{

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

{

OpenCVFrameGrabber grabber = new OpenCVFrameGrabber(0);

grabber.start(); //开始获取摄像头数据

CanvasFrame canvas = new CanvasFrame("摄像头");//新建一个窗口

canvas.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

canvas.setAlwaysOnTop(true);

while(true)

{

if(!canvas.isDisplayable())

{//窗口是否关闭

grabber.stop();//停止抓取

System.exit(2);//退出

}

canvas.showImage(grabber.grab());//获取摄像头图像并放到窗口上显示, 这里的Frame frame=grabber.grab(); frame是一帧视频图像

Thread.sleep(50);//50毫秒刷新一次图像

}

}

}

然后运行程序,过不了几秒神奇的事就会发生了…我说几秒钟你会出现在你自己的电脑屏幕上你信吗。

后话:本来上级布下任务,要使用javacv完成人脸识别的功能。老实说,用javacv这个东西完全没有人带,网上资料少之又少,可是没办法,领导布置的任务必须要完成。所以自己确实走了不少的弯路,希望总结下来为你解决不少的问题。

当然这里又会有人问,既然是要用javacv做视频流转换成图片的功能,那这篇文章为啥要写用它调用本机摄像头的功能实现呢?亲,你总得先学会使用它的相关API吧!期待我下篇关于javacv的相关API的文章请点击JavaCV+FFmpeg实现推流和拉流

若是我没有更新,请参考某位大神写的关于javacv的系列文章,javacv开发详解之1:调用本机摄像头视频,还有详解2、详解3…详解7,很有参考价值!

2018.3.19更

欢迎加入我的Java交流1群:659957958。

2018.4.21更:如果群1已满或者无法加入,请加Java学习交流2群:305335626 。

4.联系

If you have some questions after you see this article,you can tell your doubts in the comments area or you can find some info by clicking these links.

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值