国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

OpenCV+Ubuntu+QT實現(xiàn)人臉檢測/識別(考勤管理)

這篇具有很好參考價值的文章主要介紹了OpenCV+Ubuntu+QT實現(xiàn)人臉檢測/識別(考勤管理)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

1. 開發(fā)環(huán)境

		Ubuntu18 + OpenCV3 + qt5

2.環(huán)境配置

1. 虛擬機安裝Ubuntu

2. 安裝qt5

OpenCV+Ubuntu+QT實現(xiàn)人臉檢測/識別(考勤管理),opencv,ubuntu,qt,物聯(lián)網(wǎng)下載完成后在下載目錄打開終端,賦予可執(zhí)行權(quán)限,再執(zhí)行即可安裝qt
sudo chmod +x qt-opensource-linux-x64-5.12.8.run
OpenCV+Ubuntu+QT實現(xiàn)人臉檢測/識別(考勤管理),opencv,ubuntu,qt,物聯(lián)網(wǎng)

3. 安裝OpenCV庫

可參考文章

4. 在QT中引用OpenCV庫

若按照上述方法安裝好opencv,創(chuàng)建測試項目,在pro文件中加入:

INCLUDEPATH += /usr/local/include //opencv頭文件安裝路徑
LIBS += /usr/local/lib/libopencv_* //opencv庫文件路徑

測試:

#include <QWidget>
#include <opencv2/core.hpp>
#include <opencv2/opencv.hpp>
#include <iostream>
#include <QMessageBox>
#include <QDebug>

using namespace std;
using namespace cv;

//widget.cpp的析構(gòu)函數(shù)
{
VideoCapture cap(0);
    if(!cap.isOpened())
        QMessageBox::warning(this,"error","open camera faild!");
    cout << "open camera success" << endl;
    Mat frame;
    cap.set(cv::CAP_PROP_FRAME_WIDTH, 640);
    cap.set(cv::CAP_PROP_FRAME_HEIGHT, 480);
    cap.set(cv::CAP_PROP_FPS, 30);


    for(;;){
        cap >> frame;
        if (frame.empty()) {
            qDebug() << "錯誤:無法捕獲幀";
            break;  // 退出循環(huán)或根據(jù)需要處理錯誤
        }
        imshow("video", frame);
        waitKey(27);
    }

}

(若出現(xiàn)警告 “VIDEOIO(V4L2:/dev/video0): select() timeout”,在虛擬機->設(shè)置->USB控制器,更改一下兼容性,更改為3.1即可解決問題)

啟動程序若正常出現(xiàn)攝像頭畫面則表明安裝配置成功。

ps:一般配置完成后你會發(fā)現(xiàn)攝像頭是反鏡像的(實際使用一般是鏡像-前置攝像頭)這是可以用flip函數(shù)來調(diào)整畫面流frame:

flip(image, flippedImage, 1): 水平翻轉(zhuǎn)
flip(image, flippedImage, 0): 垂直翻轉(zhuǎn)
flip(image, flippedImage, -1): 水平和垂直同時翻轉(zhuǎn)

flip 函數(shù)有三個參數(shù),分別是:

**image:**輸入圖像,即需要進行翻轉(zhuǎn)的原始圖像。

**flippedImage:**輸出圖像,即翻轉(zhuǎn)后的圖像將存儲在這里。

這里使用 flip(frame, frame, 1);即可改變原圖形

3. 人臉檢測

1.圖像處理

  1. 將攝像頭畫面由rgb(彩色)轉(zhuǎn)換為gray(灰度圖)
    #include <opencv2/imgproc.hpp>		//所需頭文件
    #include <opencv2/objdetect.hpp>
    cvtColor(frame,Grayimage,CV_BGR2GRAY);//將彩色圖轉(zhuǎn)換從灰度圖 其中frame是初始Mat容器所存放的畫面流,
                                          //Grayimage是轉(zhuǎn)換后的圖像 CV_BGR2GRAY是參數(shù)
  1. 圖形均衡化(調(diào)整亮度,對比度)
equalizeHist(InputArray src,OutputArray dst); //函數(shù)參數(shù)說明
equalizeHist(Grayimage,Grayimage);      //進行均衡化處理,將處理后的圖形進行覆蓋(節(jié)約內(nèi)存)

2.人臉輪廓檢測

  1. 加載級聯(lián)分類器(CascadeClassifier)(關(guān)于級聯(lián)分類器相關(guān)可參考)
