图像编辑器 Monica 之使用 OpenCV DNN 实现人脸、年龄、性别检测

一. 图像编辑器 Monica

Monica 是一款跨平台的桌面图像编辑软件,使用 Kotlin Compose Desktop 作为 UI 框架。由于应用层是由 Kotlin 编写的,Monica 基于 mvvm 架构,使用 koin 作为依赖注入框架。大部分算法用 Kotlin 编写,少部分图像处理算法使用 OpenCV C++ 或调用深度学习的模型。

Monica 目前还处于开发阶段,当前版本的可以参见 github 地址:https://github.com/fengzhizi715/Monica

二. OpenCV DNN 推理

OpenCV DNN(Deep Neural Network)是 OpenCV 库中的一个模块,专门用于深度学习模型的加载、构建和推理。它支持多种神经网络架构和训练算法,包括卷积神经网络(CNN)、循环神经网络(RNN)等。OpenCV DNN 模块为开发者提供了一个强大且易于使用的工具,用于在各种应用中利用深度学习技术。

先封装一个人脸检测的类,对外暴露的两个方法:初始化模型和推理图片。

#include <opencv2/imgproc.hpp>
#include <opencv2/highgui.hpp>
#include <opencv2/dnn.hpp>
#include <tuple>
#include <iostream>
#include <opencv2/opencv.hpp>
#include <iterator>

using namespace cv;
using namespace cv::dnn;
using namespace std;

class FaceDetect {

public:
    void init(string faceProto,string faceModel,string ageProto,string ageModel,string genderProto,string genderModel);

    void inferImage(Mat& src, Mat& dst);

private:
    Net ageNet;
    Net genderNet;
    Net faceNet;

    vector<string> ageList;
    vector<string> genderList;
    Scalar MODEL_MEAN_VALUES;

    tuple<Mat, vector<vector<int>>> getFaceBox(Net net, Mat &frame, double conf_threshold);
};

然后实现该类

#include "FaceDetect.h"

void FaceDetect::init(string faceProto,string faceModel,string ageProto,string ageModel,string genderProto,string genderModel) {

    // Load Network
    ageNet = readNet(ageModel, ageProto);
    genderNet = readNet(genderModel, genderProto);
    faceNet = readNet(faceModel, faceProto);

    cout << "Using CPU device" << endl;
    ageNet.setPreferableBackend(DNN_TA
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值