0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

QT+OpenCV人臉識(shí)別—米爾iMX8MPlus開(kāi)發(fā)板項(xiàng)目

米爾MYIR ? 來(lái)源:米爾MYIR ? 作者:米爾MYIR ? 2022-05-18 18:00 ? 次閱讀

本篇測(cè)評(píng)由電子工程世界的優(yōu)秀測(cè)評(píng)者“流行科技”提供。

此次測(cè)試的開(kāi)源項(xiàng)目,是基于QT+OpenCV的人臉識(shí)別打卡項(xiàng)目。本次體驗(yàn)使用的是開(kāi)源的代碼,此代碼本來(lái)是運(yùn)行在WIN下的,為了測(cè)試稍微進(jìn)行了修改,讓其運(yùn)行在米爾iMX8M Plus開(kāi)發(fā)板上。

poYBAGKEwi6AY9jwAABTf11XXg4829.png

測(cè)試項(xiàng)目實(shí)際是分了兩個(gè)工程,一個(gè)工程是作為管理員控制功能使用,添加人臉信息。同時(shí)也可以查詢到打卡記錄,對(duì)從機(jī)進(jìn)行下發(fā)通知等等。

人臉識(shí)別我們主要需要用到opencv的人臉檢測(cè)分類器。

pYYBAGKEwkeAMzq1AACDsGszgqw686.png

OpenCV編譯完成后已經(jīng)提供好了的。

因?yàn)檫@里還需要涉及到訓(xùn)練模型,有了模型后才能更好地識(shí)別,所以還是簡(jiǎn)單介紹下怎么訓(xùn)練的吧。

CascadeClassifier cascada;

//將opencv官方訓(xùn)練好的人臉識(shí)別分類器拷貝到自己的工程目錄中

cascada.load("F:videoccchaarcascade_frontalface_alt2.xml");

VideoCapture cap(1); //0表示電腦自帶的,如果用一個(gè)外接攝像頭,將0變成1

Mat frame, myFace;

int pic_num = 1;

while (1) {

//攝像頭讀圖像

cap >> frame;

vector faces;//vector容器存檢測(cè)到的faces

Mat frame_gray;

cvtColor(frame, frame_gray, COLOR_BGR2GRAY);//轉(zhuǎn)灰度化,減少運(yùn)算

cascada.detectMultiScale(frame_gray, faces, 1.1, 4, CV_HAAR_DO_ROUGH_SEARCH, Size(70, 70), Size(1000, 1000));

printf("檢測(cè)到人臉個(gè)數(shù):%dn", faces.size());

//識(shí)別到的臉用矩形圈出

for (int i = 0; i < faces.size(); i++)

{

rectangle(frame, faces, Scalar(255, 0, 0), 2, 8, 0);

}

//當(dāng)只有一個(gè)人臉時(shí),開(kāi)始拍照

if (faces.size() == 1)

{

Mat faceROI = frame_gray(faces[0]);//在灰度圖中將圈出的臉?biāo)趨^(qū)域裁剪出

//cout << faces[0].x << endl;//測(cè)試下face[0].x

resize(faceROI, myFace, Size(92, 112));//將興趣域size為92*112

putText(frame, to_string(pic_num), faces[0].tl(), 3, 1.2, (0, 0, 225), 2, 0);//在 faces[0].tl()的左上角上面寫序號(hào)

string filename = format("F:video%d.jpg", pic_num); //圖片的存放位置,frmat的用法跟QString差不多

imwrite(filename, myFace);//存在當(dāng)前目錄下

imshow(filename, myFace);//顯示下size后的臉

waitKey(500);//等待500us

destroyWindow(filename);//:銷毀指定的窗口

pic_num++;//序號(hào)加1

if (pic_num == 11)

{

return 0;//當(dāng)序號(hào)為11時(shí)退出循環(huán),一共拍10張照片

}

}

int c = waitKey(10);

if ((char)c == 27) { break; } //10us內(nèi)輸入esc則退出循環(huán)

imshow("frame", frame);//顯示視頻

waitKey(100);//等待100us

}

return 0;

通過(guò)上面的代碼,完成圖像采集。

//讀取你的CSV文件路徑.

//string fn_csv = string(argv[1]);

string fn_csv = "F:videocccat.txt";

// 2個(gè)容器來(lái)存放圖像數(shù)據(jù)和對(duì)應(yīng)的標(biāo)簽

