SOPHON算能科技新版SDK环境配置以及C++ demo使用过程

时间:2024-02-21 17:38:01

目录

1 SDK大包下载

2 获取SDK中的库文件和头文件

2.1 注意事项

2.2 交叉编译环境搭建

2.2.1 首先安装工具链

2.2.2 解压sophon-img包里的libsophon_soc__aarch64.tar.gz,将lib和include的所有内容拷贝到soc-sdk文件夹

2.2.3 解压sophon-mw包里的sophon-mw-soc__aarch64.tar.gz,将sophon-mw下lib和include的所有内容拷贝到soc-sdk文件夹。

2.3 运行环境配置

2.3.1 格式化内存卡问题

3 C++推理demo代码

参考文献:


1 SDK大包下载

技术资料

从上面网址下载

 下载完之后解压,里面包含很多内容

这篇博客主要记录下自己使用新的C++推理demo以及新的SDK库和头文件的过程,至于使用SDK大包里面的mlir进行模型转换的方法步骤在另一篇博客里面:利用tpu-mlir工具将深度学习算法模型转成算能科技平台.bmodel模型的方法步骤_mlir tpu-CSDN博客

2 获取SDK中的库文件和头文件

要想编译或者运行C++ demo,那么都需要用到SDK里面的库文件或者头文件,因此首先要获取头文件或者库文件,下面的操作都是基于第一步下载的SDK大包的基础上进行的。

2.1 注意事项

先简单看一下SDK引言里面的注意事项

  • 新的SOPHONSDK不再提供官方docker,可直接在宿主机上使用deb包安装软件库包,也可以参考《LIBSOPHON使用手册》第6章构建自己的镜像。

  • PCIe模式下,如果已经装了BM1684 SDK 的驱动,请先卸载旧的 BM1684 SDK 的驱动,再安装sophon-driver_x.y.z_amd64.deb包,具体可参考《LIBSOPHON使用手册》第3章。

  • sophon-mw-sophon-ffmpeg 依赖 sophon-libsophon 包,而 sophon-mw-sophon-opencv 依赖 sophon-mw-sophon-ffmpeg,因此在安装次序上必须先安装 libsophon,然后 sophon-mw-sophon-ffmpeg,最后安装 sophon-mw-sophon-opencv。

  • 推荐使用cmake中的find_package查找libsophon和sophon-mw的库包,并链接到自己的程序中。

  • 部分头文件不包含于libsophon,如bm_wrapper.hpp、utils.hpp。

  • SoC模式下,原来/system下的软件库包,现位于/opt/sophon/下。

  • SoC模式下,通过开机时的systemd服务,自动加载/opt/sophon/libsophon-current/data下的ko内核模块。如用户定义的自启动服务,并且依赖BM168X,请确保在ko加载后启动。

  • 新的TPU-MLIR和TPU-NNTC使用tpu_model替换原来的bm_model.bin,使用方法相同。

2.2 交叉编译环境搭建

2.2.1 首先安装工具链

sudo apt-get install gcc-aarch64-linux-gnu g++-aarch64-linux-gnu

这个我电脑中之前就有

which aarch64-linux-gnu-g++
/data/chw/gcc-linaro-11.3.1-2022.06-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-g++

2.2.2 解压sophon-img包里的libsophon_soc_<x.y.z>_aarch64.tar.gz,将lib和include的所有内容拷贝到soc-sdk文件夹

cd Release_v2312-LTS/
cd sophon-img_20231116_213307/
mkdir -p soc-sdk
tar -zxf libsophon_soc_0.5.0_aarch64.tar.gz 
cp -drf libsophon_soc_0.5.0_aarch64/opt/sophon/libsophon-0.5.0/include/  ./soc-sdk/
cp -drf libsophon_soc_0.5.0_aarch64/opt/sophon/libsophon-0.5.0/lib/  ./soc-sdk/
ll soc-sdk/

2.2.3 解压sophon-mw包里的sophon-mw-soc_<x.y.z>_aarch64.tar.gz,将sophon-mw下lib和include的所有内容拷贝到soc-sdk文件夹。

cd sophon-mw_20231116_113811/
tar -zxf sophon-mw-soc_0.7.3_aarch64.tar.gz 
cp -drf sophon-mw-soc_0.7.3_aarch64/opt/sophon/sophon-ffmpeg_0.7.3/lib ../sophon-img_20231116_213307/soc-sdk/
cp -drf sophon-mw-soc_0.7.3_aarch64/opt/sophon/sophon-ffmpeg_0.7.3/include  ../sophon-img_20231116_213307/soc-sdk/
cp -drf sophon-mw-soc_0.7.3_aarch64/opt/sophon/sophon-opencv_0.7.3/lib/  ../sophon-img_20231116_213307/soc-sdk/
cp -drf sophon-mw-soc_0.7.3_aarch64/opt/sophon/sophon-opencv_0.7.3/include/  ../sophon-img_20231116_213307/soc-sdk/

2.3 运行环境配置

我使用的是SOC模式,而非PCIE模式,因此参考文档中的环境配置-SOC章节。

使用sdk大包中sophon-img下的sdcard刷机包刷机,然后/opt/sophon/下就会有libsophon、sophon-opencv和sophon-ffmpeg运行库包。只需用export PYTHONPATH=$PYTHONPATH:设置环境变量即可。

2.3.1 格式化内存卡问题

 我想用内存卡对算能科技的BM1684盒子进行刷机,结果没有刷机成功,问题在于我的内存卡是用windows系统格式化的,然后格式化之后的内存卡有个多余的分区

