做一个人脸识别考勤机项目(利用OpenCV)

人脸考勤机 常用解决问题办法:按照报错信息添加依赖等、仔细查看项目课件、百度报错信息编译报错//usr/lib/x86_64-linux-gnu/libopencv_core.so.3.2: 无法添加符号: DSO missing from command line多打log(printf函数)便于调试,从log分析。 阅读详情
AI摘要

本文是跟随B站视频教程做的物联网人脸识别考勤机项目笔记。介绍了在Ubuntu系统上的安装与配置,C++程序编写,OpenCV的安装与编程,包括图像采集、处理、人脸检测等。还涉及百度智能云平台接入、数据处理,最终实现考勤机功能。

0.前言

重要说明:此项目直接跟进操作的话只能在Ubuntu16.04上面编译成功!目前已经补上18.04上的编译操作。

        本文主要跟随B站Up主【物联网小学妹】上传的【从0到1做一个物联网人脸识别考勤机项目!】视频教程做一个简要笔记

视频地址:【大厂敲门砖】从0到1做一个物联网人脸识别考勤机项目!(附源码)_哔哩哔哩_bilibili

 视频对应资源(没必要下载,帮助不大): 

链接:https://pan.baidu.com/s/1rEhfDg_Yc1SMD40fGdVqhw?pwd=yjgn 
提取码:yjgn

学习所需前置条件:

        1.Linux系统安装  2.Linux操作基础  3.C++编程

我的Linux学习笔记:Linux学习笔记_Jenlibein的博客-优快云博客

C++学习跟进可以看这个:【2023最新版C++】实战项目教程,清华武老师带你零基础一套快速学会c++_哔哩哔哩_bilibili


目录

1.安装与配置

1.1下载

1.2安装

1.3中文配置

2.C++程序编写

3.OpenCV 初次认识 / 安装

3.1介绍

3.2安装

3.3更多学习

4.OpenCV编程

4.0确保摄像头打开

4.1图像采集

4.2图像处理

4.3人脸检测

4.4图像截图/图片解码和编码

5.百度智能云平台

5.1人脸库创建

5.2 SDK环境搭建

5.3百度智能云平台接入

6.数据处理

6.1Json数据解析

6.2记录考勤时间

6.3考勤信息记录及显示

7.最终实现

8.文章结束


1.安装与配置

1.1下载

视频中使用的Linux发行版为Ubuntu16.04,可以在我给出的 视频对应资源 中下载得到。

        但是,百度网盘的必须要VIP才能下载这么大的文件,不然就不知道要下载到猴年马月了。

        所以,我建议在国内镜像源中下载:ubuntu 16.04 镜像下载(国内开源镜像站)_ubuntu16.04-优快云博客

        按常理说,下载选择的文件后缀应该是【desktop-amd64.iso】,选择好下载即可。

1.2安装

        可以参考Linux学习笔记那的三个方法

1.3中文配置

        在左栏菜单选中【System Settings】

        进入设置菜单选中【Language Support】

        第一次进入会有个提示安装的窗口,点确认。

        然后点【Install / Remove Languages...】选项,进入窗口后下拉找到Chinese(simplified)并勾选,然后点Apply,进入下载。

        回到【Language Support】窗口,然后在上列菜单中,将下面的 [  汉语(中国)] 拖动到最上面位置,确保该文字由灰色 变为黑色 并处于第一位 ,然后重启电脑。

        进到中文语言的系统。

        拼音设置:可以查看Linux下使用拼音的相关教程

        

2.C++程序编写

        B站教程中用gedit进行创建文本,然后在文本里写C++代码。

        然后用

g++ file.cpp -o 输出名称

        来输出可执行文件

        

        用到第三方库时,编译时要加上链接(例如OpenCv的highgui库)

g++ main.cpp -o main -lopencv_highgui

        我认为:还是用vscode等专业的IDE来编写代码更好,有利于编写时候的视觉观看和找bug。

        编写时候主要用OpenCV库

#include "opencv2/opencv.hpp"

        并使用命名空间

using namespace cv;

3.OpenCV 初次认识 / 安装