vector images;

vector labels;

// 讀取數(shù)據(jù). 如果文件不合法就會(huì)出錯(cuò)

// 輸入的文件名已經(jīng)有了.

try

{

read_csv(fn_csv, images, labels); //從csv文件中批量讀取訓(xùn)練數(shù)據(jù)

}

catch (cv::Exception& e)

{

cerr << "Error opening file "" << fn_csv << "". Reason: " << e.msg << endl;

// 文件有問(wèn)題,我們啥也做不了了,退出了

exit(1);

}

// 如果沒(méi)有讀取到足夠圖片,也退出.

if (images.size() <= 1) {

string error_message = "This demo needs at least 2 images to work. Please add more images to your data set!";

CV_Error(CV_StsError, error_message);

}

for (int i = 0; i < images.size(); i++)

{

//cout<();<>

if (images.size() != Size(92, 112))

{

cout << i << endl;

cout << images.size() << endl;

}

}

// 下面的幾行代碼僅僅是從你的數(shù)據(jù)集中移除最后一張圖片,作為測(cè)試圖片

//[gm:自然這里需要根據(jù)自己的需要修改,他這里簡(jiǎn)化了很多問(wèn)題]

Mat testSample = images[images.size() - 1];

int testLabel = labels[labels.size() - 1];

images.pop_back();//刪除最后一張照片,此照片作為測(cè)試圖片

labels.pop_back();//刪除最有一張照片的labels

// 下面幾行創(chuàng)建了一個(gè)特征臉模型用于人臉識(shí)別,

// 通過(guò)CSV文件讀取的圖像和標(biāo)簽訓(xùn)練它。

// T這里是一個(gè)完整的PCA變換

//如果你只想保留10個(gè)主成分,使用如下代碼

// cv::createEigenFaceRecognizer(10);

//

// 如果你還希望使用置信度閾值來(lái)初始化,使用以下語(yǔ)句:

// cv::createEigenFaceRecognizer(10, 123.0);

//

// 如果你使用所有特征并且使用一個(gè)閾值,使用以下語(yǔ)句:

// cv::createEigenFaceRecognizer(0, 123.0);

//創(chuàng)建一個(gè)PCA人臉?lè)诸惼?,暫時(shí)命名為model吧,創(chuàng)建完成后

//調(diào)用其中的成員函數(shù)train()來(lái)完成分類器的訓(xùn)練

Ptr model = face::EigenFaceRecognizer::create();

model->train(images, labels);

model->save("MyFacePCAModel.xml");//保存路徑可自己設(shè)置,但注意用“”

Ptr model1 = face::FisherFaceRecognizer::create();

model1->train(images, labels);

model1->save("MyFaceFisherModel.xml");

Ptr model2 = face::LBPHFaceRecognizer::create();

model2->train(images, labels);

model2->save("MyFaceLBPHModel.xml");

// 下面對(duì)測(cè)試圖像進(jìn)行預(yù)測(cè),predictedLabel是預(yù)測(cè)標(biāo)簽結(jié)果

//注意predict()入口參數(shù)必須為單通道灰度圖像,如果圖像類型不符,需要先進(jìn)行轉(zhuǎn)換

//predict()函數(shù)返回一個(gè)整形變量作為識(shí)別標(biāo)簽

int predictedLabel = model->predict(testSample);//加載分類器

int predictedLabel1 = model1->predict(testSample);

int predictedLabel2 = model2->predict(testSample);

// 還有一種調(diào)用方式,可以獲取結(jié)果同時(shí)得到閾值:

// int predictedLabel = -1;

// double confidence = 0.0;

// model->predict(testSample, predictedLabel, confidence);

string result_message = format("Predicted class = %d / Actual class = %d.", predictedLabel, testLabel);

string result_message1 = format("Predicted class = %d / Actual class = %d.", predictedLabel1, testLabel);

string result_message2 = format("Predicted class = %d / Actual class = %d.", predictedLabel2, testLabel);

cout << result_message << endl;

cout << result_message1 << endl;

cout << result_message2 << endl;

getchar();

//waitKey(0);

return 0;

通過(guò)上面的代碼進(jìn)行訓(xùn)練,訓(xùn)練使用了python。所以系統(tǒng)環(huán)境需要配置好。

