当前位置: 首页 > article >正文

深度学习之用CelebA_Spoof数据集搭建一个活体检测-用MNN来推理时候如何利用Conan对软件包进行管理

我为什么用Conan

前面的文章:深度学习之用CelebA_Spoof数据集搭建一个活体检测-训练好的模型用MNN来推理有提到怎么使用MNN对训练好的模型进行推理,里面并没有提到我是怎么编译和进行代码依赖包的管理的详细步骤,在这里我是用的是Conan:一个C/C++包管理器,可以管理项目依赖并自动下载编译所需的库文件。比较令人兴奋的是,Conan专为C/C++设计的去中心化包管理器,支持多平台(Windows/Linux/macOS),还能支持交叉编译,可管理二进制依赖和构建配置,还有是免费开源的。也就是用它来进行依赖包和软件包的管理,不需要你一个一个依赖库进行源码编译和因为环境不同导致别人提供给你的依赖库用不了。当然这只是简单的描述,有兴趣的同学可以参考这个大牛的博客:10km,里面有个conan的入门系列文章,有幸跟这位大牛共事过,因此吃了不少技术上的红利,非常感激!话不多说,我将会延续对前面文章的例子进行描述,毕竟还是属于怎么用模型的,所以这是深度学习之用CelebA_Spoof数据集搭建一个活体检测这个系列的最终完结篇。

前提

安装好conan并进行配置,可以参考Conan官网或者大牛博客conan的入门系列。由于我之前有在Windows下安装和配置(具体的安装和配置就不详细说明了),就暂且使用Windows下的环境对在用MNN来推理模型时候如何利用Conan对源码以及软件包进行管理。

项目结构配置

project/
├── conanfile.txt
├── CMakeLists.txt
├── include/
│ ├── InferenceInit.h
│ ├── LiveSpoofDetector.h
├── src/
│ ├── main.cpp
│ ├── InferenceInit.cpp
│ ├── LiveSpoofDetector.cpp
└── build/

关键配置文件

Conanfile.txt是Conan包管理器的核心配置文件,主要用于管理C/C++项目的依赖关系。以下是详细说明:

  1. conanfile.txt的作用
  • 声明项目依赖的第三方库及版本
  • 配置构建选项和生成器
  • 定义包的使用方式和参数
  1. 典型conanfile.txt结构
[requires]
opencv/4.5.3
mnn/1.2.7
[generators]
CMakeToolchain
CMakeDeps
[options]
opencv:shared=True
  1. 替代方案
  • conanfile.py:更灵活的Python脚本方式
from conans import ConanFileclass MyProject(ConanFile):settings = "os", "compiler", "build_type", "arch"requires = "opencv/4.5.3", "mnn/1.2.7"generators = "CMakeToolchain"
  1. 两种方式的对比
  • conanfile.txt:简单易用,适合基础需求
  • conanfile.py:功能更强大,支持自定义逻辑
    建议根据项目复杂度选择合适的配置方式。在这里因为依赖库就只有MNN和opencv,所以用conanfile.txt就足够了。这里提供工程使用的conanfile.txt文件。
[requires]
opencv/4.5.3  # 指定OpenCV 4.5.3版本
mnn/1.2.7     # 指定MNN 1.2.7版本
[generators]
CMakeToolchain  # 生成CMake工具链文件
CMakeDeps       # 生成CMake依赖文件
[options]
*:fPIC=True     # 强制所有库使用位置无关代码
*:shared=False  # 默认静态链接所有库
openssl/*:no_dso=True  # OpenSSL禁用动态加载
opencv/*:with_ffmpeg=False  # 禁用FFmpeg支持
opencv/*:with_webp=False    # 禁用WebP格式支持
opencv/*:wit
http://www.lryc.cn/news/2383331.html

相关文章:

  • React 常见的陷阱之(如异步访问事件对象)
  • Swagger在java的运用
  • 代码随想录算法训练营 Day49 图论Ⅰ 深度优先与广度优先
  • .NET外挂系列:1. harmony 基本原理和骨架分析
  • HarmonyOS NEXT端云一体化工程目录结构
  • Ajax研究
  • 学习 Android(十)Fragment的生命周期
  • flutter 常用组件详细介绍、屏幕适配方案
  • Elasticsearch生产环境性能调优指南
  • 野火鲁班猫(arrch64架构debian)从零实现用MobileFaceNet算法进行实时人脸识别(一)conda环境搭建
  • RT Thread FinSH(msh)调度逻辑
  • Kotlin 极简小抄 P9 - 数组(数组的创建、数组元素的访问与修改、数组遍历、数组操作、多维数组、数组与可变参数)
  • CSS display有几种属性值
  • 【后端】【UV】【Django】 `uv` 管理的项目中搭建一个 Django 项目
  • 单片机设计_四轴飞行器(STM32)
  • kafka配置SASL_PLAINTEXT简单认证
  • PostgreSQL简单使用
  • 【Spring Boot】配置实战指南:Properties与YML的深度对比与最佳实践
  • 算法优选系列(9.BFS 解决拓扑排序)
  • (1)Java 17/18/19 新特性面试题
  • LAN(局域网)和WAN(广域网)
  • 【Java高阶面经:微服务篇】7. 1秒响应保障:超时控制如何成为高并发系统的“救火队长”?
  • 力扣周赛置换环的应用,最少交换次数
  • 大语言模型 12 - 从0开始训练GPT 0.25B参数量 MiniMind2 补充 训练开销 训练步骤 知识蒸馏 LoRA等
  • hgdbv9创建plpython3u插件后无法使用该插件创建函数
  • SQLMesh 宏操作符详解:@IF 的条件逻辑与高级应用
  • nt!MiRemovePageByColor函数分析之脱链和刷新颜色表
  • 【爬虫】12306自动化购票
  • 不同消息队列保证高可用实现方案
  • 【Django系统】Python+Django携程酒店评论情感分析系统