Ubuntu:/usr/share/opencv/haarcascades$ ls
haarcascade_eye_tree_eyeglasses.xml
haarcascade_eye.xml
haarcascade_frontalcatface_extended.xml
haarcascade_frontalcatface.xml
haarcascade_frontalface_alt2.xml
haarcascade_frontalface_alt_tree.xml
haarcascade_frontalface_alt.xml
haarcascade_frontalface_default.xml
haarcascade_fullbody.xml
haarcascade_lefteye_2splits.xml
haarcascade_licence_plate_rus_16stages.xml
haarcascade_lowerbody.xml
haarcascade_profileface.xml
haarcascade_righteye_2splits.xml
haarcascade_russian_plate_number.xml
haarcascade_smile.xml
haarcascade_upperbody.xml

//這里我們使用OpenCV訓(xùn)練好的級聯(lián)分類器進行人臉輪廓檢測,可在構(gòu)造函數(shù)中聲明即可
    classifier.load("/usr/share/opencv/haarcascades/haarcascade_frontalface_alt.xml");

    if (classifier.empty()) {
        qDebug() << "錯誤:無法加載級聯(lián)分類器文件";
    }

/* 
detectMultiScale(InputArray image,vector<Rect>& objects)	檢測函數(shù)說明
rectangle (InputOutputArray img,Point pt1,Point pt2,constScalar& color)	將檢測到的人臉矩形框繪制在圖形上的函數(shù)說明
*/

//具體使用:
	vector<Rect> Allface;           //矩形存放容器
//這里我們使用OpenCV庫中已經(jīng)訓(xùn)練好的級聯(lián)分類器進行人臉輪廓的識別
    classifier.detectMultiScale(Grayimage,Allface);      //檢測人臉矩形存放到vector容器中
     if(Allface.size()){ //是否存在人臉
        rectangle(Grayimage,Allface[0],Scalar(255,0,0));   //Allce中存放多個矩形(多張人臉,按照數(shù)組形式排列 Scalar改變顏色(rgb)
    }


上述僅為關(guān)鍵代碼
OpenCV+Ubuntu+QT實現(xiàn)人臉檢測/識別(考勤管理),opencv,ubuntu,qt,物聯(lián)網(wǎng)

  1. 將檢測的人臉矩形框保存
//先創(chuàng)建一個Mat容器用于存放截取到的矩形人臉框
 Mat Matface;   //存放檢測的人臉矩形框
 vector<uchar> JpgFace;   //存放jpg格式的圖形

 if(Allface.size()){ //是否存在人臉
        rectangle(Grayimage,Allface[0],Scalar(255,0,0));    //Allce中存放多個矩形(多張人臉,按照數(shù)組形式排列 Scalar改變顏色(rgb)
        Matface = Grayimage(Allface[0]);                    //將截取的人臉存放到Matface中
        imencode(".jpg",Matface,JpgFace);                   //將Matface中的圖片轉(zhuǎn)化成jpg格式
    }
    
//imencode函數(shù)說明:
imencode(const String &ext,InputArray img,vector<uchar> &buf)

3.百度智能云平臺注冊

  1. 注冊百度智能云平臺
    進入官網(wǎng)>產(chǎn)品>人臉識別>人臉搜索 官網(wǎng)鏈接
    OpenCV+Ubuntu+QT實現(xiàn)人臉檢測/識別(考勤管理),opencv,ubuntu,qt,物聯(lián)網(wǎng)OpenCV+Ubuntu+QT實現(xiàn)人臉檢測/識別(考勤管理),opencv,ubuntu,qt,物聯(lián)網(wǎng)

立即創(chuàng)建即可

OpenCV+Ubuntu+QT實現(xiàn)人臉檢測/識別(考勤管理),opencv,ubuntu,qt,物聯(lián)網(wǎng)

即可在應(yīng)用列表查看到自己的接口信息

  1. 創(chuàng)建人臉庫
    OpenCV+Ubuntu+QT實現(xiàn)人臉檢測/識別(考勤管理),opencv,ubuntu,qt,物聯(lián)網(wǎng)

選擇查看人臉庫即可自定義添加組和人員,上傳清晰人臉照即可

4.SDK環(huán)境搭建

  1. 技術(shù)文檔 > SDK文檔 > C++文檔 > 按照流程下載人臉識別SDK到Ubuntu中(具體流程可參考文檔)
    OpenCV+Ubuntu+QT實現(xiàn)人臉檢測/識別(考勤管理),opencv,ubuntu,qt,物聯(lián)網(wǎng)
  2. 安裝依賴庫libcurl(需要支持https)openssl(加密) jsoncpp