poYBAGKEwl6AQKHtAAAm8l7Gwow014.png

在此文件中,把我們采集到的圖像,放進(jìn)去,新建一個(gè)文件夾。

poYBAGKEwmyATvSEAABt9rLqLms536.png

之后就是把我們的at.txt也加入我們的文件。

pYYBAGKEwnmAX7M1AAB6AnakQhQ378.png

訓(xùn)練好后,我們就得到了我們所需要的訓(xùn)練文件。

poYBAGKEwoSAEKhsAABN9e09ki0029.png

在我們打卡界面,點(diǎn)擊打卡時(shí)就是這樣的。加載訓(xùn)練好的東西。然后啟動(dòng)定時(shí)器,去獲取攝像頭信號(hào),然后對(duì)比,最終和數(shù)據(jù)庫(kù)一致就認(rèn)為打卡成功。

上面訓(xùn)練部分,其實(shí)提供的另一個(gè)工程就全部完成了。

poYBAGKEwpGASG9iAABFuJ2enWs396.png

這是我們win端界面,圓框就是我們攝像頭采集圖像顯示的位置。

pYYBAGKEwpyAFIqiAABEtCveTHg066.png

我們需要在Ubuntu下把庫(kù)全部替換,這樣就能編譯過(guò)了,然后拷貝到開(kāi)發(fā)板上運(yùn)行。如下:

pYYBAGKEwqaAKh6yAAAsOzMnM4Y825.png

進(jìn)來(lái)就提示數(shù)據(jù)庫(kù)打開(kāi)失敗了,我們這個(gè)都是基于數(shù)據(jù)庫(kù),所以還是比較尷尬的,后期的話可以嘗試自己全部編譯下,然后更新吧。目前就測(cè)試,看下效果吧。

pYYBAGKEwriAHmWPAADzCEbAve8180.png

使用的硬件增加了一個(gè)攝像頭。

pYYBAGKEwsOAACWNAADJEkIMIyA546.png

這是打開(kāi)攝像頭采集的樣子。

pYYBAGKDbRWADoP6ABz9qHtm7fY289.gif

這個(gè)GIF展示了我們的人臉檢測(cè)情況。

poYBAGKEwtaAEPbSAABSE9pWx4Y131.png

由于沒(méi)有數(shù)據(jù)庫(kù),只能打印一些信息。當(dāng)兩個(gè)數(shù)據(jù)相等時(shí)就進(jìn)入下一步,判斷打卡了。由于沒(méi)有數(shù)據(jù)庫(kù),就展示下電腦端的效果吧。

pYYBAGKEwuOAdM_0AABKUBgTxkQ268.pngpoYBAGKEwumAIlXbAABbm5btOrU794.png

