我为什么用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++项目的依赖关系。以下是详细说明:
- conanfile.txt的作用:
- 声明项目依赖的第三方库及版本
- 配置构建选项和生成器
- 定义包的使用方式和参数
- 典型conanfile.txt结构:
[requires]
opencv/4.5.3
mnn/1.2.7
[generators]
CMakeToolchain
CMakeDeps
[options]
opencv:shared=True
- 替代方案:
- conanfile.py:更灵活的Python脚本方式
from conans import ConanFile
class MyProject(ConanFile):
settings = "os", "compiler", "build_type", "arch"
requires = "opencv/4.5.3", "mnn/1.2.7"
generators = "CMakeToolchain"
- 两种方式的对比:
- 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