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

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

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

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

[復(fù)制鏈接]

2607

主題

2607

帖子

7472

積分

高級會員

Rank: 5Rank: 5

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



誰? 我! 是你? 是我! 你終于來了! 我終于來了! 你終究是來了? 我終究是來了! 你來干什么! 我來檢測一個人臉!

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

本人能力有限,移植的opencv還有諸多問題,這份代碼在鴻蒙上運行,只能運行大概十多秒,然后就要卡死,暫時還沒有找到原因。移植過程也沒有寫詳細筆記,有點亂,等理清楚了再發(fā)移植教程(或許都不能叫移植,因為我是追蹤opencv源碼,直接放在鴻蒙上用的,沒有像qt那樣還要編譯,只是改的東西比較多,其實還是c和c++語法)。

  • #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:儲存到的路徑
      
  • */
      
  • void rectface(char* url, char* url2) {
      
  •         char *HARR_XML_PATH1 = HAARCASCADE_FRONTALFACE_ALT;//-配置文件 xml
      
  •         string fn_haar = string(HARR_XML_PATH1);
      
  •         //人臉識別算法
      
  •         CascadeClassifier haar_cascade; //級聯(lián)分類器檢測類
      
  •         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:儲存到的路徑
      
  • */
      
  • int grayface(char* url, char* url2) {
      
  •         char *HARR_XML_PATH1 = HAARCASCADE_FRONTALFACE_ALT;
      
  •         string fn_haar = string(HARR_XML_PATH1);    //-配置文件 xml
      
  •         //人臉識別算法
      
  •         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);    //直方圖均衡化
      
  •         }
      
  •         //將灰度化的圖片用于識別出人臉faces
      
  •         haar_cascade.detectMultiScale(gray, faces);
      

  •   
  •         //識別多張人臉
      
  •         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í)行會導(dǎo)致卡死,尚未找到原因。

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

下載附件  保存到相冊  

1 小時前 上傳

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

使用道具 舉報

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

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則


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