电子产业一站式赋能平台

PCB联盟网

搜索
查看: 767|回复: 0
收起左侧

【HarmonyOS HiSpark AI Camera试用连载 】第五次续缘-基于鸿蒙系统的人脸检测

[复制链接]

2607

主题

2607

帖子

7472

积分

高级会员

Rank: 5Rank: 5

积分
7472
发表于 2020-12-12 01:56:10 | 显示全部楼层 |阅读模式
【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 小时前 上传

图片往上找的,如有侵权,联系删除。
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则


联系客服 关注微信 下载APP 返回顶部 返回列表