sudo apt-get install libcurl4-openssl-dev
sudo apt-get install openssl
sudo apt-get install libjsoncpp-dev
  1. 將下載好的SDK解壓,并將其base文件夾以及face.h(人臉檢測只需這兩個文件)文件復(fù)制到你的項目中參考文檔
    OpenCV+Ubuntu+QT實現(xiàn)人臉檢測/識別(考勤管理),opencv,ubuntu,qt,物聯(lián)網(wǎng)

這里編譯可能會出現(xiàn)報錯找不到j(luò)son和openssl路徑,點擊錯誤代碼行,將其改為
#include <jsoncpp/json/json.h>
#include "jsoncpp/json/json.h"
(即改變路徑,在前面加上jsoncpp)
并安裝libssl庫
sudo apt-get install libssl-dev

LIBS += -lcurl -lcrypto -ljsoncpp	//在pro文件中加入

并在程序中引入頭文件和命名空間

#include <face.h>
using namespace aip;

5.平臺接入

  1. 建立交互客戶端client
	//頭文件中先聲明client指針類型對象,再在構(gòu)造函數(shù)中實例化賦值(使用完后需要用delete client進行銷毀)
	//widget.h
    Face *client;            //創(chuàng)建客戶端對象

	//widget.cpp
    //建立百度交互客戶端client
    // 設(shè)置APPID/AK/SK
    string app_id = "你自己的";
    string api_key = "你自己的";
    string secret_key = "你自己的";

    client = new Face(app_id,api_key,secret_key);
  1. 格式轉(zhuǎn)換

梳理一下我們的攝像頭捕捉流程

frame(初始的彩色視頻幀流) > Grayimage(灰度化)> Matface(存放截取的人臉矩形)> JpgFace(人臉矩形圖片轉(zhuǎn)化為JPG格式)> Base64Fce(轉(zhuǎn)化為base64格式-百度人臉識別要求的格式)>>>>

//widget.h
//先在頭文件的private中聲明一個容器存放base64格式的圖片
string Base64Face;               //用于存放轉(zhuǎn)換成base64格式的照片

//widget.cpp
Base64Face =  base64_encode((char *)JpgFace.data(),JpgFace.size());   //將jpg格式的圖片轉(zhuǎn)化為base64格式的
  1. 接收檢測結(jié)果
//widget.h
 Json::Value result;             //用于接受檢測結(jié)果的容器


// 帶參數(shù)調(diào)用人臉搜索函數(shù)說明
//result = client.face_search_v3(image, image_type, group_id_list, options);

result =  client->face_search_v3(Base64Face,"BASE64","student",Json::nullValue);
cout << result <<endl;	//打印測試結(jié)果

這里如果報錯multiple definition (多重定義):可以將出現(xiàn)多重定義的函數(shù)定義為static(靜態(tài)函數(shù))

6.驗證檢測結(jié)果

OpenCV+Ubuntu+QT實現(xiàn)人臉檢測/識別(考勤管理),opencv,ubuntu,qt,物聯(lián)網(wǎng)

可以看到控制臺已經(jīng)輸出JSON格式的數(shù)據(jù),并且檢測成功

7.解析數(shù)據(jù)

  1. json解析
//result返回json數(shù)據(jù)格式
{
	"cached" : 0,
	"error_code" : 0,
	"error_msg" : "SUCCESS",
	"log_id" : 2660475389,
	"result" : 
	{
		"face_token" : "952d7830427201926483ab1f02f015b8",
		"user_list" : 
		[
			{
				"group_id" : "student",
				"score" : 80.822387695312003,
				"user_id" : "yyqx",
				"user_info" : ""
			}
		]
	},
	"timestamp" : 1705394660
}
        if(!result["result"].isNull())  //發(fā)送來的數(shù)據(jù)中result不為空(檢測到人臉)
        {
            if(result["result"]["user_list"][0]["score"].asInt() >= 88)    //提取數(shù)據(jù)中的score信息(匹配度高才算成功)
            {
                QString name = QString::fromStdString(result["result"]["user_list"][0]["user_id"].asString());  //將姓名轉(zhuǎn)化成Qstring類型以便提示
                QMessageBox::information(this,"歡迎!",name+"打卡成功!");
 
            }

            else  if(result["result"]["user_list"][0]["score"].asInt() < 88) {  //未在人臉庫中
                QMessageBox::information(this,"歡迎!","人員未注冊,請聯(lián)系管理員!");
            }
        }

