|

【HarmonyOS HiSpark AI Camera试用连载 】第五次续缘-基于鸿蒙系统的人脸检测,
本帖最后由 瑟寒凌风 于 2020-12-12 00:51 编辑
谁? 我! 是你? 是我! 你终于来了! 我终于来了! 你终究是来了? 我终究是来了! 你来干什么! 我来检测一个人脸!
本文主要是实现一张图片上的人脸检测,目前的研究也没有去深入,而且代码都很简洁,只是完成图片的检测,视频和实时摄像头的检测尚未研究,这不是本人擅长的领域,日常加强学习。 完成本代码,其中有一些波折,困难的关键不是怎么实现人脸检测,而在于鸿蒙上怎么运行opencv。这份代码参考 https://blog.csdn.net/sehanlingfeng/article/details/106880853 其实网上人脸检测的例子很多,在鸿蒙OS上可以完成这个功能,确属不易。
本人能力有限,移植的opencv还有诸多问题,这份代码在鸿蒙上运行,只能运行大概十多秒,然后就要卡死,暂时还没有找到原因。移植过程也没有写详细笔记,有点乱,等理清楚了再发移植教程(或许都不能叫移植,因为我是追踪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“;//人脸数据集
- /*
- * 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; //级联分类器检测类
- 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;
- }
复制代码 其中函数grayface执行会导致卡死,尚未找到原因。
33333333.jpg (121.21 KB, 下载次数: 0)
下载附件 保存到相册
1 小时前 上传
图片往上找的,如有侵权,联系删除。 |
|