審核編輯:符乾江

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 開(kāi)發(fā)板
    +關(guān)注

    關(guān)注

    25

    文章

    5067

    瀏覽量

    97608
  • 人臉識(shí)別
    +關(guān)注

    關(guān)注

    76

    文章

    4012

    瀏覽量

    81960
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    ElfBoard開(kāi)源項(xiàng)目|百度智能云平臺(tái)的人臉識(shí)別項(xiàng)目

    百度智能云平臺(tái)的人臉識(shí)別項(xiàng)目,旨在利用其強(qiáng)大的人臉識(shí)別服務(wù)實(shí)現(xiàn)自動(dòng)人臉識(shí)別。選擇百度智能云的原因
    的頭像 發(fā)表于 12-24 10:54 ?315次閱讀
    ElfBoard開(kāi)源<b class='flag-5'>項(xiàng)目</b>|百度智能云平臺(tái)的<b class='flag-5'>人臉</b><b class='flag-5'>識(shí)別項(xiàng)目</b>

    人臉疲勞檢測(cè)應(yīng)用-米爾基于RK3576核心/開(kāi)發(fā)板

    本文將介紹基于米爾電子MYD-LR3576開(kāi)發(fā)板米爾基于瑞芯微RK3576開(kāi)發(fā)板)的人臉疲勞檢測(cè)方案測(cè)試。
    的頭像 發(fā)表于 12-20 08:06 ?258次閱讀
    <b class='flag-5'>人臉</b>疲勞檢測(cè)應(yīng)用-<b class='flag-5'>米爾</b>基于RK3576核心<b class='flag-5'>板</b>/<b class='flag-5'>開(kāi)發(fā)板</b>

    如何用OpenCV進(jìn)行手勢(shì)識(shí)別--基于米爾全志T527開(kāi)發(fā)板

    本文將介紹基于米爾電子MYD-LT527開(kāi)發(fā)板米爾基于全志T527開(kāi)發(fā)板)的OpenCV手勢(shì)識(shí)別
    的頭像 發(fā)表于 12-13 08:04 ?731次閱讀
    如何用<b class='flag-5'>OpenCV</b>進(jìn)行手勢(shì)<b class='flag-5'>識(shí)別</b>--基于<b class='flag-5'>米爾</b>全志T527<b class='flag-5'>開(kāi)發(fā)板</b>

    FacenetPytorch人臉識(shí)別方案--基于米爾全志T527開(kāi)發(fā)板

    本篇測(cè)評(píng)由優(yōu)秀測(cè)評(píng)者“小火苗”提供。本文將介紹基于米爾電子MYD-LT527開(kāi)發(fā)板米爾基于全志 T527開(kāi)發(fā)板)的FacenetPytorch人臉
    發(fā)表于 11-28 15:57

    FacenetPytorch人臉識(shí)別方案--基于米爾全志T527開(kāi)發(fā)板

    本篇測(cè)評(píng)由電子工程世界的優(yōu)秀測(cè)評(píng)者“小火苗”提供。本文將介紹基于米爾電子MYD-LT527開(kāi)發(fā)板米爾基于全志T527開(kāi)發(fā)板)的FacenetPytorch
    的頭像 發(fā)表于 11-28 15:12 ?334次閱讀
    FacenetPytorch<b class='flag-5'>人臉</b><b class='flag-5'>識(shí)別</b>方案--基于<b class='flag-5'>米爾</b>全志T527<b class='flag-5'>開(kāi)發(fā)板</b>

    追加名額丨米爾瑞芯微RK3576開(kāi)發(fā)板有獎(jiǎng)試用

    米爾與瑞芯微合作發(fā)布的新品基于瑞芯微RK3576應(yīng)用處理器的MYD-LR3576開(kāi)發(fā)板免費(fèi)試用活動(dòng)加碼啦~~米爾追加了2塊價(jià)值849元的MYD-LR3576開(kāi)發(fā)板發(fā)起試用活動(dòng)您不僅可以
    的頭像 發(fā)表于 11-22 01:00 ?203次閱讀
    追加名額丨<b class='flag-5'>米爾</b>瑞芯微RK3576<b class='flag-5'>開(kāi)發(fā)板</b>有獎(jiǎng)試用

    如何用OpenCV的相機(jī)捕捉視頻進(jìn)行人臉檢測(cè)--基于米爾NXP i.MX93開(kāi)發(fā)板

    本篇測(cè)評(píng)由優(yōu)秀測(cè)評(píng)者“eefocus_3914144”提供。 本文將介紹基于米爾電子MYD-LMX93開(kāi)發(fā)板米爾基于NXP i.MX93開(kāi)發(fā)板)的基于
    發(fā)表于 11-15 17:58

    基于OPENCV的相機(jī)捕捉視頻進(jìn)行人臉檢測(cè)--米爾NXP i.MX93開(kāi)發(fā)板

    本文將介紹基于米爾電子MYD-LMX93開(kāi)發(fā)板米爾基于NXPi.MX93開(kāi)發(fā)板)的基于OpenCV
    的頭像 發(fā)表于 11-07 09:03 ?1111次閱讀
    基于<b class='flag-5'>OPENCV</b>的相機(jī)捕捉視頻進(jìn)行<b class='flag-5'>人臉</b>檢測(cè)--<b class='flag-5'>米爾</b>NXP i.MX93<b class='flag-5'>開(kāi)發(fā)板</b>

    基于OpenCV人臉識(shí)別系統(tǒng)設(shè)計(jì)

    基于OpenCV人臉識(shí)別系統(tǒng)是一個(gè)復(fù)雜但功能強(qiáng)大的系統(tǒng),廣泛應(yīng)用于安全監(jiān)控、人機(jī)交互、智能家居等多個(gè)領(lǐng)域。下面將詳細(xì)介紹基于OpenCV人臉
    的頭像 發(fā)表于 07-11 15:37 ?1.2w次閱讀

    米爾基于NXP iMX.93開(kāi)發(fā)板的M33處理器應(yīng)用開(kāi)發(fā)筆記

    資源MYD-LMX9X開(kāi)發(fā)板米爾基于NXPiMX.93開(kāi)發(fā)板)3.軟件資源Windows7及以上版本軟件:IAREmbeddedWorkbench4.板載固件調(diào)試
    的頭像 發(fā)表于 06-29 08:01 ?1391次閱讀
    <b class='flag-5'>米爾</b>基于NXP <b class='flag-5'>iMX</b>.93<b class='flag-5'>開(kāi)發(fā)板</b>的M33處理器應(yīng)用<b class='flag-5'>開(kāi)發(fā)</b>筆記

    米爾NXP i.MX 93開(kāi)發(fā)板Qt開(kāi)發(fā)指南

    1. 概述Qt 是一個(gè)跨平臺(tái)的圖形應(yīng)用開(kāi)發(fā)框架,被應(yīng)用在不同尺寸設(shè)備和平臺(tái)上,同時(shí)提供不同版權(quán)版本供用戶選擇。米爾 NXP i.MX 93 開(kāi)發(fā)板(MYD-LMX9X
    發(fā)表于 06-07 20:45

    米爾NXP i.MX 93開(kāi)發(fā)板Qt開(kāi)發(fā)指南

    1.概述Qt是一個(gè)跨平臺(tái)的圖形應(yīng)用開(kāi)發(fā)框架,被應(yīng)用在不同尺寸設(shè)備和平臺(tái)上,同時(shí)提供不同版權(quán)版本供用戶選擇。米爾NXPi.MX93開(kāi)發(fā)板(MYD-LMX9X
    的頭像 發(fā)表于 06-07 08:01 ?1756次閱讀
    <b class='flag-5'>米爾</b>NXP i.MX 93<b class='flag-5'>開(kāi)發(fā)板</b>的<b class='flag-5'>Qt</b><b class='flag-5'>開(kāi)發(fā)</b>指南

    【OpenHarmony鴻蒙實(shí)戰(zhàn)】在RK3399開(kāi)發(fā)板實(shí)現(xiàn)智能門禁人臉識(shí)別

    基于RK3399開(kāi)發(fā)板,使用OpenHarmony3.0-LTS開(kāi)發(fā)的應(yīng)用。通過(guò)定時(shí)獲取攝像頭數(shù)據(jù),實(shí)現(xiàn)人臉識(shí)別比對(duì)等功能。
    的頭像 發(fā)表于 03-20 17:38 ?1396次閱讀
    【OpenHarmony鴻蒙實(shí)戰(zhàn)】在RK3399<b class='flag-5'>開(kāi)發(fā)板</b>實(shí)現(xiàn)智能門禁<b class='flag-5'>人臉</b><b class='flag-5'>識(shí)別</b>

    項(xiàng)目分享|基于ELF 1開(kāi)發(fā)板的遠(yuǎn)程監(jiān)測(cè)及人臉識(shí)別項(xiàng)目

    今天非常榮幸地向各位小伙伴分享一個(gè)由共創(chuàng)社成員完成的遠(yuǎn)程監(jiān)測(cè)及人臉識(shí)別項(xiàng)目,該項(xiàng)目依托ELF1開(kāi)發(fā)板為核心硬件平臺(tái),構(gòu)建了一套完整的視頻監(jiān)控系統(tǒng),并在此基礎(chǔ)上集成了
    的頭像 發(fā)表于 03-13 16:41 ?540次閱讀
    <b class='flag-5'>項(xiàng)目</b>分享|基于ELF 1<b class='flag-5'>開(kāi)發(fā)板</b>的遠(yuǎn)程監(jiān)測(cè)及<b class='flag-5'>人臉</b><b class='flag-5'>識(shí)別項(xiàng)目</b>

    米爾-全志T113-i開(kāi)發(fā)板試用】發(fā)布opencv-mobile米爾t113i專享預(yù)編譯包

    MYC-YT113i核心開(kāi)發(fā)板 真正的國(guó)產(chǎn)核心,100%國(guó)產(chǎn)物料認(rèn)證 國(guó)產(chǎn)T113-i處理器配備2*Cortex-A7@1.2GHz ,RISC-V 外置DDR3接口、支持視頻編解碼器
    發(fā)表于 02-25 20:23