jsoncpp的解析可參考
這里已經(jīng)實現(xiàn)了人臉檢測+識別+數(shù)據(jù)解析文章來源地址http://www.zghlxwxcb.cn/news/detail-813312.html

  1. 獲取系統(tǒng)時間
//widget.h
#include <QDateTime>
QDateTime currenttime;        //獲取時間

//更新后
 if(!result["result"].isNull())  //發(fā)送來的數(shù)據(jù)中result不為空(檢測到人臉)
        {
            if(result["result"]["user_list"][0]["score"].asInt() >= 88)    //提取數(shù)據(jù)中的score信息(匹配度高才算成功)
            {
                currenttime = QDateTime::currentDateTime(); // 獲取當前時間
                QString checktime = currenttime.toString("yyyy-MM-dd hh:mm:ss"); // 將時間轉(zhuǎn)換為字符串

                QString name = QString::fromStdString(result["result"]["user_list"][0]["user_id"].asString());  // 將姓名轉(zhuǎn)化成QString類型以便提示
                QMessageBox::information(this, "歡迎!", name + "打卡成功!" + checktime);

            }

            else  if(result["result"]["user_list"][0]["score"].asInt() < 88) {  //未在人臉庫中
                QMessageBox::information(this,"歡迎!","人員未注冊,請聯(lián)系管理員!");
            }
        }
  1. 效果
    OpenCV+Ubuntu+QT實現(xiàn)人臉檢測/識別(考勤管理),opencv,ubuntu,qt,物聯(lián)網(wǎng)

