|
【HarmonyOS HiSpark AI Camera試用連載 】第五次續(xù)緣-基于鴻蒙系統(tǒng)的人臉檢測,
本帖最后由 瑟寒凌風(fēng) 于 2020-12-12 00:51 編輯
誰? 我! 是你? 是我! 你終于來了! 我終于來了! 你終究是來了? 我終究是來了! 你來干什么! 我來檢測一個人臉!
本文主要是實現(xiàn)一張圖片上的人臉檢測,目前的研究也沒有去深入,而且代碼都很簡潔,只是完成圖片的檢測,視頻和實時攝像頭的檢測尚未研究,這不是本人擅長的領(lǐng)域,日常加強(qiáng)學(xué)習(xí)。 完成本代碼,其中有一些波折,困難的關(guān)鍵不是怎么實現(xiàn)人臉檢測,而在于鴻蒙上怎么運行opencv。這份代碼參考 https://blog.csdn.net/sehanlingfeng/article/details/106880853 其實網(wǎng)上人臉檢測的例子很多,在鴻蒙OS上可以完成這個功能,確屬不易。
本人能力有限,移植的opencv還有諸多問題,這份代碼在鴻蒙上運行,只能運行大概十多秒,然后就要卡死,暫時還沒有找到原因。移植過程也沒有寫詳細(xì)筆記,有點亂,等理清楚了再發(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)系刪除。 |
|