3.1介绍

        OpenCV是一个开源的计算机视觉和机器学习软件库其使用一系列C语言函数和少量C++类实现,内部实现了很多图像处理和计算机视觉的通用算法。

        OpenCV可以运行在Linux系统上,且其轻量、高效所以在嵌入式领域得到广泛的应用。

3.2安装

终端中输入命令:

sudo apt-get install libopencv-dev

3.3更多学习

官方在线文档(深入学习使用):OpenCV - Open Computer Vision Library

网上OpenCV的教程大多数是以python作为编程语言,C++作为编程语言的教程较少。

我在B站上发现一个OpenCV的C++教程:2023年度最佳 Open Cv 学习教程,C++向!_哔哩哔哩_bilibili

当然之后也可以通过Python学习其他的OpenCV教程。

4.OpenCV编程

4.0确保摄像头打开

         如何确认Linux下有无摄像头接入:进入dev文件夹查看有无vedio文件。

        虚拟机内没有识别,需要另外设置:虚拟机设置 - USB控制器 - USB兼容性 ---> 改为USB3.0或3.1并点确定

然后在虚拟机主窗口 左上角菜单 - 虚拟机(M) - 可移动设备 - 找到摄像头设备 ---> 点击链接

如果还是不行,观察虚拟机主窗口右下角有无对应摄像头的USB图标--->有则右键 - 选择连接

4.1图像采集

库:highgui

函数:VideoCapture(摄像头开启)

摄像头设置参数:

VideoCapture cap(0);

 cap.set(CV_CAP_PROP_FRAME_WIDTH, 1080);//宽度 
 cap.set(CV_CAP_PROP_FRAME_HEIGHT, 960);//高度
 cap.set(CV_CAP_PROP_FPS, 30);//帧率 帧/秒
 cap.set(CV_CAP_PROP_BRIGHTNESS, 1);//亮度 1
 cap.set(CV_CAP_PROP_CONTRAST,40);//对比度 40
 cap.set(CV_CAP_PROP_SATURATION, 50);//饱和度 50
 cap.set(CV_CAP_PROP_HUE, 50);//色调 50
 cap.set(CV_CAP_PROP_EXPOSURE, 50);//曝光 50


获取参数:

cap.get(CV_CAP_PROP_FRAME_WIDTH);
cap.get(CV_CAP_PROP_FRAME_HEIGHT);
cap.get(CV_CAP_PROP_FPS);
cap.get(CV_CAP_PROP_BRIGHTNESS);
cap.get(CV_CAP_PROP_CONTRAST);
cap.get(CV_CAP_PROP_SATURATION);
cap.get(CV_CAP_PROP_HUE);
cap.get(CV_CAP_PROP_EXPOSURE);

库:core

函数:Mat(定义图像容器)

具体可通过代码注释了解:

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

using namespace std;
using namespace cv;

int main(){
    VideoCapture cap(0); //括号内数字代表摄像头编号,一般为0 -> 打开编号为0的摄像头并命名为cap

    if(!cap.isOpened()){ //检测是否成功打开摄像头
        cout<< "Camera open failed" <<endl;
        return -1;
    }else{
        cout<< "Camera open success" <<endl;
    }

    Mat ColorImage; //实例化一个Mat类型数据(类似于 int a)

    for(;;){
        cap >> ColorImage; //从相机获取一个新的框架(拍照)

        imshow("video",ColorImage);  //图片展示,引号内为终端窗口名称,第二个参数为显示的具体照片
    
        waitKey(100); //暂停100ms
    }//想退出循环直接在终端中按Ctrl+C
    
    return 0;
}

编译要加上库,不然会报错 

VideoCapture位于highgui
Mat位于core

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

opencv读取视频有延迟解决方法:

        opencv在摄像机每次获取的新帧时候总是先把上一次读取的帧拿出来先用,再把新帧加入缓存.

        所以要想获取最新的帧,一定要连续读两次才是当前最新的。

        也就是把 cap >> ColorImage; 重复两行。

4.2图像处理

库:imgproc - Image Processing

