Skip to content

编译手册 v1.2.0

taotianran edited this page Mar 27, 2023 · 37 revisions

目录



大家可以在本机编译,我们也提供了部分平台的docker环境,也可以下载docker镜像进行编译:Docker安装(可选)


Android编译

🖥️ 本地编译方式

步骤1:克隆代码

git clone git@github.com:PaddlePaddle/FlyCV.git
git checkout <branch name or tag name>

步骤2:设置NDK路径

export ANDROID_NDK=${NDK_PATH}
例如:export ANDROID_NDK=/Users/flycv/Library/Android/sdk/ndk/17.2.4988734/

步骤3:编译

cd FlyCV

// 脚本参数说明
// 0:编译armv7架构;1:编译armv8架构;2:同时编译两种架构
// y:编译时清除上一次编译缓存(全量编译);n:编译时不清除上一次编译缓存(增量编译)
./scripts/android/build.sh 2 y

默认编译产出路径:build/install/flycv


🐳 Docker编译方式

步骤1:拉取docker镜像

docker pull flycv/x86_64:android

步骤2:建立交互终端

// 建立交互终端,指定挂载目录(将FlyCV的源码目录挂载到容器中)
docker run --name=flycv_android -i -t -v [本机挂载目录]:/io flycv/x86_64:android /bin/bash

// 示例:
docker run --name=flycv_android -i -t -v /Users/flycv/WorkSpace/FlyCV:/io flycv/x86_64:android /bin/bash

注意: 如果是第二次启动容器,无需执行上述命令,只需要启动容器并进入即可:

docker ps -a              // 查看之前创建的容器ID
docker start [容器ID]      // 启动容器
docker attach [容器ID]     // 建立交互界面

步骤3:编译

source /etc/ndk/r17c.env             // 激活环境变量
cd /io/                              // 进入源码目录
./scripts/android/build.sh 2 y       // 两种架构同时编译

默认编译产出路径:build/install/flycv




ArmLinux编译

🖥️ 本地编译方式

步骤1:克隆代码

git clone git@github.com:PaddlePaddle/FlyCV.git
git checkout <branch name or tag name>

步骤2:编译

cd FlyCV

// 脚本参数说明
// 0:编译armhf架构;1:编译aarch64架构
// y:编译时清除上一次编译缓存(全量编译);n:编译时不清除上一次编译缓存(增量编译)
./scripts/armlinux/build.sh 1 y

默认编译产出路径:build/install/flycv/


🐳 Docker编译方式(aarch64架构)

步骤1:拉取docker镜像

docker pull quay.io/pypa/manylinux_2_24_aarch64

步骤2:建立交互终端

// 建立交互终端,指定挂载目录(将FlyCV的源码目录挂载到容器中)
docker run --name=flycv_aarch64 -i -t -v [本机挂载目录]:/io quay.io/pypa/manylinux_2_24_aarch64:latest /bin/bash

// 示例
docker run --name=flycv_aarch64 -i -t -v /Users/flycv/WorkSpace/FlyCV:/io quay.io/pypa/manylinux_2_24_aarch64:latest /bin/bash

注意: 如果是第二次启动容器,无需执行上述命令,只需要启动容器并进入即可:

docker ps -a              // 查看之前创建的容器ID
docker start [容器ID]      // 启动容器
docker attach [容器ID]     // 建立交互界面

步骤3:编译

cd /io/                             // 进入源码目录
./scripts/armlinux/build.sh 1 y     // 编译aarch64架构

默认编译产出路径:build/install/flycv/




Macos编译(x86、arm)

🖥️ 本地编译方式

步骤1:克隆代码

git clone git@github.com:PaddlePaddle/FlyCV.git
git checkout <branch name or tag name>

步骤2:编译

# 如果你的机器是X86架构,执行下面的编译脚本
cd FlyCV
./scripts/macos/build_x86.sh
  
# 如果你的机器是arm架构,执行下面的编译脚本
./scripts/macos/build_arm.sh

默认编译产出路径:build/Release/flycv




Windows编译

🖥️ 本地编译方式

步骤1:克隆代码

git clone git@github.com:PaddlePaddle/FlyCV.git
git checkout <branch name or tag name>  

步骤2:生成solution

// 在build目录下会生成project32和project64两个sln方案,使用visual studio进行编译
./scripts/windows/build.sh

步骤3:使用Visual Studio打开解决方案,编译INSTALL方案

默认编译产出位于Release/flycv目录下。




Linux编译

🖥️ 本地编译方式

步骤1:克隆代码

git clone git@github.com:PaddlePaddle/FlyCV.git
git checkout <branch name or tag name>  

步骤2:编译

./scripts/linux/build.sh

默认编译产出路径:build/install/flycv


🐳 Docker编译方式

步骤1:拉取镜像

docker pull ubuntu:18.04

步骤2:建立交互终端

// 建立交互终端,指定挂载目录(将FlyCV的源码目录挂载到容器中)
docker run --name=flycv_ubuntu -i -t -v [本机挂载目录]:/io ubuntu:18.04 /bin/bash

// 示例
docker run --name=flycv_ubuntu -i -t -v /Users/flycv/WorkSpace/FlyCV:/io ubuntu:18.04 /bin/bash

注意: 如果是第二次启动容器,无需执行上述命令,只需要启动容器并进入即可:

docker ps -a              // 查看之前创建的容器ID
docker start [容器ID]      // 启动容器
docker attach [容器ID]     // 建立交互界面

