基于OpenCV的人脸识别考勤系统(一)

        本文旨在叙述我基于OpenCV和百度智能云的人脸识别考勤项目, 根据此系列, 应该可以复现出完整的项目。

        该项目是在Ubuntu 16.04系统下使用OpenCV技术进行开发的,如果想要成功复现,最好保证系统环境一致,本人尝试了Ubuntu 20.04版本,但是会出现一系列错误,故使用16.04版本的Ubuntu。该系统的下载安装在此不多赘述,请读者自行安装。

目录

一、项目原理介绍

二、提前准备

1. OpenCV库文件的安装

2. 虚拟机的配置

三、调用摄像头读取视频

1. 调用摄像头

         2. 显示视频


一、项目原理介绍

  1. 图像采集:使用代码来调用摄像头,进行图像的采集
  2. 人脸检测:使用OpenCV集成的文件,在采集到的图像中进行人脸的识别
  3. 上传数据:将脸部数据上传到百度智能云进行比对
  4. 收集结果:收集百度智能云比对的人脸结果,将人脸信息输入到图像上

项目最后的结果如下:

 

二、提前准备

1. OpenCV库文件的安装

首先,我们需要安装OpenCV库,在命令行里面敲入

sudo apt-get install libopencv-dev

安装好这个文件后,我们使用如下命令来查看安装的版本

dpkg -s libopencv-dev

可以看到,我安装的版本是2.4.9

接下来,在OpenCV的官网上找到对应版本的官方文档,之后我们的开发都将基于该文档

2. 虚拟机的配置

由于虚拟机需要调用电脑的摄像头,因此需要配置好

 首先在VMware的虚拟机设置里面将USB适配改为大于3.0的标准

接下来,将电脑摄像头连接到虚拟机上,如图:

选择自己电脑型号的摄像头,并连接,连接成功后,在Ubuntu的终端中依次输入:

cd /dev
ls

 如果看到video0则说明摄像头连接成功

 

三、调用摄像头读取视频

1. 调用摄像头

我们进入官方文档中highgui部分,再选择videocapture部分,那里有我们想要的文档说明

下面这个图详细说明了VideoCapture类是如何使用的。我们复制官方代码,再加上C++的头文件等基本信息,形成我们的main.cpp,代码如下:

 

#include <iostream>
#include "opencv2/opencv.hpp"

using namespace std;
using namespace cv;

int main()
{
    VideoCapture cap(0); // open the default camera
    if(!cap.isOpened())  // check if we succeeded
    {    
        cout<<"Camera open failed!"<<endl;
        return -1;
    }
    cout<<"Camera open successfully!"<<endl;

    
    return 0;
}

 这段代码由于调用摄像头,当然,只是输出是否成功,并没有显示视频。接下来编译运行:

g++ main.cpp -o main -lopencv_highgui
//因为调用了OpenCV第三方库的highgui,所以编译时要加以链接
//之后新加了别的库文件的话,还需要使用-l**** 来加以链接

 返回结果为"Camera open successfully!"

2. 显示视频

还是那个参考文档里面。因为要显示视频,我们需要循环将摄像头采集到的图片展示出来。在OpenCV中有个类Mat,可以用来存储图像数据,所以我们使用Mat声明一个对象img,来储存采集到的图像数据,代码如下:

#include <iostream>
#include "opencv2/opencv.hpp"

using namespace std;
using namespace cv;

int main()
{
    VideoCapture cap(0); // open the default camera
    if(!cap.isOpened())  // check if we succeeded
    {    
        cout<<"Camera open failed!"<<endl;
        return -1;
    }
    cout<<"Camera open successfully!"<<endl;
    
    Mat img;
    for(;;)
    {
        cap >> img; // get a new img from camera
        imshow("video", img); //在video窗口中展示图片 
        waitKey(40); //设置帧率(40ms读取一帧)
    }
    
    return 0;
}

值得注意的是,原编译命令会报错,显示我们没有添加libopencv_core,这是因为Mat类是在core中的(大家可以在官方文档的core里面找到Mat类),所以此时的编译命令为:

g++ main.cpp -o main -lopencv_highgui -lopencv_core

此时编译通过,之后./main执行代码, 就可以显示出摄像头读取的视频了

第一部分先写这么多吧...

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值