函数1:cvtColor(色彩转换):void cvtColor(InputArray src, OutputArray dst, int code, int dstCn=0)

第一个参数 src - source输入容器;输入图像:8位无符号,16位无符号(CV_16UC…),或单精度浮点。

第二个参数 dst - Destination输出容器,输出目标与原图像具有同样的大小与类型。

第三个参数 code

        转换方式::CV_BGR2GRAY

AI Face 人脸识别考勤机项目 ps:虚拟机安装大家参考其他博主,本文不赘述,该文中每一小节的代码部分,均是在上一个小节的基础上进行添加的,且若中途退出虚拟机,重新连接摄像头时,"VideoCapture cap();"该语句中的参数可能会发生变化,有可能是0,也有可能是1,须在终端进行一下操作进行查看,查看过程如下。 阅读详情

相关推荐

基于OpenCV的人脸识别考勤机

官网OpenCV是一个开源的计算机视觉和机器学习软件库,它可以广泛的在Windos、Linux、Mac等多种操作系统下自由使用,是一种高拓展性、轻量级的库。OpenCV基于C语言和少量C++类函数,并且提供了Matlab、Python等丰富的接口。你的支持,我的动力;祝各位前程似锦,offer不断,步步高升!!!含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新**如果你觉得这些内容对你有帮助,可以+V:Vip1104z获取!!!(备注:嵌入式)你的支持,我的动力;

lingyued的博客 768

Opencv人脸识别项目简介

Opencv人脸识别Project综述项目要求 使用opencv实现对人脸库的主成分提取(不使用PCA类),完成特征模型保存 对一张测试照片进行识别,找到图片库中和测试图片最像的图 配置说明 Opencv3.0 VS2015 Win10 配置过程网上太多了,就不做过多解释了,可以参照某个教程来做。主要的也就几步,下载Opencv,配Path,配置VC++目录的包含目录和库目录,配置链接器附加项的附

rayray17的博客 5437

Python之Opencv教程(3):人脸识别

利用Opencv识别图片中的人脸

WwLK123的博客 594

使用OpenCV在Linux中进行人脸识别

在Linux中安装OpenCV是进行计算机视觉任务的关键步骤之一。在本文中,我们将重点介绍如何使用OpenCV进行人脸识别。以上就是在Linux中使用OpenCV进行人脸识别的简单示例。OpenCV还有许多其他功能和特性,您可以进一步探索并尝试使用。安装完成后,我们可以编写Python脚本来利用OpenCV进行人脸识别。您可以在OpenCV的安装路径中找到此分类器文件。运行此脚本后,您应该会看到一个新的窗口显示出检测到的人脸。使用OpenCV在Linux中进行人脸识别。在此示例中,我们使用OpenCV的。

DevScript的博客 618

基于人脸识别的人脸考勤机实现(训练、测试、部署)

代码下载地址:下载地址 一、硬件: Windows10或11(无需GPU)或MacOS 都测试可行 普通RBG USB摄像头 二、软件: Python:3.7 opencv Dlib 二、用法: 使用python demo_full.py --{参数名}={参数值} -h, --help show this help message and exit --mode MODE 运行模式:reg,recog 对应:注册人脸、识别人脸 --id ID.

踟蹰横渡口,彳亍上滩舟。 1万+

Python+OpenCV实现的人脸识别签到考勤系统.zip

Python+OpenCV实现的人脸识别签到考勤系统,系统实现的功能: 1.人员人脸识别并完成签到/签退 2.考勤时间计算 3.保存考勤数据为CSV格式(Excel表格)

AMSR-2数据下载实战:从JAXA到LPRM的算法选择与效率优化

本文详细介绍了AMSR-2数据的下载实战,重点对比了JAXA与LPRM算法的差异及适用场景,并提供了高效下载方案和网络优化策略。通过实际案例和代码示例,帮助用户快速获取和处理AMSR-2数据,提升研究效率。

rl6adventurer的博客 691

蓝桥杯FPGA赛道积分赛