步骤3:安装编译工具

apt-get update
apt-get install build-essential
apt-get install cmake

步骤4:编译

cd /io
./scripts/linux/build.sh

默认编译产出路径:build/install/flycv




JS编译

🖥️ 本地编译

步骤1:安装编译环境

git clone https://github.com/emscripten-core/emsdk.git
cd emsdk

# 在 Linux 或者 Mac macOS 上
./emsdk install latest
./emsdk activate latest

# 在 Windows 上
emsdk install --build=Release sdk-incoming-64bit binaryen-master-64bit
emsdk activate --global --build=Release sdk-incoming-64bit binaryen-master-64bit

# 注意:Windows 版本的 Visual Studio 2017 已经被支持,但需要在 emsdk install 需要追加 --vs2017 参数。

步骤2:克隆代码

git clone git@github.com:PaddlePaddle/FlyCV.git
git checkout <branch name or tag name>

步骤3:编译

export EMSCRIPTEN_DIR=[emscripten路径]
emscripten路径为上一步emsdk下载的绝对路径,加上upstream/emscripten目录。
举例:export EMSCRIPTEN_DIR=/Users/flycv/workspace/emsdk/upstream/emscripten

./scripts/js/build.sh

默认编译产出路径:build/output/flycv




各平台编译选项

命名空间编译选项

编译选项 默认值 描述
📃 FLYCV_NAMESPACE flycv 可以自定义命名空间,在cmake编译选项里加上 -DFLYCV_NAMESPACE=xxx 即可

功能编译选项

编译选项 默认值 描述
🗂️ BUILD_FCV_IMG_TRANSFORM ON 图像转换模块
📃 WITH_FCV_COLOR_CONVERT ON 颜色空间转换功能
📃 WITH_FCV_RESIZE ON 图像缩放
📃 WITH_FCV_WARP_AFFINE ON 仿射变换
📃 WITH_FCV_WARP_PERSPECTIVE ON 透视变换
📃 WITH_FCV_ROTATION ON 图像旋转
📃 WITH_FCV_FLIP ON 图像翻转
📃 WITH_FCV_SUBTRACT ON 图像相减
📃 WITH_FCV_COPY_MAKE_BORDER ON 边界填充
📃 WITH_FCV_CROP ON 抠图
📃 WITH_FCV_REMAP ON 重映射
📃 WITH_FCV_ADD_WEIGHTED ON 图像融合
📃 WITH_FCV_EXTRACT_CHANNEL ON 特定通道提取
🗂️ BUILD_FCV_IMG_CALCULATION ON 图像计算模块
📃 WITH_FCV_MATRIX_MUL ON 矩阵乘
📃 WITH_FCV_NORM ON 范数计算
📃 WITH_FCV_MEAN ON 均值计算
📃 WITH_FCV_MIN_AREA_RECT ON 最小外接矩形
📃 WITH_FCV_MIN_MAX_LOC ON 获取最小、最大点坐标
📃 WITH_FCV_CONNECTED_COMPONENTS ON 计算连通域
📃 WITH_FCV_FIND_HOMOGRAPHY ON 计算二维点对映射
🗂️ BUILD_FCV_FUSION_API ON 融合算子模块
📃 WITH_FCV_BGR_TO_RGBA_WITH_MASK ON bgr合并mask转rgba
📃 WITH_FCV_NORMALIZE_TO_SUBMEAN_TO_REORDER ON 图像减均值,归一化,通道顺序变换
📃 WITH_FCV_SPLIT_TO_MEMCPY ON 通道分离和拷贝
📃 WITH_FCV_Y420SP_TO_RESIZE_TO_BGR ON yuv数据缩放且转换为BGR数据
📃 WITH_FCV_BGRA_TO_RESIZE_TO_BGR ON bgra缩放和转换位bgr
🗂️ BUILD_FCV_MATH_OPERATOR ON 基本数学运算
📃 WITH_FCV_VECTOR_OPERATOR ON 向量计算
🗂️ BUILD_FCV_MEDIA_IO ON 多媒体IO操作
📃 WITH_FCV_IMGCODECS ON 图像编解码
📃 WITH_LIB_JPEG_TURBO ON 支持jpg
📃 WITH_LIB_PNG ON 支持png
🗂️ BUILD_FCV_IMG_DRAW ON 图形绘制
📃 WITH_FCV_FILL_POLY ON 多边形绘制和填充
📃 WITH_FCV_POLY_LINES ON 多边形绘制
📃 WITH_FCV_CIRCLE ON 圆形绘制
📃 WITH_FCV_LINE ON 线绘制

CPU优化编译选项

编译选项 默认值 描述
🚀 ENABLE_SSE ON 开启SSE指令集优化(仅支持x86架构)
🚀 ENABLE_AVX ON 开启AVX指令集优化(仅支持x86架构)
🚀 ANDROID_ARM_NEON ON 开启neon指令集优化(仅支持arm架构)
🚀 ENABLE_NEON ON 开启neon指令集优化(仅支持arm架构)
🚀 ENABLE_SVE2 OFF 开启SVE2指令集优化(仅支持arm架构)

多语言编译选项

编译选项 默认值 描述
BUILD_C OFF 开启C接口支持
BUILD_JS OFF 编译js版本

其他编译选项

编译选项 默认值 描述
🔖 BUILD_TEST ON 开启单元测试编译
🔖 BUILD_BENCHMARK ON 开启性能测试编译
🔖 BUILD_SAMPLES ON 开启demo编译