到了這里,關(guān)于OpenCV+Ubuntu+QT實現(xiàn)人臉檢測/識別(考勤管理)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔相關(guān)法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 基于OpenCV+Keras+tensorflow 實現(xiàn)的變電站作業(yè)管控平臺源代碼。含人臉識別考勤,移動目標跟蹤,越線檢測,安全措施檢測,姿態(tài)識別等功能

    基于OpenCV+Keras+tensorflow 實現(xiàn)的變電站作業(yè)管控平臺源代碼。含人臉識別考勤,移動目標跟蹤,越線檢測,安全措施檢測,姿態(tài)識別等功能

    #綜述 使用該作業(yè)現(xiàn)場安全生產(chǎn)智能管控平臺來實現(xiàn)變電站的安全生產(chǎn)的智能化管理,通過人臉識別功能進行人員的考勤; 通過人員、車輛的檢測和識別來實現(xiàn)變電站的智能化管理;通過安全行為識別和安全區(qū)域報警功能來實現(xiàn)對變電站內(nèi)人員和設(shè)備安全的監(jiān)督; 完整代碼下

    2024年02月10日
    瀏覽(23)
  • Ubuntu下的Opencv識別人臉#采用百度智能云平臺方案#人臉識別考勤機#C++

    Ubuntu下的Opencv識別人臉#采用百度智能云平臺方案#人臉識別考勤機#C++

    #簡介:這是在ubuntu22.04里面使用opencv打開攝像頭,通過攝像頭獲取圖像并截取人臉圖像,再將人臉圖像轉(zhuǎn)換成百度智能云平臺所能接受的base64格式(當然也有其他格式),將base64格式的人臉圖像發(fā)送給百度智能云,通過智能云平臺的計算得到圖像的匹配信息,本機接收到信息

    2024年02月20日
    瀏覽(27)
  • 做一個人臉識別考勤機項目(利用OpenCV)

    做一個人臉識別考勤機項目(利用OpenCV)

    重要說明 :此項目直接跟進操作的話只能在Ubuntu16.04上面編譯成功!目前已經(jīng)補上18.04上的編譯操作。 ????????本文主要跟隨B站Up主【物聯(lián)網(wǎng)小學(xué)妹】上傳的【從0到1做一個物聯(lián)網(wǎng)人臉識別考勤機項目!】視頻教程做一個簡要筆記 視頻地址:【大廠敲門磚】從0到1做一個物

    2024年04月22日
    瀏覽(25)
  • python人臉識別考勤系統(tǒng) 考勤簽到系統(tǒng) OpenCV 大數(shù)據(jù) 畢業(yè)設(shè)計(源碼)?

    python人臉識別考勤系統(tǒng) 考勤簽到系統(tǒng) OpenCV 大數(shù)據(jù) 畢業(yè)設(shè)計(源碼)?

    畢業(yè)設(shè)計:2023-2024年計算機專業(yè)畢業(yè)設(shè)計選題匯總(建議收藏) 畢業(yè)設(shè)計:2023-2024年最新最全計算機專業(yè)畢設(shè)選題推薦匯總 ?? 感興趣的可以先收藏起來,點贊、關(guān)注不迷路,大家在畢設(shè)選題,項目以及論文編寫等相關(guān)問題都可以給我留言咨詢,希望幫助同學(xué)們順利畢業(yè)?。

    2024年02月19日
    瀏覽(95)
  • C語言實現(xiàn)學(xué)生考勤管理系統(tǒng)

    C語言實現(xiàn)學(xué)生考勤管理系統(tǒng)

    題目要求:

    2024年02月11日
    瀏覽(28)
  • Java實現(xiàn)的企業(yè)員工考勤管理系統(tǒng)

    Java實現(xiàn)的企業(yè)員工考勤管理系統(tǒng)

    目錄 一、引言 2 編寫目的 2 項目背景 2 二、總體設(shè)計 3 2.1運行要求 3 2.2接口設(shè)計 3 2.3構(gòu)架設(shè)計 3 2.4基本設(shè)計概念和處理流程 3 2.5結(jié)構(gòu) 5 2.6功能需求與各模塊之間關(guān)系 6 2.6.1基本信息管理模塊 6 2.6.2個人出勤管理模塊 10 2.6.3出勤管理模塊 14 三、數(shù)據(jù)的邏輯描述 17 3.1 靜態(tài)數(shù)據(jù)

    2024年02月09日
    瀏覽(24)
  • 基于SSM的學(xué)生考勤管理系統(tǒng)的設(shè)計與實現(xiàn)

    基于SSM的學(xué)生考勤管理系統(tǒng)的設(shè)計與實現(xiàn)

    項目描述 臨近學(xué)期結(jié)束,還是畢業(yè)設(shè)計,你還在做java程序網(wǎng)絡(luò)編程,期末作業(yè),老師的作業(yè)要求覺得大了嗎?不知道畢業(yè)設(shè)計該怎么辦?網(wǎng)頁功能的數(shù)量是否太多?沒有合適的類型或系統(tǒng)?等等。這里根據(jù)疫情當下,你想解決的問題,今天給大家介紹一篇基于SSM的學(xué)生考勤管理系

    2024年02月05日
    瀏覽(28)
  • Python基于 opencv 的人臉識別考勤系統(tǒng)(V1.0),附源碼

    Python基于 opencv 的人臉識別考勤系統(tǒng)(V1.0),附源碼

    博主介紹:?程序員徐師兄、7年大廠程序員經(jīng)歷。全網(wǎng)粉絲12W+、csdn博客專家、掘金/華為云/阿里云/InfoQ等平臺優(yōu)質(zhì)作者、專注于Java技術(shù)領(lǐng)域和畢業(yè)項目實戰(zhàn)? ?? 文末獲取源碼聯(lián)系 ?? ???? 精彩專欄推薦訂閱???? 不然下次找不到喲 2022-2024年最全的計算機軟件畢業(yè)設(shè)計選

    2024年03月26日
    瀏覽(31)
  • java項目分享 - 基于opencv、dilb的員工人臉識別考勤系統(tǒng)

    java項目分享 - 基于opencv、dilb的員工人臉識別考勤系統(tǒng)

    基于opencv、dilb的員工人臉識別考勤系統(tǒng) 提示:適合用于課程設(shè)計或畢業(yè)設(shè)計,工作量達標,源碼開放 選題“員工刷臉考勤”,要求采用python語言開發(fā),可以通過攝像頭添加員工面部信息,這里就涉及到兩個具體的個問題,一個是應(yīng)該以什么樣的數(shù)據(jù)來標識每一個員工的面部

    2024年01月17日
    瀏覽(27)
  • 人工智能-OpenCV+Python實現(xiàn)人臉識別(人臉檢測)

    在OpenCV中使用Haar特征檢測人臉,那么需要使用OpenCV提供的xml文件(級聯(lián)表)在haarcascades目錄下。這張級聯(lián)表有一個訓(xùn)練好的AdaBoost訓(xùn)練集。首先要采用樣本的Haar特征訓(xùn)練分類器,從而得到一個級聯(lián)的AdaBoost分類器。Haar特征值反映了圖像的灰度變化情況。例如:臉部的一些特征

    2024年02月06日
    瀏覽(91)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包