在HiSpark AI Camera套件上如何使用图像处理

之前听说HI 3516DV300套件上可以实现人脸识别与车牌识别等功能,但在网上没有找到相关的教程。

现在想在这个AI Camera套件上实现一个简单的水果识别,主要是图像处理获取图像角点,提取颜色做一个简单识别。

之前自己是在OpenCV上实现的,在这个开发板上要怎么实现呢?

AI Camera
3516
3516DV300
图像处理
2021-03-13 18:50:08
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
红叶亦知秋

暂时看到的人脸识别的方法也是通过在鸿蒙上运行opencv实现的,给楼主一份移植示例,这份代码在鸿蒙上运行,只能运行大概十多秒,然后就要卡死,暂时还没有找到原因。

    #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[i], CV_RGB(0, 255, 0), 1);
                    putText(picture, "", Point(faces[i].x, faces[i].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[i];
                    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;
    }
分享
微博
QQ
微信
回复
2021-03-17 15:57:38
相关问题
HarmonyOS中的智能图像处理如何实现?
163浏览 • 0回复 待解决
图像处理库是否有替代的解决方案
372浏览 • 0回复 待解决
使用Drawing进行2d图像绘制
911浏览 • 1回复 待解决