而盒子要求这里比如只能有sdb不能有sdb1. 

a、显示sd卡状态。执行命令 lsblk 会显示sd卡会有分区,比如sdb1
b、取消挂载。umount /dev/sdb1
c、格式化TF卡,sudo mkfs.vfat -I /dev/sdb(合并所有分区,例如:/dev/sdb设备下 sdb1 、sdb2分区,使用-I参数可以合并格式化所有分区 )
d、检查sd卡是否合并成功, lsblk -f 只有sdb,没有sdb1等分区,-f参数还可以看到格式是不是vfat。

3 C++推理demo代码

C++推理demo在github上有:https://github.com/sophgo/sophon-demo/tree/release/sample/YOLOv5/cpp/yolov5_bmcv

在上面下载的SDK大包里面也有C++推理demo代码

但是这时候如果想编译,那么还缺少算能的库和头文件,在前面soc-sdk的时候已经把库和头文件全都拷贝过去了,这里把前面的库和头文件都拷贝过来,

 2037  cp -drf  /data/chw/bitedalu_20220713/Release_230701-public/sophon-img_20230810_221353/soc-sdk/include/* ./include/
 2038  cp -drf  /data/chw/bitedalu_20220713/Release_230701-public/sophon-img_20230810_221353/soc-sdk/lib/* ./lib/

然后还有一些头文件也需要拷贝过来,就是在

还有个源文件也要拷贝过来

然后,我这里创建了个demo文件夹把mainc.pp放里面,

创建了cpp文件件把yolov5.cpp和ff_decode.cpp放里面。

最后的整体目录如下

├── chw_makefile
├── CMakeLists.txt
├── cpp
│   ├── ff_decode.cpp
│   ├── ff_decode.o
│   ├── yolov5.cpp
│   └── yolov5.o
├── data
│   ├── coco.names
│   ├── images
│   │   ├── 1111bus.jpg
│   │   ├── 1.jpg
│   │   ├── accident.mp4
│   │   ├── bus.jpg
│   │   ├── conflict   .mp4
│   │   ├── overflow.mp4
│   │   └── 南京路-东海路南电警-EQ.mp4
│   └── models
│       ├── easnet_fp8_640_1.bmodel_new
│       ├── easnet_fp8_640_1.bmodel_old
│       └── yolov5s_1684_f32_sym.bmodel
├── demo
│   └── main.cpp
├── env_demo
├── include
│   ├── bm1682_profile.h
│   ├── bm1684_profile.h
│   ├── bm1684x_profile.h
│   ├── bmblob.h
│   ├── bmcnnctx.h
│   ├── bmcpu_common.h
│   ├── bmcpu_dev.h
│   ├── bmcpu.h
│   ├── bmcv_api_ext_c.h
│   ├── bmcv_api_ext.h
│   ├── bmcv_api.h
│   ├── bmdef.h
│   ├── bmfunc
│   │   ├── bmdnn_func.h
│   │   └── bmfunc.h
│   ├── bm_ion.h
│   ├── bmjpuapi.h
│   ├── bmjpuapi_jpeg.h
│   ├── bmlib_runtime.h
│   ├── bmlog.hpp
│   ├── bmnet.h
│   ├── bmnn_utils.h
│   ├── bmodel.hpp
│   ├── bmqueue.h
│   ├── bmrt_arch_info.h
│   ├── bmruntime_common.h
│   ├── bmruntime_cpp.h
│   ├── bmruntime.h
│   ├── bmruntime_interface.h
│   ├── bmruntime_legacy.h
│   ├── bmruntime_profile.h
│   ├── bmtap2
│   │   ├── bmruntime_bmnet.h
│   │   ├── bmruntime.hpp
│   │   └── bmruntime_inner.h
│   ├── bm_video_interface.h
│   ├── bmvppapi.h
│   ├── bmvpp.h
│   ├── bmvpuapi_common.h
│   ├── bmvpuapi_enc.h
│   ├── bmvpuapi.h
│   ├── bmvpu.h
│   ├── bmvpu_logging.h
│   ├── bmvpu_types.h
│   ├── bm_wrapper.hpp
│   ├── ff_decode.hpp
│   ├── flatbuffers
│   │   ├── base.h
│   │   ├── code_generators.h
│   │   ├── flatbuffers.h
│   │   ├── flatc.h
│   │   ├── flexbuffers.h
│   │   ├── grpc.h
│   │   ├── hash.h
│   │   ├── idl.h
│   │   ├── minireflect.h
│   │   ├── reflection_generated.h
│   │   ├── reflection.h
│   │   ├── registry.h
│   │   ├── stl_emulation.h
│   │   └── util.h
│   ├── jpu_io.h
│   ├── jpu_lib.h
│   ├── jpu_logging.h
│   ├── json.hpp
│   ├── libavcodec
│   │   ├── ac3_parser.h
│   │   ├── adts_parser.h
│   │   ├── avcodec.h
│   │   ├── avdct.h
│   │   ├── avfft.h
│   │   ├── d3d11va.h
│   │   ├── dirac.h
│   │   ├── dv_profile.h
│   │   ├── dxva2.h
│   │   ├── jni.h
│   │   ├── mediacodec.h
│   │   ├── qsv.h
│   │   ├── vaapi.h
│   │   ├── vdpau.h
│   │   ├── version.h
│   │   ├── videotoolbox.h
│   │   ├── vorbis_parser.h
│   │   └── xvmc.h
│   ├── libavdevice
│   │   ├── avdevice.h
│   │   └── version.h
│   ├── libavfilter
│   │   ├── avfilter.h
│   │   ├── buffersink.h
│   │   ├── buffersrc.h
│   │   └── version.h
│   ├── libavformat
│   │   ├── avformat.h
│   │   ├── avio.h
│   │   └── version.h
│   ├── libavutil
│   │   ├── adler32.h
│   │   ├── aes_ctr.h
│   │   ├── aes.h
│   │   ├── attributes.h
│   │   ├── audio_fifo.h
│   │   ├── avassert.h
│   │   ├── avconfig.h
│   │   ├── avstring.h
│   │   ├── avutil.h
│   │   ├── base64.h
│   │   ├── blowfish.h
│   │   ├── bprint.h
│   │   ├── bswap.h
│   │   ├── buffer.h
│   │   ├── camellia.h
│   │   ├── cast5.h
│   │   ├── channel_layout.h
│   │   ├── common.h
│   │   ├── cpu.h
│   │   ├── crc.h
│   │   ├── des.h
│   │   ├── dict.h
│   │   ├── display.h
│   │   ├── downmix_info.h
│   │   ├── encryption_info.h
│   │   ├── error.h
│   │   ├── eval.h
│   │   ├── ffversion.h
│   │   ├── fifo.h
│   │   ├── file.h
│   │   ├── frame.h
│   │   ├── hash.h
│   │   ├── hmac.h
│   │   ├── hwcontext_bmcodec.h
│   │   ├── hwcontext_cuda.h
│   │   ├── hwcontext_d3d11va.h
│   │   ├── hwcontext_drm.h
│   │   ├── hwcontext_dxva2.h
│   │   ├── hwcontext.h
│   │   ├── hwcontext_mediacodec.h
│   │   ├── hwcontext_qsv.h
│   │   ├── hwcontext_vaapi.h
│   │   ├── hwcontext_vdpau.h
│   │   ├── hwcontext_videotoolbox.h
│   │   ├── imgutils.h
│   │   ├── intfloat.h
│   │   ├── intreadwrite.h
│   │   ├── lfg.h
│   │   ├── log.h
│   │   ├── lzo.h
│   │   ├── macros.h
│   │   ├── mastering_display_metadata.h
│   │   ├── mathematics.h
│   │   ├── md5.h
│   │   ├── mem.h
│   │   ├── motion_vector.h
│   │   ├── murmur3.h
│   │   ├── opt.h
│   │   ├── parseutils.h
│   │   ├── pixdesc.h
│   │   ├── pixelutils.h
│   │   ├── pixfmt.h
│   │   ├── random_seed.h
│   │   ├── rational.h
│   │   ├── rc4.h
│   │   ├── replaygain.h
│   │   ├── ripemd.h
│   │   ├── samplefmt.h
│   │   ├── sha512.h
│   │   ├── sha.h
│   │   ├── spherical.h
│   │   ├── stereo3d.h
│   │   ├── tea.h
│   │   ├── threadmessage.h
│   │   ├── timecode.h
│   │   ├── time.h
│   │   ├── timestamp.h
│   │   ├── tree.h
│   │   ├── twofish.h
│   │   ├── version.h
│   │   └── xtea.h
│   ├── libswresample
│   │   ├── swresample.h
│   │   └── version.h
│   ├── libswscale
│   │   ├── swscale.h
│   │   └── version.h
│   ├── libyuv
│   │   ├── basic_types.h
│   │   ├── compare.h
│   │   ├── compare_row.h
│   │   ├── convert_argb.h
│   │   ├── convert_from_argb.h
│   │   ├── convert_from.h
│   │   ├── convert.h
│   │   ├── cpu_id.h
│   │   ├── macros_msa.h
│   │   ├── mjpeg_decoder.h
│   │   ├── planar_functions.h
│   │   ├── rotate_argb.h
│   │   ├── rotate.h
│   │   ├── rotate_row.h
│   │   ├── row.h
│   │   ├── scale_argb.h
│   │   ├── scale.h
│   │   ├── scale_row.h
│   │   ├── version.h
│   │   └── video_common.h
│   ├── libyuv.h
│   ├── md5
│   │   └── md5.h
│   ├── model_generated.h
│   ├── opencv4
│   │   └── opencv2
│   │       ├── calib3d
│   │       │   ├── calib3d_c.h
│   │       │   └── calib3d.hpp
│   │       ├── calib3d.hpp
│   │       ├── core
│   │       │   ├── affine.hpp
│   │       │   ├── av.hpp
│   │       │   ├── base.hpp
│   │       │   ├── bindings_utils.hpp
│   │       │   ├── bmcv.hpp
│   │       │   ├── bufferpool.hpp
│   │       │   ├── check.hpp
│   │       │   ├── core_c.h
│   │       │   ├── core.hpp
│   │       │   ├── cuda
│   │       │   │   ├── block.hpp
│   │       │   │   ├── border_interpolate.hpp
│   │       │   │   ├── color.hpp
│   │       │   │   ├── common.hpp
│   │       │   │   ├── datamov_utils.hpp
│   │       │   │   ├── detail
│   │       │   │   │   ├── color_detail.hpp
│   │       │   │   │   ├── reduce.hpp
│   │       │   │   │   ├── reduce_key_val.hpp
│   │       │   │   │   ├── transform_detail.hpp
│   │       │   │   │   ├── type_traits_detail.hpp
│   │       │   │   │   └── vec_distance_detail.hpp
│   │       │   │   ├── dynamic_smem.hpp
│   │       │   │   ├── emulation.hpp
│   │       │   │   ├── filters.hpp
│   │       │   │   ├── funcattrib.hpp
│   │       │   │   ├── functional.hpp
│   │       │   │   ├── limits.hpp
│   │       │   │   ├── reduce.hpp
│   │       │   │   ├── saturate_cast.hpp
│   │       │   │   ├── scan.hpp
│   │       │   │   ├── simd_functions.hpp
│   │       │   │   ├── transform.hpp
│   │       │   │   ├── type_traits.hpp
│   │       │   │   ├── utility.hpp
│   │       │   │   ├── vec_distance.hpp
│   │       │   │   ├── vec_math.hpp
│   │       │   │   ├── vec_traits.hpp
│   │       │   │   ├── warp.hpp
│   │       │   │   ├── warp_reduce.hpp
│   │       │   │   └── warp_shuffle.hpp
│   │       │   ├── cuda.hpp
│   │       │   ├── cuda.inl.hpp
│   │       │   ├── cuda_stream_accessor.hpp
│   │       │   ├── cuda_types.hpp
│   │       │   ├── cv_bmcpu.hpp
│   │       │   ├── cv_cpu_dispatch.h
│   │       │   ├── cv_cpu_helper.h
│   │       │   ├── cvdef.h
│   │       │   ├── cvstd.hpp
│   │       │   ├── cvstd.inl.hpp
│   │       │   ├── cvstd_wrapper.hpp
│   │       │   ├── directx.hpp
│   │       │   ├── eigen.hpp
│   │       │   ├── fast_math.hpp
│   │       │   ├── hal
│   │       │   │   ├── hal.hpp
│   │       │   │   ├── interface.h
│   │       │   │   ├── intrin_avx.hpp
│   │       │   │   ├── intrin_cpp.hpp
│   │       │   │   ├── intrin_forward.hpp
│   │       │   │   ├── intrin.hpp
│   │       │   │   ├── intrin_neon.hpp
│   │       │   │   ├── intrin_sse_em.hpp
│   │       │   │   ├── intrin_sse.hpp
│   │       │   │   └── intrin_vsx.hpp
│   │       │   ├── hal.hpp
│   │       │   ├── ion.hpp
│   │       │   ├── mat.hpp
│   │       │   ├── mat.inl.hpp
│   │       │   ├── matx.hpp
│   │       │   ├── neon_utils.hpp
│   │       │   ├── ocl_genbase.hpp
│   │       │   ├── ocl.hpp
│   │       │   ├── opencl
│   │       │   │   ├── ocl_defs.hpp
│   │       │   │   ├── opencl_info.hpp
│   │       │   │   ├── opencl_svm.hpp
│   │       │   │   └── runtime
│   │       │   │       ├── autogenerated
│   │       │   │       │   ├── opencl_clamdblas.hpp
│   │       │   │       │   ├── opencl_clamdfft.hpp
│   │       │   │       │   ├── opencl_core.hpp
│   │       │   │       │   ├── opencl_core_wrappers.hpp
│   │       │   │       │   ├── opencl_gl.hpp
│   │       │   │       │   └── opencl_gl_wrappers.hpp
│   │       │   │       ├── opencl_clamdblas.hpp
│   │       │   │       ├── opencl_clamdfft.hpp
│   │       │   │       ├── opencl_core.hpp
│   │       │   │       ├── opencl_core_wrappers.hpp
│   │       │   │       ├── opencl_gl.hpp
│   │       │   │       ├── opencl_gl_wrappers.hpp
│   │       │   │       ├── opencl_svm_20.hpp
│   │       │   │       ├── opencl_svm_definitions.hpp
│   │       │   │       └── opencl_svm_hsa_extension.hpp
│   │       │   ├── opengl.hpp
│   │       │   ├── operations.hpp
│   │       │   ├── optim.hpp
│   │       │   ├── ovx.hpp
│   │       │   ├── persistence.hpp
│   │       │   ├── saturate.hpp
│   │       │   ├── softfloat.hpp
│   │       │   ├── sse_utils.hpp
│   │       │   ├── traits.hpp
│   │       │   ├── types_c.h
│   │       │   ├── types.hpp
│   │       │   ├── utility.hpp
│   │       │   ├── utils
│   │       │   │   ├── filesystem.hpp
│   │       │   │   ├── logger.defines.hpp
│   │       │   │   ├── logger.hpp
│   │       │   │   └── trace.hpp
│   │       │   ├── va_intel.hpp
│   │       │   ├── version.hpp
│   │       │   └── vsx_utils.hpp
│   │       ├── core.hpp
│   │       ├── cvconfig.h
│   │       ├── dnn
│   │       │   ├── all_layers.hpp
│   │       │   ├── dict.hpp
│   │       │   ├── dnn.hpp
│   │       │   ├── dnn.inl.hpp
│   │       │   ├── layer.details.hpp
│   │       │   ├── layer.hpp
│   │       │   ├── shape_utils.hpp
│   │       │   ├── utils
│   │       │   │   └── inference_engine.hpp
│   │       │   └── version.hpp
│   │       ├── dnn.hpp
│   │       ├── features2d
│   │       │   ├── features2d.hpp
│   │       │   └── hal
│   │       │       └── interface.h
│   │       ├── features2d.hpp
│   │       ├── flann
│   │       │   ├── all_indices.h
│   │       │   ├── allocator.h
│   │       │   ├── any.h
│   │       │   ├── autotuned_index.h
│   │       │   ├── composite_index.h
│   │       │   ├── config.h
│   │       │   ├── defines.h
│   │       │   ├── dist.h
│   │       │   ├── dummy.h
│   │       │   ├── dynamic_bitset.h
│   │       │   ├── flann_base.hpp
│   │       │   ├── flann.hpp
│   │       │   ├── general.h
│   │       │   ├── ground_truth.h
│   │       │   ├── heap.h
│   │       │   ├── hierarchical_clustering_index.h
│   │       │   ├── index_testing.h
│   │       │   ├── kdtree_index.h
│   │       │   ├── kdtree_single_index.h
│   │       │   ├── kmeans_index.h
│   │       │   ├── linear_index.h
│   │       │   ├── logger.h
│   │       │   ├── lsh_index.h
│   │       │   ├── lsh_table.h
│   │       │   ├── matrix.h
│   │       │   ├── miniflann.hpp
│   │       │   ├── nn_index.h
│   │       │   ├── object_factory.h
│   │       │   ├── params.h
│   │       │   ├── random.h
│   │       │   ├── result_set.h
│   │       │   ├── sampling.h
│   │       │   ├── saving.h
│   │       │   ├── simplex_downhill.h
│   │       │   └── timer.h
│   │       ├── flann.hpp
│   │       ├── freetype.hpp
│   │       ├── gapi
│   │       │   ├── core.hpp
│   │       │   ├── cpu
│   │       │   │   ├── core.hpp
│   │       │   │   ├── gcpukernel.hpp
│   │       │   │   └── imgproc.hpp
│   │       │   ├── fluid
│   │       │   │   ├── core.hpp
│   │       │   │   ├── gfluidbuffer.hpp
│   │       │   │   ├── gfluidkernel.hpp
│   │       │   │   └── imgproc.hpp
│   │       │   ├── garg.hpp
│   │       │   ├── garray.hpp
│   │       │   ├── gcall.hpp
│   │       │   ├── gcommon.hpp
│   │       │   ├── gcompiled.hpp
│   │       │   ├── gcompoundkernel.hpp
│   │       │   ├── gcomputation.hpp
│   │       │   ├── gkernel.hpp
│   │       │   ├── gmat.hpp
│   │       │   ├── gmetaarg.hpp
│   │       │   ├── gproto.hpp
│   │       │   ├── gpu
│   │       │   │   ├── core.hpp
│   │       │   │   ├── ggpukernel.hpp
│   │       │   │   └── imgproc.hpp
│   │       │   ├── gscalar.hpp
│   │       │   ├── gtyped.hpp
│   │       │   ├── gtype_traits.hpp
│   │       │   ├── imgproc.hpp
│   │       │   ├── ocl
│   │       │   │   ├── core.hpp
│   │       │   │   ├── goclkernel.hpp
│   │       │   │   └── imgproc.hpp
│   │       │   ├── opencv_includes.hpp
│   │       │   ├── operators.hpp
│   │       │   ├── own
│   │       │   │   ├── assert.hpp
│   │       │   │   ├── convert.hpp
│   │       │   │   ├── cvdefs.hpp
│   │       │   │   ├── exports.hpp
│   │       │   │   ├── mat.hpp
│   │       │   │   ├── saturate.hpp
│   │       │   │   ├── scalar.hpp
│   │       │   │   └── types.hpp
│   │       │   └── util
│   │       │       ├── any.hpp
│   │       │       ├── compiler_hints.hpp
│   │       │       ├── optional.hpp
│   │       │       ├── throw.hpp
│   │       │       ├── util.hpp
│   │       │       └── variant.hpp
│   │       ├── gapi.hpp
│   │       ├── highgui
│   │       │   ├── highgui_c.h
│   │       │   └── highgui.hpp
│   │       ├── highgui.hpp
│   │       ├── imgcodecs
│   │       │   ├── imgcodecs_c.h
│   │       │   ├── imgcodecs.hpp
│   │       │   ├── ios.h
│   │       │   └── legacy
│   │       │       └── constants_c.h
│   │       ├── imgcodecs.hpp
│   │       ├── imgproc
│   │       │   ├── detail
│   │       │   │   └── gcgraph.hpp
│   │       │   ├── hal
│   │       │   │   ├── hal.hpp
│   │       │   │   └── interface.h
│   │       │   ├── imgproc_c.h
│   │       │   ├── imgproc.hpp
│   │       │   ├── types_c.h
│   │       │   └── vpp.hpp
│   │       ├── imgproc.hpp
│   │       ├── ml
│   │       │   ├── ml.hpp
│   │       │   └── ml.inl.hpp
│   │       ├── ml.hpp
│   │       ├── objdetect
│   │       │   ├── detection_based_tracker.hpp
│   │       │   └── objdetect.hpp
│   │       ├── objdetect.hpp
│   │       ├── opencv.hpp
│   │       ├── opencv_modules.hpp
│   │       ├── photo
│   │       │   ├── cuda.hpp
│   │       │   ├── legacy
│   │       │   │   └── constants_c.h
│   │       │   └── photo.hpp
│   │       ├── photo.hpp
│   │       ├── stitching
│   │       │   ├── detail
│   │       │   │   ├── autocalib.hpp
│   │       │   │   ├── blenders.hpp
│   │       │   │   ├── camera.hpp
│   │       │   │   ├── exposure_compensate.hpp
│   │       │   │   ├── matchers.hpp
│   │       │   │   ├── motion_estimators.hpp
│   │       │   │   ├── seam_finders.hpp
│   │       │   │   ├── timelapsers.hpp
│   │       │   │   ├── util.hpp
│   │       │   │   ├── util_inl.hpp
│   │       │   │   ├── warpers.hpp
│   │       │   │   └── warpers_inl.hpp
│   │       │   └── warpers.hpp
│   │       ├── stitching.hpp
│   │       ├── video
│   │       │   ├── background_segm.hpp
│   │       │   ├── legacy
│   │       │   │   └── constants_c.h
│   │       │   ├── tracking.hpp
│   │       │   └── video.hpp
│   │       ├── video.hpp
│   │       ├── videoio
│   │       │   ├── cap_ios.h
│   │       │   ├── legacy
│   │       │   │   └── constants_c.h
│   │       │   ├── registry.hpp
│   │       │   ├── videoio_c.h
│   │       │   └── videoio.hpp
│   │       └── videoio.hpp
│   ├── tpu_bitcasts.h
│   ├── tpu_fp16_base.h
│   ├── tpu_fp16.h
│   ├── tpu_fp16.hpp
│   ├── user_bmcpu_common.h
│   ├── user_bmcpu.h
│   ├── utils.hpp
│   ├── vppion.h
│   ├── vpplib.h
│   └── yolov5.hpp
└── lib
    ├── cmake
    │   ├── FFMPEGConfig.cmake
    │   └── opencv4
    │       ├── OpenCVConfig.cmake
    │       ├── OpenCVConfig-version.cmake
    │       ├── OpenCVModules.cmake
    │       └── OpenCVModules-release.cmake
    ├── libavcodec.a
    ├── libavcodec.so -> libavcodec.so.58.35.100-sophon-0.7.0
    ├── libavcodec.so.58 -> libavcodec.so.58.35.100-sophon-0.7.0
    ├── libavcodec.so.58.35.100-sophon-0.7.0
    ├── libavdevice.a
    ├── libavdevice.so -> libavdevice.so.58.5.100-sophon-0.7.0
    ├── libavdevice.so.58 -> libavdevice.so.58.5.100-sophon-0.7.0
    ├── libavdevice.so.58.5.100-sophon-0.7.0
    ├── libavfilter.a
    ├── libavfilter.so -> libavfilter.so.7.40.101-sophon-0.7.0
    ├── libavfilter.so.7 -> libavfilter.so.7.40.101-sophon-0.7.0
    ├── libavfilter.so.7.40.101-sophon-0.7.0
    ├── libavformat.a
    ├── libavformat.so -> libavformat.so.58.20.100-sophon-0.7.0
    ├── libavformat.so.58 -> libavformat.so.58.20.100-sophon-0.7.0
    ├── libavformat.so.58.20.100-sophon-0.7.0
    ├── libavutil.a
    ├── libavutil.so -> libavutil.so.56.22.100-sophon-0.7.0
    ├── libavutil.so.56 -> libavutil.so.56.22.100-sophon-0.7.0
    ├── libavutil.so.56.22.100-sophon-0.7.0
    ├── libbmcv.a
    ├── libbmcv.so -> libbmcv.so.0
    ├── libbmcv.so.0 -> libbmcv.so.0.7.0
    ├── libbmcv.so.0.7.0
    ├── libbmion.so -> libbmion.so.0
    ├── libbmion.so.0 -> libbmion.so.0.7.0
    ├── libbmion.so.0.7.0
    ├── libbmjpuapi.so -> libbmjpuapi.so.0
    ├── libbmjpuapi.so.0 -> libbmjpuapi.so.0.7.0
    ├── libbmjpuapi.so.0.7.0
    ├── libbmjpulite.so -> libbmjpulite.so.0
    ├── libbmjpulite.so.0 -> libbmjpulite.so.0.7.0
    ├── libbmjpulite.so.0.7.0
    ├── libbmlib.so -> libbmlib.so.0
    ├── libbmlib.so.0
    ├── libbmodel.a
    ├── libbmrt.so -> libbmrt.so.1.0
    ├── libbmrt.so.1.0
    ├── libbmvideo.so -> libbmvideo.so.0
    ├── libbmvideo.so.0 -> libbmvideo.so.0.7.0
    ├── libbmvideo.so.0.7.0
    ├── libbmvppapi.so -> libbmvppapi.so.0
    ├── libbmvppapi.so.0 -> libbmvppapi.so.0.7.0
    ├── libbmvppapi.so.0.7.0
    ├── libbmvpuapi.so -> libbmvpuapi.so.0
    ├── libbmvpuapi.so.0 -> libbmvpuapi.so.0.7.0
    ├── libbmvpuapi.so.0.7.0
    ├── libbmvpulite.so -> libbmvpulite.so.0
    ├── libbmvpulite.so.0 -> libbmvpulite.so.0.7.0
    ├── libbmvpulite.so.0.7.0
    ├── libcpuop.so -> libcpuop.so.0.4.9
    ├── libcpuop.so.0.4.9
    ├── libopencv_calib3d.so -> libopencv_calib3d.so.4.1
    ├── libopencv_calib3d.so.4.1 -> libopencv_calib3d.so.4.1.0-sophon-0.7.0
    ├── libopencv_calib3d.so.4.1.0-sophon-0.7.0
    ├── libopencv_core.so -> libopencv_core.so.4.1
    ├── libopencv_core.so.4.1 -> libopencv_core.so.4.1.0-sophon-0.7.0
    ├── libopencv_core.so.4.1.0-sophon-0.7.0
    ├── libopencv_dnn.so -> libopencv_dnn.so.4.1
    ├── libopencv_dnn.so.4.1 -> libopencv_dnn.so.4.1.0-sophon-0.7.0
    ├── libopencv_dnn.so.4.1.0-sophon-0.7.0
    ├── libopencv_features2d.so -> libopencv_features2d.so.4.1
    ├── libopencv_features2d.so.4.1 -> libopencv_features2d.so.4.1.0-sophon-0.7.0
    ├── libopencv_features2d.so.4.1.0-sophon-0.7.0
    ├── libopencv_flann.so -> libopencv_flann.so.4.1
    ├── libopencv_flann.so.4.1 -> libopencv_flann.so.4.1.0-sophon-0.7.0
    ├── libopencv_flann.so.4.1.0-sophon-0.7.0
    ├── libopencv_freetype.so -> libopencv_freetype.so.4.1
    ├── libopencv_freetype.so.4.1 -> libopencv_freetype.so.4.1.0-sophon-0.7.0
    ├── libopencv_freetype.so.4.1.0-sophon-0.7.0
    ├── libopencv_gapi.so -> libopencv_gapi.so.4.1
    ├── libopencv_gapi.so.4.1 -> libopencv_gapi.so.4.1.0-sophon-0.7.0
    ├── libopencv_gapi.so.4.1.0-sophon-0.7.0
    ├── libopencv_highgui.so -> libopencv_highgui.so.4.1
    ├── libopencv_highgui.so.4.1 -> libopencv_highgui.so.4.1.0-sophon-0.7.0
    ├── libopencv_highgui.so.4.1.0-sophon-0.7.0
    ├── libopencv_imgcodecs.so -> libopencv_imgcodecs.so.4.1
    ├── libopencv_imgcodecs.so.4.1 -> libopencv_imgcodecs.so.4.1.0-sophon-0.7.0
    ├── libopencv_imgcodecs.so.4.1.0-sophon-0.7.0
    ├── libopencv_imgproc.so -> libopencv_imgproc.so.4.1
    ├── libopencv_imgproc.so.4.1 -> libopencv_imgproc.so.4.1.0-sophon-0.7.0
    ├── libopencv_imgproc.so.4.1.0-sophon-0.7.0
    ├── libopencv_ml.so -> libopencv_ml.so.4.1
    ├── libopencv_ml.so.4.1 -> libopencv_ml.so.4.1.0-sophon-0.7.0
    ├── libopencv_ml.so.4.1.0-sophon-0.7.0
    ├── libopencv_objdetect.so -> libopencv_objdetect.so.4.1
    ├── libopencv_objdetect.so.4.1 -> libopencv_objdetect.so.4.1.0-sophon-0.7.0
    ├── libopencv_objdetect.so.4.1.0-sophon-0.7.0
    ├── libopencv_photo.so -> libopencv_photo.so.4.1
    ├── libopencv_photo.so.4.1 -> libopencv_photo.so.4.1.0-sophon-0.7.0
    ├── libopencv_photo.so.4.1.0-sophon-0.7.0
    ├── libopencv_stitching.so -> libopencv_stitching.so.4.1
    ├── libopencv_stitching.so.4.1 -> libopencv_stitching.so.4.1.0-sophon-0.7.0
    ├── libopencv_stitching.so.4.1.0-sophon-0.7.0
    ├── libopencv_videoio.so -> libopencv_videoio.so.4.1
    ├── libopencv_videoio.so.4.1 -> libopencv_videoio.so.4.1.0-sophon-0.7.0
    ├── libopencv_videoio.so.4.1.0-sophon-0.7.0
    ├── libopencv_video.so -> libopencv_video.so.4.1
    ├── libopencv_video.so.4.1 -> libopencv_video.so.4.1.0-sophon-0.7.0
    ├── libopencv_video.so.4.1.0-sophon-0.7.0
    ├── libswresample.a
    ├── libswresample.so -> libswresample.so.3.3.100-sophon-0.7.0
    ├── libswresample.so.3 -> libswresample.so.3.3.100-sophon-0.7.0
    ├── libswresample.so.3.3.100-sophon-0.7.0
    ├── libswscale.a
    ├── libswscale.so -> libswscale.so.5.3.100-sophon-0.7.0
    ├── libswscale.so.5 -> libswscale.so.5.3.100-sophon-0.7.0
    ├── libswscale.so.5.3.100-sophon-0.7.0
    ├── libturing_env.so
    ├── libusercpu.so -> libusercpu.so.0.4.9
    ├── libusercpu.so.0.4.9
    ├── libvideo_bm.so -> libbmvideo.so
    ├── libvpp.a
    ├── libvpp_cmodel.so
    ├── libvpp.so -> libvpp.so.0
    ├── libvpp.so.0 -> libvpp.so.0.7.0
    ├── libvpp.so.0.7.0
    ├── libyuv.a
    ├── libyuv.so -> libyuv.so.0
    ├── libyuv.so.0 -> libyuv.so.0.7.0
    ├── libyuv.so.0.7.0
    ├── pkgconfig
    │   ├── libavcodec.pc
    │   ├── libavdevice.pc
    │   ├── libavfilter.pc
    │   ├── libavformat.pc
    │   ├── libavutil.pc
    │   ├── libswresample.pc
    │   ├── libswscale.pc
    │   └── opencv4.pc
    ├── tpu_module
    │   └── libbm1684x_kernel_module.so
    └── vpu_firmware
        ├── chagall.bin
        └── chagall_dec.bin

另外,makefile内容如下

CC      = aarch64-linux-gnu-gcc
CPP     = aarch64-linux-gnu-g++
AR      = ar
RM      = rm -f
 
#Define the resource compiler.
RC = windres
 
## debug flag  
DBG_ENABLE := 0
 
OS = $(shell uname)
 
## source file path  
SRC_PATH  := ./cpp/ #./include/utils/
SRC_PATH_EXT := 
DEMO :=./demo/main.cpp
 
## target file name  
TARGET     := turing_env
DEMO_TARGET := env_demo
 
## get all source files  
SRCS := $(foreach spath, $(SRC_PATH), $(wildcard $(spath)*.c) $(wildcard $(spath)*.cpp))
 
## all .o based on all .c/.cpp
OBJS = $(SRCS:.c=.o)
OBJS := $(OBJS:.cpp=.o) 
 
## macro define
#DEFS := __LINUX__ OS_LINUX _FILE_OFFSET_BITS=64
DEFS := __LINUX__ OS_LINUX 
 
#if freeimage is static-linked use this !
#DEFS += FREEIMAGE_LIB
 
## need libs, add at here  
LIBS := bmrt bmlib bmcv dl \
	opencv_core opencv_imgproc opencv_imgcodecs opencv_videoio  opencv_video \
	bmvideo swresample swscale avformat avutil \
	#protobuf gflags glog boost_system boost_filesystem pthread bmjpuapi bmjpulite #asan
 
DEMO_LIBS = $(LIBS)
DEMO_LIBS += turing_env
 
## used headers  file path  
INCLUDE_PATH := ./include ./include/third /usr/local/cuda/include  ./src  ./include/biz_sdk ./include/biz_common  ./include/spdlog ./include/utils ./include/rapidjson ./  
INCLUDE_PATH += ./include/tcp_pubsub  #add by chw
INCLUDE_PATH += ./include
INCLUDE_PATH += ./include/rapidjson
INCLUDE_PATH += ./include/bmruntime
INCLUDE_PATH += ./include/bmlib
INCLUDE_PATH += ./include/third_party/boost/include
INCLUDE_PATH += ./include/opencv4 
INCLUDE_PATH += ./include/ffmpeg ./include
 
#$(warning $(INCLUDE_PATH))
 
## used include librarys file path  
LIBRARY_PATH := ./  ./lib  ./lib/thirdparty/soc ./lib/bmnn/soc ./lib/opencv/soc ./lib/ffmpeg/soc ./lib/decode/soc

## debug for debug info, when use gdb to debug  
ifeq (1, ${DBG_ENABLE})   
CFLAGS += -D_DEBUG -g -DDEBUG=1 
else
CFLAGS += -O2 -DNDEBUG
endif
 
#for ENCYPT flags
 
ifeq ($(OS), Linux)
LIBS += dl rt
CFLAGS += -fPIC
TARGET_EXT := .so
LIBRARY_PATH += 
LDFLAGS += -Wl,--rpath=./lib 
LDFLAGS += -Wl,--rpath=./lib/thirdparty/soc 
LDFLAGS += -Wl,--rpath=./lib/bmnn/soc
LDFLAGS += -Wl,--rpath=./lib/opencv/soc
LDFLAGS += -Wl,--rpath=./lib/ffmpeg/soc
LDFLAGS += -Wl,--rpath=./lib/decode/soc
endif
 
#CFLAGS += -msse4.2 -march=core2 -pipe $(foreach m, $(DEFS), -D$(m)) 
 
CFLAGS +=  -pipe $(foreach m, $(DEFS), -D$(m)) 
  
## get all include path  
CFLAGS  += $(foreach dir, $(INCLUDE_PATH), -I$(dir))   #-fsanitize=address -g
##CFLAGS  += $(foreach dir, $(INCLUDE_PATH), -I$(dir))  -fvisibility=hidden  
 
CXXFLAGS += $(CFLAGS) -std=c++11 
 
## get all library path  
#LDFLAGS += -lpthread  -fsanitize=address $(foreach lib, $(LIBRARY_PATH), -L$(lib))
LDFLAGS += -lpthread  $(foreach lib, $(LIBRARY_PATH), -L$(lib))
DEMO_LDFLAGS := $(LDFLAGS)
## get all librarys  
LDFLAGS += $(foreach lib, $(LIBS), -l$(lib))
 
DEMO_LDFLAGS += $(foreach lib, $(DEMO_LIBS), -l$(lib))
 
RCFLAGS ?= -DNDEBUG
 
 
default: all
 
%.o: %.c
	$(CC) $(CFLAGS) -g -c $< -o $@
 
%.o: %.cpp
	$(CPP) $(CXXFLAGS) -g -c $< -o $@
    
all: $(OBJS) $(RESOURCE)
    #$(CPP) $(CXXFLAGS) -o $(TARGET) $(OBJS) $(RESOURCE) $(LDFLAGS)
	$(CPP) $(CXXFLAGS) -g -shared -o lib$(TARGET)$(TARGET_EXT) $(OBJS) $(RESOURCE) $(LDFLAGS)
	mv libturing_env.so ./lib
	$(CPP) $(CXXFLAGS) -g -o $(DEMO_TARGET) $(DEMO) $(DEMO_LDFLAGS)
 
clean:  
	$(RM) $(OBJS) $(DEMO_TARGET) $(TARGET).* $(RESOURCE)

参考文献:

利用tpu-mlir工具将深度学习算法模型转成算能科技平台.bmodel模型的方法步骤_mlir tpu-CSDN博客

3.4. 安装SDK — SOPHONSDKUserGuide v23.10.01 文档