关于MNN中图像预处理

MNN工程化中,首先遇到图像预处理,其中要做的是对图像归一化,这里不需要我们自己用代码实现,MNN自动帮我们处理,代码如下,根据MNN回复,处理公式是 dst = (img - mean) * normal

#1、只除以均值255
std::vector<float> means{0, 0, 0};
std::vector<float> stds{1.0 / 255, 1.0 / 255, 1.0 / 255};
#2、均值方差
std::vector<float> means{255 * 0.408, 255 * 0.447, 255 * 0.470};
std::vector<float> stds{1.0 / (255*0.289), 1.0 / (255*0.274), 1.0 / (255*0.278)};

MNN::CV::ImageProcess::Config config;
::memcpy(config.mean, means.data(), 3*sizeof(float));
::memcpy(config.normal, stds.data(), 3*sizeof(float));
config.sourceFormat = MNN::CV::BGR;
config.destFormat = MNN::CV::RGB;
std::shared_ptr<MNN::CV::ImageProcess> pretreat(MNN::CV::ImageProcess::create(config));
pretreat->convert((uint8_t*)image.data,INPUTWIDTH,INPUTHEIGHT,0,nchwTensor);
input->copyFromHostTensor(nchwTensor);

### MNN在Android平台上的使用与配置 #### 一、MNN简介 MNN 是阿里巴巴推出的一款轻量级深度学习推理框架,专为移动设备优化设计。它支持多种主流模型格式(如 TensorFlow、PyTorch 和 ONNX),并提供了高效的性能表现和较小的内存占用。 --- #### 二、基于MNN在Android平台上实现图像分类的核心流程 为了在 Android 平台上成功部署 MNN 模型,通常需要完成以下几个核心环节: 1. **模型转换** 需要将训练好的模型(例如 `.onnx` 文件)通过 `MNNConvert` 工具转换为目标 `.mnn` 格式的模型文件[^1]。命令如下所示: ```bash ./MNNConvert -f ONNX --modelFile XXX.onnx --MNNModel XXX.mnn --bizCode biz ``` 2. **环境搭建** 在 Android Studio 中创建一个新的 Native C++ 工程,并按照以下步骤进行 MNN 环境配置[^2]: - 下载或编译生成适用于目标架构的动态链接库(`.so` 文件)。对于 ARM64 架构,可以将 `build_64` 文件夹中的 `libMNN.so` 复制到 Android 工程目录下的路径: ``` app/libs/arm64-v8a/libMNN.so ``` 如果该文件夹不存在,则需手动创建。 3. **NDK 编译与集成** 使用 Android NDK 对 MNN 库进行交叉编译,确保其能够适配不同的硬件架构。具体操作可参考官方文档或其他教程[^3]^。完成后,将生成的目标库文件导入至项目中。 4. **JNI 接口调用** 利用 JNI 技术,在 Java 层面调用底层 C++ 实现的功能模块。这一步骤涉及编写桥接代码来加载 .so 动态库以及执行具体的预测逻辑[^4]。 5. **实际案例分析——MNIST 数字识别** MNIST 数据集作为经典的入门实验之一,展示了如何借助 MNN 完成简单的手写数字分类任务。此过程中不仅包含了上述提到的各项准备工作,还额外增加了针对输入数据预处理部分的设计思路. 6. **其他应用场景扩展** 不局限于视觉领域内的图片类别判断工作;同样也可以应用于音频信号处理方面,比如构建实时语音转文字服务系统等场景当中去实践探索更多可能性[^5]. --- ### 示例代码片段展示 以下是关于如何初始化 session 及运行 forward pass 的一段伪代码表示形式: ```cpp #include <MNN/MNNDefine.h> #include <MNN/Interpreter.hpp> int main() { const char* modelPath = "path/to/model.mnn"; auto interpreter = std::unique_ptr<MNN::Interpreter>(MNN::Interpreter::createFromFile(modelPath)); MNN::SessionConfig config; MNN::BackendConfig backendCfg; backendCfg.type = MNN::BackendConfig::CPU; // 或者 GPU auto session = interpreter->createSession(config); interpreter->runSession(session); return 0; } ``` 以上仅为简化版演示用途,请依据实际情况调整参数设置等内容后再正式投入使用环境中测试验证效果最佳! --- #### 总结说明 综上所述,从模型转化直至最终部署上线整个链条下来都需要开发者具备一定技术水平才能顺利完成各项设定要求。希望本篇文章能给正在研究这方面知识的朋友带来一些启发帮助作用吧! ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值