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

目录

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/397897.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Simulink系列】——动态系统仿真 之 连续系统线性连续系统

声明&#xff1a;本系列博客参考有关专业书籍&#xff0c;截图均为自己实操&#xff0c;仅供交流学习&#xff01; 一、连续系统定义 连续系统输出在时间上连续变化&#xff0c;而非间隔采样取值&#xff0c;满足以下条件&#xff1a; ①输出连续变化&#xff0c;变化的间隔…

java中实体pojo对于布尔类型属性命名尽量别以is开头,否则 fastjson可能会导致属性读取不到

假如我们有一个场景&#xff0c;就是需要将一个对象以字符串的形式&#xff0c;也就是jsonString存到一个地方&#xff0c;比如mysql&#xff0c;或者redis的String结构。现在有一个实体&#xff0c;我们自己创建的&#xff0c;叫做CusPojo.java 有两个属性是布尔类型的&#x…

删除有序数组中的重复项 II

题目链接 删除有序数组中的重复项 II 题目描述 注意点 nums 已按升序排列1 < nums.length < 30000原地删除重复出现的元素&#xff0c;使得出现次数超过两次的元素只出现两次返回删除后数组的新长度 解答思路 因为数组是按升序排列的&#xff0c;可以使用将某个区间…

[C#]winform基于opencvsharp结合pairlie算法实现低光图像增强黑暗图片变亮变清晰

【低光图像增强介绍】 在图像处理领域&#xff0c;低光图像增强是一个具有挑战性的任务。由于光线不足&#xff0c;这些图像往往呈现出低对比度、高噪声和细节丢失等问题&#xff0c;严重影响了图像的视觉效果和后续分析的准确性。因此&#xff0c;开发有效的低光图像增强方法…

解锁文档处理新境界:ONLYOFFICE编辑功能为开发者带来新机遇

引言 ONLYOFFICE最新发布的文档8.0版本带来了一系列引人注目的功能和优化&#xff0c;为用户提供了更强大、更高效的在线编辑体验。这次更新涵盖了多个方面&#xff0c;包括PDF表单、RTL支持、单变量求解、图表向导以及插件界面设计更新等。这些新功能不仅提升了文档处理的便利…

关于投资,房地产,AI

各位朋友&#xff0c;新年好&#xff01; 过个年&#xff0c;世界发生了很多大事&#xff01; 投资 先是证监会&#xff0c;证监会年前换帅&#xff0c;吴清接棒&#xff0c;吴清何许人也&#xff1f;江湖人称“券商屠夫”&#xff0c;成功处置了2008年的券商风险&#xff0…

【Linux】Linux权限

Linux权限 Linux下用户的分类切换用户su 和 su - 的区别 对命令提权 权限的概念Linux权限管理文件访问者的分类&#xff08;人&#xff09;1️⃣拥有者u→user2️⃣其他人o→others3️⃣所属组group 文件类型和访问权限&#xff08;事物属性&#xff09;文件文件类型文件的基本…

单片机stm32智能鱼缸

随着我国经济的快速发展而给人们带来了富足的生活&#xff0c;也有越来越多的人们开始养鱼&#xff0c;通过养各种鱼类来美化居住环境和缓解压力。但是在鱼类饲养过程中&#xff0c;常常由于鱼类对水质、水位及光照强度有着很高的要求&#xff0c;而人们也由于工作的方面而无法…

齐次方程是否有非零解,和它的系数矩阵行列式的关系

视频来源&#xff1a;https://www.bilibili.com/video/BV1vY4y1J7gd/?spm_id_from333.337.search-card.all.click&vd_source7a1a0bc74158c6993c7355c5490fc600 4:22 有这么一句话&#xff0c;如下图 对于齐次方程&#xff0c;若系数矩阵的行列式为零&#xff0c;则方程…

vue-router钩子函数有哪些?都有哪些参数?

Vue.js是一款流行的JavaScript框架&#xff0c;它提供了大量的工具和特性&#xff0c;使得web前端开发更加高效和灵活。其中之一就是Vue-router&#xff0c;它是Vue.js官方路由插件&#xff0c;可以实现前端路由的管理和控制。在使用Vue-router时&#xff0c;我们可以利用钩子函…

VsCode指定插件安装目录

VsCode指定插件安装目录 VsCode安装的默认目录是在用户目录(%HomePath%)下的.vscode文件夹下的extensions目录下&#xff0c;随着安装插件越来越多会占用大量C盘空间。 指定VsCode的插件目录 Vscode安装目录&#xff1a; D:\Microsoft VS Code\Code.exeVscode插件安装目录&a…

Linux搭建JavaEE环境

Linux搭建JavaEE环境 需要在 Linux 下进行 JavaEE 的开发&#xff0c;我们需要安装如下软件 JDKtomcatmysqlidea 安装JDK 安装步骤 首先去官网下载jdk的linux版本 下载地址&#xff1a;https://www.oracle.com/cn/java/technologies/downloads/ 1) mkdir /opt/jdk 2) 通过 …

C语言二级易忘易错易混知识点(自用)

1.数组名不能自加。 因为数组名实际上是一个指针&#xff0c;指向数组的第一个元素的地址。数组名在编译器中被视为常量&#xff0c;它的值是固定的&#xff0c;不能改变。 要访问数组的不同元素&#xff0c;应该使用数组名加上偏移量的方式来访问。 2.共用体只有最后一次赋值…

计算机组成原理----计算机系统

目录 1.计算机的硬件和软件 2.硬件的发展 3.软件的发展 4.计算机硬件的基本组成 &#xff08;1&#xff09;早期冯诺依曼机的结构 &#xff08;2&#xff09;现代计算机的结构 5.各硬件的工作原理 &#xff08;1&#xff09;主存储器 &#xff08;2&#xff09;运算器…

前端|Day2:列表、表格、表单(黑马笔记)

Day2&#xff1a;列表、表格、表单 目录 Day2&#xff1a;列表、表格、表单一、列表1.无序列表2.有序列表3. 定义列表 二、表格1.基本使用2. 表格结构标签(了解)3.合并单元格 三、表单1.input 标签2.input 标签占位文本3.单选框4.上传文件5.多选框6.下拉菜单7.文本域8.label 标…

【论文精读】MAE

摘要 将掩码重建任务从nlp引入到cv&#xff0c;提出非对称掩码自编码器。 框架 概述 如上图&#xff0c;本文提出掩码自编码器&#xff0c;即将给定原始信号的部分观测值的情况下重建原始信号&#xff0c;编码器将观察到的部分信号(没有掩码标记)映射到潜在表示&#xff0c;采…

电大考试哪个搜题软件好用?分享6个可以搜答案的软件 #经验分享#其他#微信

当今社会&#xff0c;技术的发展给我们带来了许多便利&#xff0c;包括了许多实用的学习工具。 1.三羊搜题 这是一个公众号 它支持文本搜索、扫码搜书、拍照搜索&#xff0c;不会的题目直接对准书书本&#xff0c;或手打文字搜索题目&#xff0c;找到的后的题目都有详细的解…

【JVM篇】什么是运行时数据区

文章目录 &#x1f354;什么是运行时数据区⭐程序计数器⭐栈&#x1f50e;Java虚拟机栈&#x1f388;栈帧的内容 &#x1f50e;本地方法栈 ⭐堆⭐方法区 &#x1f354;什么是运行时数据区 运行时数据区指的是jvm所管理的内存区域&#xff0c;其中分为两大类 线程共享&#xf…

w29pikachu-ssrf实例

实验环境 php&#xff1a;7.3.4nts apache&#xff1a;2.4.39 浏览器&#xff1a;谷歌实验步骤 ssrf&#xff08;curl&#xff09; 打开ssrf(curl) 点击文字&#xff0c;跳转404页面&#xff0c;从反馈信息来看是找不到对应的页面。 查看源码&#xff0c;发现有个RD变量影…

sentinel的资源数据指标是如何采集

资源数据采集 之前的NodeSelectorSlot和ClusterBuilderSlot已经完成了对资源调用树的构建, 现在则是要对资源进行收集, 核心点就是这些资源数据是如何统计 LogSlot 作用: 记录异常请求日志, 用于故障排查 public class LogSlot extends AbstractLinkedProcessorSlot<Def…