|
【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)系刪除。 |
|