编译安装指南 ============== .. |ver| replace:: 3.7.0 源码目录结构 ______________ 源码的目录结构如下: .. parsed-literal:: └── sophon-sail ├── 3rdparty │   ├── json │   ├── prebuild │   ├── pybind11 │   └── spdlog ├── cmake # Cmake Files │   ├── BM168x_ARM_PCIE │   ├── BM168x_LoongArch64 │   └── BM168x_SOC ├── docs # Documentation codes │   ├── common │   ├── source_common │   └── source_zh ├── include # Includes ├── python # Wheel codes │   ├── arm_pcie │   ├── loongarch64 │   ├── pcie │   └── soc ├── python_wheels # Python Wheels │   ├── arm_pcie │   ├── loongarch │   └── soc ├── sample # Sample files │   ├── cpp │   └── python └── src # Source codes 其中3rdparty主要包含了编译sail需要依赖的第三方的一些头文件; cmake中是编译用到的一些cmake文件; include是sail的一些头文件; python文件夹内包含了以下各平台下面python wheel的打包代码及脚本; python_wheels文件夹内是一些预编译出来的wheel包,arm_pcie、loongarch、soc三个文件夹分别是对应的平台; sample文件夹内是一些示例程序; src文件夹下面是各接口的实现代码。 SAIL的编译及安装 _________________ 编译参数 >>>>>>>> * BUILD_TYPE : 编译的类型,目前有pcie、soc、arm_pcie、loongarch、windows五种模式, pcie是编译在x86主机上可用的SAIL包,soc表示使用交叉编译的方式,在x86主机上编译soc上可用的SAIL包,arm_pcie表示使用交叉编译的方式,在x86主机上编译插有bm168x卡的arm主机上可用的SAIL包,loongarch表示使用交叉编译的方式,在x86主机上编译插有bm168x卡的LoongArch64架构主机上可用的SAIL包,windows表示编译插有bm168x卡的windows主机上可用的SAIL包。默认pcie。 * ONLY_RUNTIME : 编译结果是否只包含运行时,而不包含bmcv,sophon-ffmpeg,sophon-opencv,如果此编译选项为ON,则SAIL的编解码及Bmcv接口不可用,只有推理接口可用。默认OFF。 * INSTALL_PREFIX : 执行make install时的安装路径,pcie模式下默认“/opt/sophon”,与libsophon的安装路径一致,交叉编译模式下默认“build_soc”。 * PYTHON_EXECUTABLE : 编译使用的“python3”的路径名称(路径+名称),默认使用当前系统中默认的python3。 * CUSTOM_PY_LIBDIR : 编译使用的python3的动态库的路径(只包含路径),默认使用当前系统中默认python3的动态库目录。 * LIBSOPHON_BASIC_PATH : 交叉编译模式下,libsophon的路径,如果配置不正确则会编译失败。pcie模式下面此编译选项不生效。 * FFMPEG_BASIC_PATH : 交叉编译模式下,sophon-ffmpeg的路径,如果配置不正确,且ONLY_RUNTIME为“ON”时会编译失败。pcie模式下面此编译选项不生效。 * OPENCV_BASIC_PATH : 交叉编译模式下,sophon-opencv的路径,如果配置不正确,且ONLY_RUNTIME为“ON”时会编译失败。pcie模式下面此编译选项不生效。 * TOOLCHAIN_BASIC_PATH : 交叉编译模式下,交叉编译器的路径,目前只有在BUILD_TYPE为loongarch时生效。 * BUILD_PYSAIL : 编译结果是否包含python版SAIL,默认为为“ON”,包含python版本SAIL。 编译可被C++接口调用的动态库及头文件 >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> PCIE MODE ::::::::::: **.安装libsophon,sophon-ffmpeg,sophon-opencv的SAIL** libsophon,sophon-ffmpeg,sophon-opencv的安装方式可参考算能官方文档 **.典型编译方式一** 使用默认安装路径,编译包含bmcv,sophon-ffmpeg,sophon-opencv的SAIL 1. 下载SOPHON-SAIL源码,解压后进入其源码目录 2. 创建编译文件夹build,并进入build文件夹 .. parsed-literal:: mkdir build && cd build 3. 执行编译命令 .. parsed-literal:: cmake -DBUILD_PYSAIL=OFF .. make sail 4. 安装SAIL动态库及头文件,编译结果将安装在‘/opt/sophon’下面 .. parsed-literal:: sudo make install **.典型编译方式二** 使用默认安装路径,编译不包含bmcv,sophon-ffmpeg,sophon-opencv的SAIL, *通过此方式编译出来的SAIL无法使用其Decoder、Bmcv等多媒体相关接口。* 1. 下载SOPHON-SAIL源码,解压后进入其源码目录 2. 创建编译文件夹build,并进入build文件夹 .. parsed-literal:: mkdir build && cd build 3. 执行编译命令 .. parsed-literal:: cmake -DONLY_RUNTIME=ON -DBUILD_PYSAIL=OFF .. make sail 4. 安装SAIL动态库及头文件,编译结果将安装在‘/opt/sophon’下面 .. parsed-literal:: sudo make install SOC MODE ::::::::::: **.获取交叉编译需要使用的libsophon,sophon-ffmpeg,sophon-opencv** *此章节所有的编译操作都是在x86主机上,使用交叉编译的方式进行编译。下面示例中选择libsophon的版本为0.4.1, sophon-ffmpeg的版本为0.4.1,sophon-opencv的版本为0.4.1。* 1. 从算能官网中获取‘libsophon_soc_0.4.1_aarch64.tar.gz’,并解压 .. parsed-literal:: tar -xvf libsophon_soc_0.4.1_aarch64.tar.gz 解压后libsophon的目录为‘libsophon_soc_0.4.1_aarch64/opt/sophon/libsophon-0.4.1’ 2. 从算能官网中获取‘sophon-mw-soc_0.4.1_aarch64.tar.gz’,并解压 .. parsed-literal:: tar -xvf sophon-mw-soc_0.4.1_aarch64.tar.gz 解压后sophon-ffmpeg的目录为‘sophon-mw-soc_0.4.1_aarch64/opt/sophon/sophon-ffmpeg_0.4.1’。 解压后sophon-opencv的目录为‘sophon-mw-soc_0.4.1_aarch64/opt/sophon/sophon-opencv_0.4.1’。 **.安装gcc-aarch64-linux-gnu工具链** *如果已经安装,可忽略此步骤* .. parsed-literal:: sudo apt-get install gcc-aarch64-linux-gnu g++-aarch64-linux-gnu **.典型编译方式一** 通过交叉编译的方式,编译出包含bmcv,sophon-ffmpeg,sophon-opencv的SAIL。 1. 下载SOPHON-SAIL源码,解压后进入其源码目录 2. 创建编译文件夹build,并进入build文件夹 .. parsed-literal:: mkdir build && cd build 3. 执行编译命令 .. parsed-literal:: cmake -DBUILD_TYPE=soc -DBUILD_PYSAIL=OFF \\ -DCMAKE_TOOLCHAIN_FILE=../cmake/BM168x_SOC/ToolChain_aarch64_linux.cmake \\ -DLIBSOPHON_BASIC_PATH=libsophon_soc_0.4.1_aarch64/opt/sophon/libsophon-0.4.1 \\ -DFFMPEG_BASIC_PATH=sophon-mw-soc_0.4.1_aarch64/opt/sophon/sophon-ffmpeg_0.4.1 \\ -DOPENCV_BASIC_PATH=sophon-mw-soc_0.4.1_aarch64/opt/sophon/sophon-opencv_0.4.1 .. make sail 4. 安装SAIL动态库及头文件,程序将自动在源码目录下创建‘build_soc’,编译结果将安装在‘build_soc’下面 .. parsed-literal:: make install 5. 将‘build_soc’文件夹下的‘sophon-sail’拷贝至目标SOC的‘/opt/sophon’目录下,即可在soc上面进行调用。 **.典型编译方式二** 通过交叉编译的方式,编译出不包含bmcv,sophon-ffmpeg,sophon-opencv的SAIL。 *通过此方式编译出来的SAIL无法使用其Decoder、Bmcv等多媒体相关接口。* 1. 下载SOPHON-SAIL源码,解压后进入其源码目录 2. 创建编译文件夹build,并进入build文件夹 .. parsed-literal:: mkdir build && cd build 3. 执行编译命令 .. parsed-literal:: cmake -DBUILD_TYPE=soc \\ -DBUILD_PYSAIL=OFF \\ -DONLY_RUNTIME=ON \\ -DCMAKE_TOOLCHAIN_FILE=../cmake/BM168x_SOC/ToolChain_aarch64_linux.cmake \\ -DLIBSOPHON_BASIC_PATH=libsophon_soc_0.4.1_aarch64/opt/sophon/libsophon-0.4.1 .. make sail 4. 安装SAIL动态库及头文件,程序将自动在源码目录下创建‘build_soc’,编译结果将安装在‘build_soc’下面 .. parsed-literal:: make install 5. 将‘build_soc’文件夹下的‘sophon-sail’拷贝至目标SOC的‘/opt/sophon’目录下,即可在soc上进行调用。 ARM PCIE MODE :::::::::::::::::: **.获取交叉编译需要使用的libsophon,sophon-ffmpeg,sophon-opencv** *此章节所有的编译操作都是在x86主机上,使用交叉编译的方式进行编译。下面示例中选择libsophon的版本为0.4.1, sophon-ffmpeg的版本为0.4.1,sophon-opencv的版本为0.4.1。* 1. 从算能官网中获取‘libsophon_0.4.1_aarch64.tar.gz’,并解压 .. parsed-literal:: tar -xvf libsophon_0.4.1_aarch64.tar.gz 解压后libsophon的目录为‘libsophon_0.4.1_aarch64/opt/sophon/libsophon-0.4.1’ 2. 从算能官网中获取‘sophon-mw_0.4.1_aarch64.tar.gz’,并解压 .. parsed-literal:: tar -xvf sophon-mw_0.4.1_aarch64.tar.gz 解压后sophon-ffmpeg的目录为‘sophon-mw_0.4.1_aarch64/opt/sophon/sophon-ffmpeg_0.4.1’。 解压后sophon-opencv的目录为‘sophon-mw_0.4.1_aarch64/opt/sophon/sophon-opencv_0.4.1’。 **.安装gcc-aarch64-linux-gnu工具链** *如果已经安装,可忽略此步骤* .. parsed-literal:: sudo apt-get install gcc-aarch64-linux-gnu g++-aarch64-linux-gnu **.典型编译方式一** 通过交叉编译的方式,编译出包含bmcv,sophon-ffmpeg,sophon-opencv的SAIL。 1. 下载SOPHON-SAIL源码,解压后进入其源码目录 2. 创建编译文件夹build,并进入build文件夹 .. parsed-literal:: mkdir build && cd build 3. 执行编译命令 .. parsed-literal:: cmake -DBUILD_TYPE=arm_pcie \\ -DBUILD_PYSAIL=OFF \\ -DCMAKE_TOOLCHAIN_FILE=../cmake/BM168x_ARM_PCIE/ToolChain_aarch64_linux.cmake \\ -DLIBSOPHON_BASIC_PATH=libsophon_0.4.1_aarch64/opt/sophon/libsophon-0.4.1 \\ -DFFMPEG_BASIC_PATH=sophon-mw_0.4.1_aarch64/opt/sophon/sophon-ffmpeg_0.4.1 \\ -DOPENCV_BASIC_PATH=sophon-mw_0.4.1_aarch64/opt/sophon/sophon-opencv_0.4.1 .. make sail 4. 安装SAIL动态库及头文件,程序将自动在源码目录下创建‘build_arm_pcie’,编译结果将安装在‘build_arm_pcie’下面 .. parsed-literal:: make install 5. 将‘build_arm_pcie’文件夹下的‘sophon-sail’拷贝至目标ARM主机的‘/opt/sophon’目录下,即可在目标机器上面进行调用。 **.典型编译方式二** 通过交叉编译的方式,编译出不包含bmcv,sophon-ffmpeg,sophon-opencv的SAIL。 *通过此方式编译出来的SAIL无法使用其Decoder、Bmcv等多媒体相关接口。* 1. 下载SOPHON-SAIL源码,解压后进入其源码目录 2. 创建编译文件夹build,并进入build文件夹 .. parsed-literal:: mkdir build && cd build 3. 执行编译命令 .. parsed-literal:: cmake -DBUILD_TYPE=arm_pcie \\ -DONLY_RUNTIME=ON \\ -DBUILD_PYSAIL=OFF \\ -DCMAKE_TOOLCHAIN_FILE=../cmake/BM168x_ARM_PCIE/ToolChain_aarch64_linux.cmake \\ -DLIBSOPHON_BASIC_PATH=libsophon_0.4.1_aarch64/opt/sophon/libsophon-0.4.1 .. make sail 4. 安装SAIL动态库及头文件,程序将自动在源码目录下创建‘build_arm_pcie’,编译结果将安装在‘build_arm_pcie’下面 .. parsed-literal:: make install 5. 将‘build_arm_pcie’文件夹下的‘sophon-sail’拷贝至目标ARM主机的‘/opt/sophon’目录下,即可在目标机器上面进行调用。 LOONGARCH64 MODE :::::::::::::::::::: **.安装loongarch64-linux-gnu工具链** 从LoongArch64官网获取其[交叉编译的工具链](http://ftp.loongnix.cn/toolchain/gcc/release/loongarch/gcc8/loongson-gnu-toolchain-8.3-x86_64-loongarch64-linux-gnu-rc1.1.tar.xz), 解压到本地,解压后的目录结构如下: .. parsed-literal:: └── loongson-gnu-toolchain-8.3-x86_64-loongarch64-linux-gnu-rc1.1 ├── bin ├── lib ├── lib64 ├── libexec ├── loongarch64-linux-gnu ├── share ├── sysroot └── versions **.获取交叉编译需要使用的libsophon,sophon-ffmpeg,sophon-opencv** *此章节所有的编译操作都是在x86主机上,使用交叉编译的方式进行编译。下面示例中选择libsophon的版本为0.4.7, sophon-ffmpeg的版本为0.6.0,sophon-opencv的版本为0.6.0。* **.典型编译方式一** 通过交叉编译的方式,编译出包含bmcv,sophon-ffmpeg,sophon-opencv的SAIL, 1. 下载SOPHON-SAIL源码,解压后进入其源码目录 2. 创建编译文件夹build,并进入build文件夹 .. parsed-literal:: mkdir build && cd build 3. 执行编译命令 .. parsed-literal:: cmake -DBUILD_TYPE=loongarch \\ -DBUILD_PYSAIL=OFF \\ -DTOOLCHAIN_BASIC_PATH=toolchains/loongson-gnu-toolchain-8.3-x86_64-loongarch64-linux-gnu-rc1.1 \\ -DCMAKE_TOOLCHAIN_FILE=../cmake/BM168x_LoongArch64/ToolChain_loongarch64_linux.cmake \\ -DLIBSOPHON_BASIC_PATH=libsophon_0.4.7_loongarch64/opt/sophon/libsophon-0.4.7 \\ -DFFMPEG_BASIC_PATH=sophon-mw_0.6.0_loongarch64/opt/sophon/sophon-ffmpeg_0.6.0 \\ -DOPENCV_BASIC_PATH=sophon-mw_0.6.0_loongarch64/opt/sophon/sophon-opencv_0.6.0 \\ .. make sail 4. 安装SAIL动态库及头文件,程序将自动在源码目录下创建‘build_loongarch’,编译结果将安装在‘build_loongarch’下面 .. parsed-literal:: make install 5. 将‘build_loongarch’文件夹下的‘sophon-sail’拷贝至目标龙芯主机的‘/opt/sophon’目录下,即可在目标机器上调用。 **.典型编译方式二** 通过交叉编译的方式,编译出不包含bmcv,sophon-ffmpeg,sophon-opencv的SAIL。 *通过此方式编译出来的SAIL无法使用其Decoder、Bmcv等多媒体相关接口。* 1. 下载SOPHON-SAIL源码,解压后进入其源码目录 2. 创建编译文件夹build,并进入build文件夹 .. parsed-literal:: mkdir build && cd build 3. 执行编译命令 .. parsed-literal:: cmake -DBUILD_TYPE=loongarch \\ -DBUILD_PYSAIL=OFF \\ -DONLY_RUNTIME=ON \\ -DTOOLCHAIN_BASIC_PATH=toolchains/loongson-gnu-toolchain-8.3-x86_64-loongarch64-linux-gnu-rc1.1 \\ -DCMAKE_TOOLCHAIN_FILE=../cmake/BM168x_LoongArch64/ToolChain_loongarch64_linux.cmake \\ -DLIBSOPHON_BASIC_PATH=libsophon_0.4.7_loongarch64/opt/sophon/libsophon-0.4.7 \\ .. make sail 4. 安装SAIL动态库及头文件,程序将自动在源码目录下创建‘build_loongarch’,编译结果将安装在‘build_loongarch’下面 .. parsed-literal:: make install 5. 将‘build_loongarch’文件夹下的‘sophon-sail’拷贝至目标龙芯主机的‘/opt/sophon’目录下,即可在目标机器上调用。 编译可被Python3接口调用的Wheel文件 >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> PCIE MODE ::::::::::: **.安装libsophon,sophon-ffmpeg,sophon-opencv的SAIL** libsophon,sophon-ffmpeg,sophon-opencv的安装方式可参考算能官方文档 **.典型编译方式一** 使用默认安装路径,编译包含bmcv,sophon-ffmpeg,sophon-opencv的SAIL 1. 下载SOPHON-SAIL源码,解压后进入其源码目录 2. 创建编译文件夹build,并进入build文件夹 .. parsed-literal:: mkdir build && cd build 3. 执行编译命令 .. parsed-literal:: cmake .. make pysail 4. 打包生成python wheel,生成的wheel包的路径为‘python/pcie/dist’,文件名为‘sophon-|ver|-py3-none-any.whl’ .. parsed-literal:: cd ../python/pcie chmod +x sophon_pcie_whl.sh ./sophon_pcie_whl.sh 5. 安装python wheel .. parsed-literal:: pip3 install ./dist/sophon-|ver|-py3-none-any.whl --force-reinstall **.典型编译方式二** 编译不包含bmcv,sophon-ffmpeg,sophon-opencv的SAIL, *通过此方式编译出来的SAIL无法使用其Decoder、Bmcv等多媒体相关接口。* 1. 下载SOPHON-SAIL源码,解压后进入其源码目录 2. 创建编译文件夹build,并进入build文件夹 .. parsed-literal:: mkdir build && cd build 3. 执行编译命令 .. parsed-literal:: cmake -DONLY_RUNTIME=ON .. make pysail 4. 打包生成python wheel,生成的wheel包的路径为‘python/pcie/dist’,文件名为‘sophon-|ver|-py3-none-any.whl’ .. parsed-literal:: cd ../python/pcie chmod +x sophon_pcie_whl.sh ./sophon_pcie_whl.sh 5. 安装python wheel .. parsed-literal:: pip3 install ./dist/sophon-|ver|-py3-none-any.whl --force-reinstall **.典型编译方式三** 如果生产环境与开发环境上的python3版本不一致,可以通过升级python3版本使其保持一致, 也可以通过python3的官方网站获取获取相应的python3包, 或者根据[:ref:`获取在X86主机上进行交叉编译的Python3`]获取已经编译好的python3。 也就是使用非系统默认的python3,编译包含bmcv,sophon-ffmpeg,sophon-opencv的SAIL,并打包到‘build_pcie’目录下, 本示例使用的python3路径为‘python_3.8.2/bin/python3’,python3的动态库目录‘python_3.8.2/lib’。 1. 下载SOPHON-SAIL源码,解压后进入其源码目录 2. 创建编译文件夹build,并进入build文件夹 .. parsed-literal:: mkdir build && cd build 3. 执行编译命令 .. parsed-literal:: cmake -DPYTHON_EXECUTABLE=python_3.8.2/bin/python3 -DCUSTOM_PY_LIBDIR=python_3.8.2/lib .. make pysail 4. 打包生成python wheel,生成的wheel包的路径为‘python/pcie/dist’,文件名为‘sophon-|ver|-py3-none-any.whl’ .. parsed-literal:: cd ../python/pcie chmod +x sophon_pcie_whl.sh ./sophon_pcie_whl.sh 5. 安装python wheel 将‘sophon-|ver|-py3-none-any.whl’拷贝到目标机器上,然后执行如下安装命令 .. parsed-literal:: pip3 install ./dist/sophon-|ver|-py3-none-any.whl --force-reinstall SOC MODE ::::::::::::::: **.获取交叉编译需要使用的libsophon,sophon-ffmpeg,sophon-opencv** *此章节所有的编译操作都是在x86主机上,使用交叉编译的方式进行编译。下面示例中选择libsophon的版本为0.4.1, sophon-ffmpeg的版本为0.4.1,sophon-opencv的版本为0.4.1。* 1. 从算能官网中获取‘libsophon_soc_0.4.1_aarch64.tar.gz’,并解压 .. parsed-literal:: tar -xvf libsophon_soc_0.4.1_aarch64.tar.gz 解压后libsophon的目录为‘libsophon_soc_0.4.1_aarch64/opt/sophon/libsophon-0.4.1’ 2. 从算能官网中获取‘sophon-mw-soc_0.4.1_aarch64.tar.gz’,并解压 .. parsed-literal:: tar -xvf sophon-mw-soc_0.4.1_aarch64.tar.gz 解压后sophon-ffmpeg的目录为‘sophon-mw-soc_0.4.1_aarch64/opt/sophon/sophon-ffmpeg_0.4.1’。 解压后sophon-opencv的目录为‘sophon-mw-soc_0.4.1_aarch64/opt/sophon/sophon-opencv_0.4.1’。 **.安装gcc-aarch64-linux-gnu工具链** *如果已经安装,可忽略此步骤* .. parsed-literal:: sudo apt-get install gcc-aarch64-linux-gnu g++-aarch64-linux-gnu **.典型编译方式一** 使用指定版本的python3(和目标SOC上的python3保持一致),通过交叉编译的方式,编译出包含bmcv,sophon-ffmpeg,sophon-opencv的SAIL, python3的安装方式可通过python官方网站获取, 也可以根据[:ref:`获取在X86主机上进行交叉编译的Python3`]获取已经编译好的python3。 本示例使用的python3路径为‘python_3.8.2/bin/python3’,python3的动态库目录‘python_3.8.2/lib’。 1. 下载SOPHON-SAIL源码,解压后进入其源码目录 2. 创建编译文件夹build,并进入build文件夹 .. parsed-literal:: mkdir build && cd build 3. 执行编译命令 .. parsed-literal:: cmake -DBUILD_TYPE=soc \\ -DCMAKE_TOOLCHAIN_FILE=../cmake/BM168x_SOC/ToolChain_aarch64_linux.cmake \\ -DPYTHON_EXECUTABLE=python_3.8.2/bin/python3 \\ -DCUSTOM_PY_LIBDIR=python_3.8.2/lib \\ -DLIBSOPHON_BASIC_PATH=libsophon_soc_0.4.1_aarch64/opt/sophon/libsophon-0.4.1 \\ -DFFMPEG_BASIC_PATH=sophon-mw-soc_0.4.1_aarch64/opt/sophon/sophon-ffmpeg_0.4.1 \\ -DOPENCV_BASIC_PATH=sophon-mw-soc_0.4.1_aarch64/opt/sophon/sophon-opencv_0.4.1 .. make pysail 4. 打包生成python wheel,生成的wheel包的路径为‘python/soc/dist’,文件名为‘sophon_arm-|ver|-py3-none-any.whl’ .. parsed-literal:: cd ../python/soc chmod +x sophon_soc_whl.sh ./sophon_soc_whl.sh 5. 安装python wheel 将‘sophon_arm-|ver|-py3-none-any.whl’拷贝到目标SOC上,然后执行如下安装命令 .. parsed-literal:: pip3 install sophon_arm-|ver|-py3-none-any.whl --force-reinstall **.典型编译方式二** 使用指定版本的python3(和目标SOC上的python3保持一致),通过交叉编译的方式,编译出不包含bmcv,sophon-ffmpeg,sophon-opencv的SAIL, python3的安装方式可通过python官方网站获取, 也可以根据[:ref:`获取在X86主机上进行交叉编译的Python3`]获取已经编译好的python3。 本示例使用的python3路径为‘python_3.8.2/bin/python3’,python3的动态库目录‘python_3.8.2/lib’。 *通过此方式编译出来的SAIL无法使用其Decoder、Bmcv等多媒体相关接口。* 1. 下载SOPHON-SAIL源码,解压后进入其源码目录 2. 创建编译文件夹build,并进入build文件夹 .. parsed-literal:: mkdir build && cd build 3. 执行编译命令 .. parsed-literal:: cmake -DBUILD_TYPE=soc \\ -DONLY_RUNTIME=ON \\ -DCMAKE_TOOLCHAIN_FILE=../cmake/BM168x_SOC/ToolChain_aarch64_linux.cmake \\ -DPYTHON_EXECUTABLE=python_3.8.2/bin/python3 \\ -DCUSTOM_PY_LIBDIR=python_3.8.2/lib \\ -DLIBSOPHON_BASIC_PATH=libsophon_soc_0.4.1_aarch64/opt/sophon/libsophon-0.4.1 .. make pysail 4. 打包生成python wheel,生成的wheel包的路径为‘python/soc/dist’,文件名为‘sophon_arm-|ver|-py3-none-any.whl’ .. parsed-literal:: cd ../python/soc chmod +x sophon_soc_whl.sh ./sophon_soc_whl.sh 5. 安装python wheel 将‘sophon_arm-|ver|-py3-none-any.whl’拷贝到目标SOC上,然后执行如下安装命令 .. parsed-literal:: pip3 install sophon_arm-|ver|-py3-none-any.whl --force-reinstall ARM PCIE MODE :::::::::::::::: **.获取交叉编译需要使用的libsophon,sophon-ffmpeg,sophon-opencv** *此章节所有的编译操作都是在x86主机上,使用交叉编译的方式进行编译。下面示例中选择libsophon的版本为0.4.1, sophon-ffmpeg的版本为0.4.1,sophon-opencv的版本为0.4.1。* 1. 从算能官网中获取‘libsophon_0.4.1_aarch64.tar.gz’,并解压 .. parsed-literal:: tar -xvf libsophon_0.4.1_aarch64.tar.gz 解压后libsophon的目录为‘libsophon_0.4.1_aarch64/opt/sophon/libsophon-0.4.1’ 2. 从算能官网中获取‘sophon-mw_0.4.1_aarch64.tar.gz’,并解压 .. parsed-literal:: tar -xvf sophon-mw_0.4.1_aarch64.tar.gz 解压后sophon-ffmpeg的目录为‘sophon-mw_0.4.1_aarch64/opt/sophon/sophon-ffmpeg_0.4.1’。 解压后sophon-opencv的目录为‘sophon-mw_0.4.1_aarch64/opt/sophon/sophon-opencv_0.4.1’。 **.安装gcc-aarch64-linux-gnu工具链** *如果已经安装,可忽略此步骤* .. parsed-literal:: sudo apt-get install gcc-aarch64-linux-gnu g++-aarch64-linux-gnu **.典型编译方式一** 使用指定版本的python3(和目标ARM主机上的python3保持一致),通过交叉编译的方式,编译出包含bmcv,sophon-ffmpeg,sophon-opencv的SAIL, python3的安装方式可通过python官方网站获取, 也可以根据[:ref:`获取在X86主机上进行交叉编译的Python3`]获取已经编译好的python3。 本示例使用的python3路径为‘python_3.8.2/bin/python3’,python3的动态库目录‘python_3.8.2/lib’。 1. 下载SOPHON-SAIL源码,解压后进入其源码目录 2. 创建编译文件夹build,并进入build文件夹 .. parsed-literal:: mkdir build && cd build 3. 执行编译命令 .. parsed-literal:: cmake -DBUILD_TYPE=arm_pcie \\ -DCMAKE_TOOLCHAIN_FILE=../cmake/BM168x_ARM_PCIE/ToolChain_aarch64_linux.cmake \\ -DPYTHON_EXECUTABLE=python_3.8.2/bin/python3 \\ -DCUSTOM_PY_LIBDIR=python_3.8.2/lib \\ -DLIBSOPHON_BASIC_PATH=libsophon_0.4.1_aarch64/opt/sophon/libsophon-0.4.1 \\ -DFFMPEG_BASIC_PATH=sophon-mw_0.4.1_aarch64/opt/sophon/sophon-ffmpeg_0.4.1 \\ -DOPENCV_BASIC_PATH=sophon-mw_0.4.1_aarch64/opt/sophon/sophon-opencv_0.4.1 .. make pysail 4. 打包生成python wheel,生成的wheel包的路径为‘python/arm_pcie/dist’,文件名为‘sophon_arm_pcie-|ver|-py3-none-any.whl’ .. parsed-literal:: cd ../python/arm_pcie chmod +x sophon_arm_pcie_whl.sh ./sophon_arm_pcie_whl.sh 5. 安装python wheel 将‘sophon_arm_pcie-|ver|-py3-none-any.whl’拷贝到目标ARM主机上,然后执行如下安装命令 .. parsed-literal:: pip3 install sophon_arm_pcie-|ver|-py3-none-any.whl --force-reinstall **.典型编译方式二** 使用指定版本的python3(和目标ARM主机上的python3保持一致),通过交叉编译的方式,编译出不包含bmcv,sophon-ffmpeg,sophon-opencv的SAIL, python3的安装方式可通过python官方网站获取, 也可以根据[:ref:`获取在X86主机上进行交叉编译的Python3`]获取已经编译好的python3。 本示例使用的python3路径为‘python_3.8.2/bin/python3’,python3的动态库目录‘python_3.8.2/lib’。 *通过此方式编译出来的SAIL无法使用其Decoder、Bmcv等多媒体相关接口。* 1. 下载SOPHON-SAIL源码,解压后进入其源码目录 2. 创建编译文件夹build,并进入build文件夹 .. parsed-literal:: mkdir build && cd build 3. 执行编译命令 .. parsed-literal:: cmake -DBUILD_TYPE=arm_pcie \\ -DONLY_RUNTIME=ON \\ -DCMAKE_TOOLCHAIN_FILE=../cmake/BM168x_ARM_PCIE/ToolChain_aarch64_linux.cmake \\ -DPYTHON_EXECUTABLE=python_3.8.2/bin/python3 \\ -DCUSTOM_PY_LIBDIR=python_3.8.2/lib \\ -DLIBSOPHON_BASIC_PATH=libsophon_0.4.1_aarch64/opt/sophon/libsophon-0.4.1 .. make 4. 打包生成python wheel,生成的wheel包的路径为‘python/arm_pcie/dist’,文件名为‘sophon_arm_pcie-|ver|-py3-none-any.whl’ .. parsed-literal:: cd ../python/arm_pcie chmod +x sophon_arm_pcie_whl.sh ./sophon_arm_pcie_whl.sh 5. 安装python wheel 将‘sophon_arm_pcie-|ver|-py3-none-any.whl’拷贝到目标ARM主机上,然后执行如下安装命令 .. parsed-literal:: pip3 install sophon_arm_pcie-|ver|-py3-none-any.whl --force-reinstall LOONGARCH64 MODE :::::::::::::::::::: **.安装loongarch64-linux-gnu工具链** 从LoongArch64官网获取其[交叉编译的工具链](http://ftp.loongnix.cn/toolchain/gcc/release/loongarch/gcc8/loongson-gnu-toolchain-8.3-x86_64-loongarch64-linux-gnu-rc1.1.tar.xz), 解压到本地,解压后的目录结构如下: .. parsed-literal:: └── loongson-gnu-toolchain-8.3-x86_64-loongarch64-linux-gnu-rc1.1 ├── bin ├── lib ├── lib64 ├── libexec ├── loongarch64-linux-gnu ├── share ├── sysroot └── versions **.获取交叉编译需要使用的libsophon** *此章节所有的编译操作都是在x86主机上,使用交叉编译的方式进行编译。下面示例中选择libsophon的版本为0.4.7。* **.典型编译方式一** 使用指定版本的python3(和目标龙芯主机上的python3保持一致),通过交叉编译的方式,编译出不包含bmcv,sophon-ffmpeg,sophon-opencv的SAIL, python3的安装方式可通过python官方网站获取, 也可以根据[:ref:`获取在X86主机上进行交叉编译的Python3`]获取已经编译好的python3。 本示例使用的python3路径为‘python_3.7.3/bin/python3’,python3的动态库目录‘python_3.7.3/lib’。 *通过此方式编译出来的SAIL无法使用其Decoder、Bmcv等多媒体相关接口。* 1. 下载SOPHON-SAIL源码,解压后进入其源码目录 2. 创建编译文件夹build,并进入build文件夹 .. parsed-literal:: mkdir build && cd build 3. 执行编译命令 .. parsed-literal:: cmake -DBUILD_TYPE=loongarch \\ -DONLY_RUNTIME=ON \\ -DTOOLCHAIN_BASIC_PATH=toolchains/loongson-gnu-toolchain-8.3-x86_64-loongarch64-linux-gnu-rc1.1 \\ -DCMAKE_TOOLCHAIN_FILE=../cmake/BM168x_LoongArch64/ToolChain_loongarch64_linux.cmake \\ -DPYTHON_EXECUTABLE=python_3.7.3/bin/python3 \\ -DCUSTOM_PY_LIBDIR=python_3.7.3/lib \\ -DLIBSOPHON_BASIC_PATH=libsophon_0.4.7_loongarch64/opt/sophon/libsophon-0.4.7 \\ .. make pysail *cmake选项中的路径需要您根据环境的配置进行调整* * DLIBSOPHON_BASIC_PATH: SophonSDK中libsophon下对应libsophon\__loongarch64.tar.gz解压后的目录。 4. 打包生成python wheel,生成的wheel包的路径为‘python/loongarch64/dist’,文件名为‘sophon_loongarch64-|ver|-py3-none-any.whl’ .. parsed-literal:: cd ../python/loongarch64 chmod +x sophon_loongarch64_whl.sh ./sophon_loongarch64_whl.sh 注:此处易出现setuptools版本过高的问题,原则上python3.8最高兼容setuptools版本 < 66.0.0 5. 安装python wheel 将‘sophon_loongarch64-|ver|-py3-none-any.whl’拷贝到目标主机上,然后执行如下安装命令 .. parsed-literal:: pip3 install sophon_loongarch64-|ver|-py3-none-any.whl --force-reinstall 编译用户手册 >>>>>>>>>>>>>> **.安装软件包** .. parsed-literal:: # 更新apt sudo apt update # 安装latex sudo apt install texlive-xetex texlive-latex-recommended # 安装Sphinx pip3 install sphinx sphinx-autobuild sphinx_rtd_theme rst2pdf # 安装结巴中文分词库,以支持中文搜索 pip3 install jieba3k **.安装字体** [Fandol](https://ctan.org/pkg/fandol) - Four basic fonts for Chinese typesetting .. parsed-literal:: # 下载Fandol字体 wget http://mirrors.ctan.org/fonts/fandol.zip # 解压缩字体包 unzip fandol.zip # 拷贝安装字体包 sudo cp -r fandol /usr/share/fonts/ cp -r fandol ~/.fonts **.执行编译** 下载SOPHON-SAIL源码,解压后进入其源码的docs目录 .. parsed-literal:: cd docs make pdf 编译好的用户手册路径为‘docs/build/sophon-sail_zh.pdf’ *如果编译仍然报错,可以安装以下 ‘sudo apt-get install texlive-lang-chinese’,然后重新执行上述命令。* 使用SAIL的Python接口进行开发 _______________________________ PCIE MODE >>>>>>>>>>>>>> 在使用PCIE MODE编译好SAIL,执行安装python wheel之后,即可以使用python中调用SAIL,其接口文档可参考API章节。 SOC MODE >>>>>>>>>>>>>> **.使用自己编译的Python wheel包** 在使用SOC MODE通过交叉编译的方式编译好SAIL之后,将python wheel拷贝到SOC上面进行安装,即可以使用python中调用SAIL,其接口文档可参考API章节。 **.使用预编译的Python wheel包** 1. 查看SOC上的libsophon版本和sophon-mw(sophon-ffmpeg,sophon-opencv)的版本 .. parsed-literal:: ls /opt/sophon/ 2. 查看SOC上的Python3版本 .. parsed-literal:: python3 --version 3. 从预编译的Python wheel包中找到对应版本的wheel包,将对应的wheel包拷贝到SOC上面进行安装,即可以使用python中调用SAIL,其接口文档可参考API章节。 ARM PCIE MODE >>>>>>>>>>>>>> 在使用ARM PCIE MODE通过交叉编译的方式编译好SAIL之后,将python wheel拷贝到ARM主机上面进行安装,即可以在python中调用SAIL,其接口文档可参考API章节。 1. 查看ARM主机上的libsophon版本和sophon-mw(sophon-ffmpeg,sophon-opencv)的版本 .. parsed-literal:: cat /opt/sophon/ 2. 查看ARM主机上的Python3版本 .. parsed-literal:: python3 --version 3. 从预编译的Python wheel包中找到对应版本的wheel包,将对应的wheel包拷贝到ARM主机上面进行安装,即可以使用python中调用SAIL,其接口文档可参考API章节。 使用SAIL的C++接口进行开发 _______________________________ PCIE MODE >>>>>>>>>>>>>> 在使用PCIE MODE编译好SAIL,并且通过执行‘sudo make install’或者通过拷贝的方式安装好SAIL的c++库之后, 推荐使用cmake来将SAIL中的库链接到自己的程序中,如果需要使用SAIL多媒体相关的功能, 也需要将libsophon,sophon-ffmpeg,sophon-opencv的头文件目录及动态库目录添加到自己的程序中。 可以在您程序的CMakeLists.txt中添加如下段落: .. parsed-literal:: find_package(libsophon REQUIRED) include_directories(${LIBSOPHON_INCLUDE_DIRS}) # 添加libsophon的头文件目录 set(SAIL_DIR /opt/sophon/sophon-sail/lib/cmake) find_package(SAIL REQUIRED) include_directories(${SAIL_INCLUDE_DIRS}) link_directories(${SAIL_LIB_DIRS}) # 添加SAIL的头文件及动态库目录 find_package(libsophon REQUIRED) include_directories(${LIBSOPHON_INCLUDE_DIRS}) # 添加libsophon的头文件目录 set(OpenCV_DIR /opt/sophon/sophon-opencv-latest/lib/cmake/opencv4) find_package(OpenCV REQUIRED) include_directories(${OpenCV_INCLUDE_DIRS}) # 添加sophon-opencv的头文件目录 set(FFMPEG_DIR /opt/sophon/sophon-ffmpeg-latest/lib/cmake) find_package(FFMPEG REQUIRED) include_directories(${FFMPEG_INCLUDE_DIRS}) link_directories(${FFMPEG_LIB_DIRS}) # 添加sophon-ffmpeg的头文件及动态库目录 add_executable(${YOUR_TARGET_NAME} ${YOUR_SOURCE_FILES}) target_link_libraries(${YOUR_TARGET_NAME} sail) 在您的代码中即可以调用sail中的函数: .. code-block:: cpp #define USE_FFMPEG 1 #define USE_OPENCV 1 #define USE_BMCV 1 #include #include #include #include using namespace std; int main() { int device_id = 0; std::string video_path = "test.avi"; sail::Decoder decoder(video_path,true,device_id); if(!decoder.is_opened()){ printf("Video[%s] read failed!\n",video_path.c_str()); exit(1) ; } sail::Handle handle(device_id); sail::Bmcv bmcv(handle); while(true){ sail::BMImage ost_image = decoder.read(handle); bmcv.imwrite("test.jpg", ost_image); break; } return 0; } SOC MODE >>>>>>>>>>>>>> **.SOC板卡上编译程序** 在SOC板卡上安装好libsophon,sophon-ffmpeg,sophon-opencv,及SAIL之后,您可以参考PCIE MODE的开发方法使用cmake将SAIL中的库链接到自己的程序中, 如果需要使用SAIL多媒体相关的功能, 也需要将libsophon,sophon-ffmpeg,sophon-opencv的头文件目录及动态库目录添加到自己的程序中。 **.x86交叉编译程序** 如果您希望使用SAIL搭建交叉编译环境,您需要用到libsophon,sophon-ffmpeg,sophon-opencv以及gcc-aarch64-linux-gnu工具链。 **.创建‘soc-sdk’文件夹** 创建‘soc-sdk’文件夹,后续交叉编译需要用到的头文件及动态库都将存放在此目录中。 .. parsed-literal:: mkdir soc-sdk **.获取交叉编译需要使用的libsophon,sophon-ffmpeg,sophon-opencv** *下面示例中选择libsophon的版本为0.4.1, sophon-ffmpeg的版本为0.4.1,sophon-opencv的版本为0.4.1。* 1. 从算能官网中获取‘libsophon_soc_0.4.1_aarch64.tar.gz’,并解压拷贝至‘soc-sdk’文件夹 .. parsed-literal:: tar -xvf libsophon_soc_0.4.1_aarch64.tar.gz cp -r libsophon_soc_0.4.1_aarch64/opt/sophon/libsophon-0.4.1/include soc-sdk cp -r libsophon_soc_0.4.1_aarch64/opt/sophon/libsophon-0.4.1/lib soc-sdk 解压后libsophon的目录为‘libsophon_soc_0.4.1_aarch64/opt/sophon/libsophon-0.4.1’ 2. 从算能官网中获取‘sophon-mw-soc_0.4.1_aarch64.tar.gz’,并解压拷贝至‘soc-sdk’文件夹 .. parsed-literal:: tar -xvf sophon-mw-soc_0.4.1_aarch64.tar.gz cp -r sophon-mw-soc_0.4.1_aarch64/opt/sophon/sophon-ffmpeg_0.4.1/include soc-sdk cp -r sophon-mw-soc_0.4.1_aarch64/opt/sophon/sophon-ffmpeg_0.4.1/lib soc-sdk cp -r sophon-mw-soc_0.4.1_aarch64/opt/sophon/sophon-opencv_0.4.1/include/opencv4/opencv2 soc-sdk/include cp -r sophon-mw-soc_0.4.1_aarch64/opt/sophon/sophon-opencv_0.4.1/lib soc-sdk **.将交叉编译好的SAIL,也即是‘build_soc’拷贝至‘soc-sdk’文件夹** .. parsed-literal:: cp build_soc/sophon-sail/include soc-sdk cp build_soc/sophon-sail/lib soc-sdk **.安装gcc-aarch64-linux-gnu工具链** *如果已经安装,可忽略此步骤* .. parsed-literal:: sudo apt-get install gcc-aarch64-linux-gnu g++-aarch64-linux-gnu 上述步骤配置好之后,可以通过配置cmake来完成交叉编译,在您程序的CMakeLists.txt中添加如下段落: *CMakeLists.txt中需要使用‘soc-sdk’的绝对路径为‘/opt/sophon/soc-sdk’,实际应用中需要根据自己实际的位置来进行配置。* .. parsed-literal:: set(CMAKE_C_COMPILER aarch64-linux-gnu-gcc) set(CMAKE_ASM_COMPILER aarch64-linux-gnu-gcc) set(CMAKE_CXX_COMPILER aarch64-linux-gnu-g++) include_directories("/opt/sophon/soc-sdk/include") include_directories("/opt/sophon/soc-sdk/include/sail") # 添加交叉编译需要使用的头文件目录 link_directories("/opt/sophon/soc-sdk/lib") # 添加交叉编译需要使用的动态库目录 add_executable(${YOUR_TARGET_NAME} ${YOUR_SOURCE_FILES}) target_link_libraries(${YOUR_TARGET_NAME} sail) # sail为需要链接的库 ARM PCIE MODE >>>>>>>>>>>>>> **.ARM主机上编译程序** 在ARM主机上安装好libsophon,sophon-ffmpeg,sophon-opencv,及SAIL之后,您可以参考PCIE MODE的开发方法使用cmake将SAIL中的库链接到自己的程序中, 如果需要使用SAIL多媒体相关的功能, 也需要将libsophon,sophon-ffmpeg,sophon-opencv的头文件目录及动态库目录添加到自己的程序中。 **.x86交叉编译程序** 如果您希望使用SAIL搭建交叉编译环境,您需要用到libsophon,sophon-ffmpeg,sophon-opencv以及gcc-aarch64-linux-gnu工具链。 **.创建‘arm_pcie-sdk’文件夹** 创建‘arm_pcie-sdk’文件夹,后续交叉编译需要用到的头文件及动态库都将存放在此目录中。 .. parsed-literal:: mkdir arm_pcie-sdk **.获取交叉编译需要使用的libsophon,sophon-ffmpeg,sophon-opencv** *下面示例中选择libsophon的版本为0.4.1, sophon-ffmpeg的版本为0.4.1,sophon-opencv的版本为0.4.1。* 1. 从算能官网中获取‘libsophon_0.4.1_aarch64.tar.gz’,并解压拷贝至‘arm_pcie-sdk’文件夹 .. parsed-literal:: tar -xvf libsophon_0.4.1_aarch64.tar.gz cp -r libsophon_0.4.1_aarch64/opt/sophon/libsophon-0.4.1/include arm_pcie-sdk cp -r libsophon_0.4.1_aarch64/opt/sophon/libsophon-0.4.1/lib arm_pcie-sdk 解压后libsophon的目录为‘libsophon_0.4.1_aarch64/opt/sophon/libsophon-0.4.1’ 2. 从算能官网中获取‘sophon-mw_0.4.1_aarch64.tar.gz’,并解压拷贝至‘arm_pcie-sdk’文件夹 .. parsed-literal:: tar -xvf sophon-mw_0.4.1_aarch64.tar.gz cp -r sophon-mw_0.4.1_aarch64/opt/sophon/sophon-ffmpeg_0.4.1/include arm_pcie-sdk cp -r sophon-mw_0.4.1_aarch64/opt/sophon/sophon-ffmpeg_0.4.1/lib arm_pcie-sdk cp -r sophon-mw_0.4.1_aarch64/opt/sophon/sophon-opencv_0.4.1/include/opencv4/opencv2 arm_pcie-sdk/include cp -r sophon-mw_0.4.1_aarch64/opt/sophon/sophon-opencv_0.4.1/lib arm_pcie-sdk **.将交叉编译好的SAIL,也即是‘build_arm_pcie’拷贝至‘arm_pcie-sdk’文件夹** .. parsed-literal:: cp build_arm_pcie/sophon-sail/include arm_pcie-sdk cp build_arm_pcie/sophon-sail/lib arm_pcie-sdk **.安装gcc-aarch64-linux-gnu工具链** *如果已经安装,可忽略此步骤* .. parsed-literal:: sudo apt-get install gcc-aarch64-linux-gnu g++-aarch64-linux-gnu 上述步骤配置好之后,可以通过配置cmake来完成交叉编译,在您程序的CMakeLists.txt中添加如下段落: *CMakeLists.txt中需要使用‘arm_pcie-sdk’的绝对路径为‘/opt/sophon/arm_pcie-sdk’,实际应用中需要根据自己实际的位置来进行配置。* .. parsed-literal:: set(CMAKE_C_COMPILER aarch64-linux-gnu-gcc) set(CMAKE_ASM_COMPILER aarch64-linux-gnu-gcc) set(CMAKE_CXX_COMPILER aarch64-linux-gnu-g++) include_directories("/opt/sophon/arm_pcie-sdk/include") include_directories("/opt/sophon/arm_pcie-sdk/include/sail") # 添加交叉编译需要使用的头文件目录 link_directories("/opt/sophon/arm_pcie-sdk/lib") # 添加交叉编译需要使用的动态库目录 add_executable(${YOUR_TARGET_NAME} ${YOUR_SOURCE_FILES}) target_link_libraries(${YOUR_TARGET_NAME} sail) # sail为需要链接的库