電子產(chǎn)業(yè)一站式賦能平臺(tái)

PCB聯(lián)盟網(wǎng)

搜索
查看: 712|回復(fù): 0
收起左側(cè)

【HarmonyOS HiSpark AI Camera試用連載 】第五次續(xù)緣-基于鴻蒙系統(tǒng)的人臉檢測(cè)

[復(fù)制鏈接]

2607

主題

2607

帖子

7472

積分

高級(jí)會(huì)員

Rank: 5Rank: 5

積分
7472
跳轉(zhuǎn)到指定樓層
樓主
發(fā)表于 2020-12-12 01:56:10 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
【HarmonyOS HiSpark AI Camera試用連載 】第五次續(xù)緣-基于鴻蒙系統(tǒng)的人臉檢測(cè),   
本帖最后由 瑟寒凌風(fēng) 于 2020-12-12 00:51 編輯



誰(shuí)? 我! 是你? 是我! 你終于來(lái)了! 我終于來(lái)了! 你終究是來(lái)了? 我終究是來(lái)了! 你來(lái)干什么! 我來(lái)檢測(cè)一個(gè)人臉!

本文主要是實(shí)現(xiàn)一張圖片上的人臉檢測(cè),目前的研究也沒(méi)有去深入,而且代碼都很簡(jiǎn)潔,只是完成圖片的檢測(cè),視頻和實(shí)時(shí)攝像頭的檢測(cè)尚未研究,這不是本人擅長(zhǎng)的領(lǐng)域,日常加強(qiáng)學(xué)習(xí)。 完成本代碼,其中有一些波折,困難的關(guān)鍵不是怎么實(shí)現(xiàn)人臉檢測(cè),而在于鴻蒙上怎么運(yùn)行opencv。這份代碼參考 https://blog.csdn.net/sehanlingfeng/article/details/106880853 其實(shí)網(wǎng)上人臉檢測(cè)的例子很多,在鴻蒙OS上可以完成這個(gè)功能,確屬不易。

本人能力有限,移植的opencv還有諸多問(wèn)題,這份代碼在鴻蒙上運(yùn)行,只能運(yùn)行大概十多秒,然后就要卡死,暫時(shí)還沒(méi)有找到原因。移植過(guò)程也沒(méi)有寫(xiě)詳細(xì)筆記,有點(diǎn)亂,等理清楚了再發(fā)移植教程(或許都不能叫移植,因?yàn)槲沂亲粉檕pencv源碼,直接放在鴻蒙上用的,沒(méi)有像qt那樣還要編譯,只是改的東西比較多,其實(shí)還是c和c++語(yǔ)法)。

  • #include “opencv2/core.hpp“
      
  • #include “opencv2/face.hpp“
      
  • #include “opencv2/highgui.hpp“
      
  • #include “opencv2/imgproc.hpp“
      
  • #include <iostream>
      
  • #include <fstream>
      
  • #include <sstream>
      
  • #include “Main.h“
      
  • #include “opencv2/objdetect/objdetect.hpp“
      
  • using namespace cv;
      
  • using namespace cv::face;
      
  • using namespace std;
      

  •   
  • static char* FACES_MODEL = “./face.yaml“;
      
  • static char* FACES_TXT_PATH = “./face.txt“;
      
  • static char* HAARCASCADE_FRONTALFACE_ALT = “./haarcascade_frontalface_alt.xml“;//人臉數(shù)據(jù)集
      

  •   
  • /*
      
  • *  url:傳入圖片路徑;url2:儲(chǔ)存到的路徑
      
  • */
      
  • void rectface(char* url, char* url2) {
      
  •         char *HARR_XML_PATH1 = HAARCASCADE_FRONTALFACE_ALT;//-配置文件 xml
      
  •         string fn_haar = string(HARR_XML_PATH1);
      
  •         //人臉識(shí)別算法
      
  •         CascadeClassifier haar_cascade; //級(jí)聯(lián)分類(lèi)器檢測(cè)類(lèi)
      
  •         haar_cascade.load(fn_haar);
      
  •         vector< Rect_<int> > faces;
      
  •         Mat picture = imread(url, CV_LOAD_IMAGE_COLOR);
      

  •   
  •         haar_cascade.detectMultiScale(picture, faces);
      
  •         for (int i = 0; i < faces.size(); i++) {
      
  •                 rectangle(picture, faces, CV_RGB(0, 255, 0), 1);
      
  •                 putText(picture, ““, Point(faces.x, faces.y), FONT_HERSHEY_PLAIN, 1.0, CV_RGB(0, 255, 0), 2.0);
      
  •         }
      
  •         imwrite(url2, picture);
      
  • }
      

  •   
  • /*
      
  • *   url:傳入圖片路徑;url2:儲(chǔ)存到的路徑
      
  • */
      
  • int grayface(char* url, char* url2) {
      
  •         char *HARR_XML_PATH1 = HAARCASCADE_FRONTALFACE_ALT;
      
  •         string fn_haar = string(HARR_XML_PATH1);    //-配置文件 xml
      
  •         //人臉識(shí)別算法
      
  •         CascadeClassifier haar_cascade;
      
  •         haar_cascade.load(fn_haar);
      
  •         Mat gray;
      
  •         vector< Rect_<int> > faces;
      
  •         Mat picture = imread(url, CV_LOAD_IMAGE_COLOR);
      

  •   
  •         if (!picture.empty()) {
      
  •                 cvtColor(picture, gray, CV_BGR2GRAY);
      
  •                 equalizeHist(gray, gray);    //直方圖均衡化
      
  •         }
      
  •         //將灰度化的圖片用于識(shí)別出人臉faces
      
  •         haar_cascade.detectMultiScale(gray, faces);
      

  •   
  •         //識(shí)別多張人臉
      
  •         for (int i = 0; i < faces.size(); i++) {
      
  •                 Rect face_i = faces;
      
  •                 Mat face = gray(face_i);
      
  •                 char urltext[256];
      
  •                 sprintf(urltext, “%s%s%d%s“, url2, “gray“, i, “.png“);
      
  •                 imwrite(urltext, face);
      
  •         }
      
  •         return faces.size();
      
  • }
      

  •   
  • int main(int argc, const char *argv[]) {
      
  •         rectface(“./1.png“, “./1_1.png“);
      
  •         //grayface(“./1.png“, “./“);
      
  •         return 0;
      
  • }

復(fù)制代碼 其中函數(shù)grayface執(zhí)行會(huì)導(dǎo)致卡死,尚未找到原因。

33333333.jpg (121.21 KB, 下載次數(shù): 0)

下載附件  保存到相冊(cè)  

1 小時(shí)前 上傳

圖片往上找的,如有侵權(quán),聯(lián)系刪除。

發(fā)表回復(fù)

本版積分規(guī)則


聯(lián)系客服 關(guān)注微信 下載APP 返回頂部 返回列表