代码如下: 按键驱动 代码如下 按键驱动 代码如下: 顶层文件 按键驱动 数码管驱动 声明:本代码借鉴网络资料,如有侵权和错误请联系作者删除。我是从寒假开始备赛的,由于我基础不行,备赛过程中也是混混呃呃的,备赛效率不高,总体来说备赛不认真,有点拖拉,但是最后我也坚持备赛到了今天,在备赛过程中,即复习了旧的东西,也学到了新的东西,总结起来还是有点收获的,后天北京、天津、河北地区就要进行省赛了,我会全力以赴,不管结果怎么样,尽力就好,最后祝大家都能

weixin_69804913的博客 1988

WPS中VBA支持库安装全攻略:从报错到一键解决

VBA作为Office生态中广泛使用的宏语言,是办公自动化的重要基础。WPS表格虽然兼容Excel文件格式,但出于技术路线与授权原因,默认并未集成完整的VBA引擎与开发环境,导致用户打开含宏文件时频繁遇到“找不到工程或库”“未找到VBA支持库”等报错。理解VBA支持库包含引擎与IDE两层结构,并掌握系统位数、版本匹配、安全软件拦截等前置条件,是成功部署的关键。通过可靠的安装源与规范流程完成配置后,即可实现在WPS中运行Excel宏、批量处理数据、自定义函数等自动化场景,显著提升报表处理效率。本文围绕WPS中

weixin_31102231的博客 307

告别概念晕眩:用TC3xx SMU和TLF35584的配置实例,搞懂ASIL D功能安全落地

本文通过英飞凌TC3xx系列MCU的SMU模块与TLF35584电源管理芯片的协同配置实例,详细解析了如何实现符合ASIL D功能安全标准的刹车辅助ECU。文章涵盖SMU报警源配置、响应动作类型、TLF35584的安全状态管理,以及构建完整安全闭环的实践方法,帮助工程师将抽象的安全概念落地为具体设计方案。

weixin_30647065的博客 436

AIGC算法工程师面试八股文深度解析与进阶指南:揭秘Diffusion Models核心原理与实战技巧

总结来说,Cosine Noise Scheduler 的核心优势在于它能够更巧妙地平衡信号和噪声的比例,在扩散过程的早期阶段更长时间地保留原始图像的细节信息,从而为去噪模型提供一个更友好的学习环境,最终带来更优异的生成质量。🚀

FJN110的博客 345

FH8626V100之开发环境搭建

FH8626V100是富瀚微出的一款带摄像头的方案,开发工具在Linux 上进行。版本 Ubuntu 20.04 64位。

xue_nuo的博客 1万+

基于STFT和卷积神经网络的时序数据分类

我们提供了相应的代码和数据,读者可以直接运行并尝试在自己的数据集上进行分类实验。在本文中,我们将介绍一种基于短时傅里叶变换(STFT)和卷积神经网络(CNN)的时序数据分类方法。我们将提供可直接运行的代码和数据,以帮助读者理解和实现这一方法。STFT可以提取信号的频谱信息,有助于捕捉时序数据中的关键特征。在这个例子中,我们将使用一个简化的手势识别数据集作为示例。在这段代码中,我们使用Adam优化器和稀疏分类交叉熵损失函数进行模型的编译。然后,我们使用训练集进行模型的训练,同时使用测试集进行模型性能的验证。

CodeWOW的博客 694

倍福--RS232自由口实现

RS232/485通信协议是在现场中常用到的,比如触摸屏、温控模块等设备控控制器做通信,会常用到此类协议,本文介绍RS232/485自由口通信的实现,并用PC调试助手进行测试。 目 录 软硬件版本 3 1.1. 倍福Beckhoff 3 1.1.1. 控制器硬件 3 1.1.2. 控制器软件 3 硬件连接 3 2.1. PC COM介绍 3 2.2. RS232/RS485连接 3 3.2.1. N030…………. 4 3.2.2. N031…………. 4 2.3. 实际线路连接 5 PLC程序 7 3

weixin_41883890的博客 3284

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

上一篇: ROS学习笔记总纲目
下一篇: [oj实验] DS栈—波兰式,逆波兰式
Jenlibein
博客等级 码龄4年 187粉丝 27原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值