一. 图像编辑器 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