目录
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 文档