嵌入式系统与OpenCV
目录
一、OpenCV 简介
二、嵌入式 OpenCV 的安装方法
1. Ubuntu 系统下的安装
2. 嵌入式 ARM 系统中的安装
3. Windows10 和树莓派系统下的安装
三、嵌入式 OpenCV 的性能优化
1. 介绍嵌入式平台上对 OpenCV 进行优化的必要性。
2. 利用嵌入式开发工具,如优化的 C 语言编译器、软件库和驱动器等进行优化。
3. 通过实验对比 OPENMP、TBB 与多线程在嵌入式上的图像处理加速效果。
四、嵌入式 OpenCV 的应用案例
1. 在树莓派上实现从零开始的嵌入式图像图像处理,包括打开摄像头、编写程序获取并显示实时视频等。
2. 在 Ubuntu 系统下通过 OpenCV 实现点阵汉字的字模读取与显示。
五、嵌入式 OpenCV 的优势
一、OpenCV 简介
OpenCV 是一个功能强大的开源计算机视觉库,具有诸多优势和广泛的应用领域。
优势:
- 跨平台:可以在不同的系统平台上使用,包括 Windows、Linux、Android 和 Mac OS 操作系统。
- 编程语言:用 C++ 语言编写,同时提供 Python、Ruby、MATLAB 等语言的接口,实现了图像处理和计算机视觉方面的很多通用算法。
- 活跃的开发团队:自 2000 年公开第一个预览版本以来,目前已更新至 OpenCV4.5.3。
- 丰富的 API:完善的传统计算机视觉算法,涵盖主流的机器学习算法,同时添加了对深度学习的支持。
- 开源:以 BSD 许可证授权发行,可以在商业和研究领域中免费使用。
应用领域:
- 增强现实
- 人脸识别
- 手势识别
- 人机交互
- 动作识别
- 运动跟踪
- 物体识别
- 图像分割
- 机器人
- 运动分析
- 机器视觉
- 结构分析
- 汽车安全驾驶等领域。例如在自动驾驶领域,OpenCV 可以通过对车辆周围环境进行实时图像与视频分析,帮助汽车判断道路情况、障碍物等,从而保证行车安全;在医学图像处理领域,OpenCV 可以用于对医学图像(如 MRI、CT 等)进行分析和诊断,为医生提供重要的参考信息。
二、嵌入式 OpenCV 的安装方法

1. Ubuntu 系统下的安装
- 安装环境准备,包括安装 CMake 和依赖环境。
在 Ubuntu 中打开终端的快捷键是 [Ctrl]+[Alt]+[T],然后进行以下操作:
-
- 安装 CMake:sudo apt-get install cmake。
-
- 安装依赖环境:sudo apt-get install build-essential libgtk2.0-dev libavcodec-dev libavformat-dev libjpeg-dev libswscale-dev libtiff5-dev,sudo apt-get install libgtk2.0-dev,sudo apt-get install pkg-config。
- 下载 OpenCV 并解压到 Ubuntu 的 Home 目录下。
从官网下载 Sources 版本的 OpenCV,下载地址为:https://opencv.org/releases/。在 Windows 下载压缩包并解压后,将解压后的文件复制到 Ubuntu 系统的 home 目录下。
- 创建 build 文件,进行 CMake 配置、编译和安装。
-
- 进入 OpenCV 文件并创建 build 文件:在终端中,进入 OpenCV 文件所在目录,假设文件名为 opencv-3.4.11,使用cd opencv-3.4.11命令,然后在该文件夹下新建 build 文件夹,并将操作路径改到 build 下,使用mkdir build和cd build命令。
-
- CMake:输入命令sudo cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local..进行编译参数配置。
-
- 使用 make 创建编译:在 build 文件夹下进行编译,可以使用sudo make -j4或sudo make -j8等命令加快编译速度,这里会等待大概十几分钟,报错的话可以多尝试几次。
-
- 进行安装:使用sudo make install命令进行安装。
- 完成配置,包括更新系统共享链接库和配置 bash。
-
- 用 gedit 打开 /etc/ld.so.conf:sudo gedit /etc/ld.so.conf,在文件中加上一行include /usr/loacal/lib(其中 /usr/loacal/lib 是 OpenCV 安装路径也就是 makefile 中指定的安装路径)。
-
- 更新系统共享链接库:sudo ldconfig。
-
- 配置 bash:修改 bash.bashrc 文件,sudo gedit /etc/bash.bashrc,在文件末尾加入PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig和export PKG_CONFIG_PATH。保存并退出,然后执行如下命令使得配置生效:source /etc/bash.bashrc。
-
- 更新:sudo updatedb。
2. 嵌入式 ARM 系统中的安装
- 使用特定的编译配置进行编译安装。
-
- 安装依赖项:sudo apt update,sudo apt install build-essential cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev。
-
- 下载 OpenCV 源代码,从官方网站下载 OpenCV 的源代码,假设下载到用户的主目录(~/)下。
-
- 进行编译配置,例如:./configure --host=arm-linux --without-gtk --without-carbon --without-quicktime --without-1394libs --without-ffmpeg --without-python --without-swig --enable-static --disable-shared --disable-apps CXX=armv4l-unknown-linux-g++ CPPFLAGS=-I/usr/include。
-
- 进行编译:make。
-
- 安装:make install,安装完成后,设置环境变量export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig。
- 编译例程并解决可能出现的问题。
-
- 编译例程,例如:armv4l-unknown-linux-g++ pkg-config --cflags --libs opencv drawing.c -o drawing或者尝试(某些情况下,顺序问题可能引发 undefined reference 错误)arm-linux-g++ drawing.c -o drawing pkg-config --cflags --libs opencv。如果编译出现问题,如缺少开发包,可以根据错误提示进行安装,比如在 Debian 下可以apt-get install libpng2-dev`,或者到相应网站下载安装开发包。
- 配置摄像头驱动和显示。
-
- 以网眼 V2000 为例,内核选项加入 OV511 驱动,并且模块加载。OpenCV 程序中默认设备为/dev/video0,在程序中调用cvCaptureFromCAM函数可以直接获取摄像头,并采集图像。
-
- 直接在要显示的地方调用显示驱动函数。
3. Windows10 和树莓派系统下的安装
- Windows10 下安装 OpenCV3.4.1,配置系统环境变量并编写测试项目。
-
- 安装 OpenCV3.4.1:从官网下载 Windows 版,然后在 path 中添加以下路径:“D:\mydownload\opencv341\opencv\build\x64\vc15\bin”,添加完后需重启电脑。
-
- 基于 VS2017 写一个 OpenCV 调用灰度图片的项目:
-
-
- 添加 C++ 空项目 Project1。
-
-
-
- 右键添加项 test1.cpp。
-
-
-
- 将 debug 调为 X64,接下来都将在 debug 模式下进行配置。
-
-
-
- 配置属性:打开属性管理器,在右侧栏出现属性管理器界面,点开,选择 Debug x64 右键 “属性”,添加包含目录(分别是 include,include\opencv ,include\opencv2,建议三个都添加)、库目录和附加依赖项(手动敲入 opencv_world341d.lib)。
-
-
- 编写测试程序同时显示两张图片:并自动保存改变灰度后的图片到项目工程文件夹中,源码如下:
#include <highgui.hpp>#include <opencv.hpp>using namespace cv;using namespace std;int main(int argc,char** argv){CvPoint center;double scale = -3;IplImage* image = cvLoadImage("d://myworkspace//VisualStudioProjects//lena.jpg");//引入图片位置argc == 2? cvLoadImage(argv[1]) : 0;cvShowImage("Image", image);if (!image) return -1;center = cvPoint(image->width / 2, image->height / 2);for (int i = 0; i < image->height; i++)for (int j = 0; j < image->width; j++){double dx = (double)(j - center.x) / center.x;double dy = (double)(i - center.y) / center.y;double weight = exp((dx * dx + dy * dy) * scale);uchar* ptr = &CV_IMAGE_ELEM(image, uchar, i, j * 3);ptr[0] = cvRound(ptr[0] * weight);ptr[1] = cvRound(ptr[1] * weight);ptr[2] = cvRound(ptr[2] * weight);}Mat src; Mat dst;src = cvarrToMat(image);cv::imwrite("test.png", src);cvNamedWindow("test", 1);imshow("test", src);cvWaitKey();return 0;}
- 树莓派系统下安装 OpenCV3.4.1,与 Ubuntu 安装步骤类似。
-
- 软件源更新:sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev。
-
- 安装 gtk2.0:这一步对应前边最好用清华的源,不然下载容易出错。
-
- 安装 OpenCV:
-
-
- 安装 opencv-python:在终端输入pip3 install opencv-python。
-
-
-
- 安装 opencv-contrib:安装完 opencv-python 后,继续安装 opencv-contrib,需要安装指定版本 4.1.0.25,在终端输入pip3 install opencv-contrib-python==4.1.0.25。如果遇到网络问题,可以在可以科学上网的电脑上用浏览器下载轮子,然后导入树莓派进行本地安装。
-
-
-
- 安装依赖:在终端运行以下命令安装依赖:sudo apt-get install libatlas-base-dev -y,sudo apt-get install libjasper-dev -y,sudo apt-get install libqtgui4 -y,sudo apt-get install python3-pyqt5 -y,sudo apt-get install libqt4-test -y,sudo apt-get install libhdf5-dev -y。
-
-
- 至此,树莓派下的 OpenCV 安装完成,进入 python3 的运行环境,加载import cv2试试。
三、嵌入式 OpenCV 的性能优化

在嵌入式平台上,对 OpenCV 进行优化是至关重要的。随着嵌入式设备在各个领域的广泛应用,如安全监控、工业自动化等,对图像处理的速度和效率要求越来越高。而嵌入式平台通常资源有限,如处理器性能相对较弱、内存容量较小等,这就使得优化 OpenCV 以提高其在嵌入式平台上的性能变得尤为必要。
1. 介绍嵌入式平台上对 OpenCV 进行优化的必要性。
嵌入式设备往往需要实时处理图像数据,以满足各种应用场景的需求。例如,在自动化车辆中,需要快速准确地识别道路情况和障碍物,这对图像处理的速度提出了很高的要求。如果 OpenCV 在嵌入式平台上的性能不佳,可能会导致延迟过高,影响系统的实时性和可靠性。此外,优化 OpenCV 还可以降低嵌入式设备的功耗,延长电池寿命,提高设备的整体性能。
2. 利用嵌入式开发工具,如优化的 C 语言编译器、软件库和驱动器等进行优化。
典型的嵌入式器件通常是系统级芯片(SoC),其中不仅包含 ARM 处理器,还含有多种外设与加速器。为了充分发挥 SoC 的性能,需要利用各种嵌入式开发工具进行优化。例如,优化的 C 语言编译器可以生成更高效的代码,加速常见信号处理任务的优化软件库可以提高图像处理的速度,处理 SoC 中不同模块之间低级互动的驱动器可以提高系统的稳定性和可靠性。此外,还可能包括支持特定厂商协处理器与加速器的特殊工具,这些工具可以进一步提高 OpenCV 在嵌入式平台上的性能。
3. 通过实验对比 OPENMP、TBB 与多线程在嵌入式上的图像处理加速效果。
有研究表明,OPENMP 和 TBB 可以有效对并行处理进行加速,其效果与多线程处理基本持平。例如,在某个嵌入式上的图像处理项目中,通过对比基础 FOR 循环、多线程、原数据相同的 TBB、原数据独立的 TBB、原数据相同的 OPENMP 和原数据独立的 OPENMP 等不同处理方式,对 960*600 的图像进行大尺寸滤波操作。实验结果显示,OPENMP 和 TBB 的优势在于代码编写相对简单,也不用考虑线程数的设置。同时,OPENMP 和 TBB 的基础数据独立与否,对测试速度基本不影响,但为了避免处理结果错误,应尽量保证数据独立性。
在针对 RV1106 平台的交叉编译环境中,虽然原生的交叉编译工具链不支持 OpenMP 功能,但通过从源码编译 openmp 并将编译好的库放入工具链,成功实现了对该交叉编译器 OpenMP 支持的集成。实验发现,随着 OpenMP 线程数从 2 增至 10,加速效果逐步提升;但超过 10 个线程后,加速收益不再明显增加,表明存在一个最优线程数阈值。
此外,NEON + OpenMP 的组合方式在嵌入式开发中也表现出了较好的加速效果。在并行计算量比较小的时候,可以优先使用 NEON 加速。
综上所述,通过利用嵌入式开发工具以及对比不同的加速技术,可以有效地提高 OpenCV 在嵌入式平台上的性能。
四、嵌入式 OpenCV 的应用案例

1. 在树莓派上实现从零开始的嵌入式图像图像处理,包括打开摄像头、编写程序获取并显示实时视频等。
树莓派凭借高度定制化和可玩性,深受科技宅青睐。树莓派能够用来进行多种工作,基于 Linux 的高度开源特性,通过程序员和工程师们的奇思妙想,能够自由组装成多种有趣的项目。
在树莓派上进行图像图像处理具有一定优势。以图像增强类算法为例,树莓派一直是寻找嵌入式平台的不错选择。在树莓派 3 问世之前,存在性能、移植和调试等问题。但树莓派 3 搭载 64 位 A53 处理器后,实时的 640*480 的视频在加上图像处理已经不成问题。
树莓派的安装配置也相对简单。购买时商家会提供很多有用资料,安装过程包括烧录到 SD 卡中、上电开机配置网络、运行特定命令以防止内核被改、执行更新和升级命令、安装中文字体、调整国家和时区等步骤。安装完成后,就可以转入图像处理平台的构建。
对于在树莓派上实现图像图像处理,首先可以安装 Qt 和 OpenCV 的基础库。安装 Qt 可以通过指令sudo apt-get install qt5-default和sudo apt-get install qtcreator。安装 OpenCV 的基础库可以使用sudo apt-get install libopencv-dev,安装后要找到文件路径。在安装过程中可能会遇到一些问题,如 Qt 安装出错和运行错误,可以通过更改编译器等方法解决。安装完成后,将 OpenCV 实际路径添加入 Qt 工程中。
接着,可以进行测试。使用指令raspistill可以获取静态图像,raspivid可以获取动态图像。在 Qt 中,可以通过代码实现开启摄像头和获取显示图像的内容。在测试过程中,可能会遇到 opencv 调用摄像头失败的问题,可以通过查看摄像头所有参数指令ls /dev/video*和v4l2-ctl --info -d /dev/video0 --list-formats-ext查找问题。如果出现权限问题,可以通过chmod修改摄像头的权限来解决。
2. 在 Ubuntu 系统下通过 OpenCV 实现点阵汉字的字模读取与显示。
在 Ubuntu 系统下,通过 OpenCV 实现点阵汉字的字模读取与显示,需要先了解汉字点阵的原理。汉字点阵原理包括汉字编码、点阵字库结构和汉字点阵获取。
汉字编码分为区位码和机内码。区位码是将所有的国标汉字及符号分配在一个 94 行、94 列的方阵中,用区号和位号组合表示一个汉字或符号。机内码是在计算机中表示一个汉字的编码,为了避免与基本 ASCII 码混淆,需要进行一些处理。
点阵字库结构根据字节所表示点的不同分为横向矩阵和纵向矩阵,常用的点阵矩阵有 1212、1414、16*16 三种字库。对于不同的字库,存储方式可能会有所不同,需要注意处理方式。
汉字点阵获取可以通过区位码或机内码来计算。利用区位码获取汉字点阵的计算公式为:点阵起始位置 = ((区码 - 1)*94 + (位码 – 1)) * 汉字点阵字节数。利用机内码获取汉字点阵需要先根据机内码计算出区位码,再使用区位码获取点阵位置。
在实验过程中,首先要明确实验题目,即学习理解汉字的机内码、区位码编码规则和字形数据存储格式,在 Ubuntu 下用 C/C++(或 python) 调用 OpenCV 库编程显示一张图片,并打开一个名为 "logo.txt" 的文本文件,按照名字和学号去读取汉字 24*24 点阵字形字库中对应字符的字形数据,将名字和学号叠加显示在此图片右下位置。
然后创建项目文件夹,将项目需要的文件等放在该文件夹下。创建.cpp 文件,编写代码。代码中需要包含 OpenCV 的头文件,并定义一些函数来绘制汉字和 ASCII 字符。在主函数中,调用put_text_to_image函数,传入图片的路径和文本文件的路径,实现将文本中的名字和学号叠加显示在图片上。
最后进行编译和运行,查看结果。如果一切正常,就可以在图片上看到叠加显示的名字和学号。
五、嵌入式 OpenCV 的优势

- 跨平台性,可在不同系统平台上使用。
OpenCV 具有很强的跨平台性,无论是在传统的桌面操作系统如 Windows、Linux、Mac OS,还是在移动操作系统 Android 和 iOS 上都能良好运行。在嵌入式领域,也能在多种不同的嵌入式系统平台上发挥作用,为开发者提供了极大的便利,使得开发的应用可以在不同的硬件环境下轻松部署。
- 丰富的编程语言接口。
OpenCV 不仅以 C++ 语言编写,还提供了丰富的编程语言接口,包括 Python、Java、MATLAB 等。这使得不同背景的开发者都能轻松上手使用 OpenCV 进行开发。例如,对于熟悉 Python 的开发者来说,可以利用 OpenCV 的 Python 接口快速实现图像处理和计算机视觉任务。
- 活跃的开发团队和不断更新的算法库。
OpenCV 拥有活跃的开发团队,自 2000 年公开第一个预览版本以来,目前已更新至 OpenCV4.5.3。不断更新的算法库确保了 OpenCV 始终能跟上计算机视觉领域的最新发展趋势。开发者可以享受到最新的算法和功能,提高开发效率和应用性能。
- 与其他软件工具的互补性,如与 OpenVX 的关系。
OpenVX 实现了跨平台加速处理,在嵌入式和实时性系统中具有很大的优势。OpenVX 和 OpenCV 并不冲突,它们可以说是互补的。OpenVX 就像一个骨架,包含一些头文件声明了很多宏、枚举、变量类型、函数等等。其目的是方便不同的硬件平台实现相同的接口,实现了计算机视觉处理中性能和能耗方面的优化,特别是在嵌入式和实时应用案例中起到重要作用。在某些场合,配合 OpenCV 的强大功能可以实现更好的效果。
相关文章:
嵌入式系统与OpenCV
目录 一、OpenCV 简介 二、嵌入式 OpenCV 的安装方法 1. Ubuntu 系统下的安装 2. 嵌入式 ARM 系统中的安装 3. Windows10 和树莓派系统下的安装 三、嵌入式 OpenCV 的性能优化 1. 介绍嵌入式平台上对 OpenCV 进行优化的必要性。 2. 利用嵌入式开发工具,如优…...
编程之路,从0开始:动态内存笔试题分析
Hello大家好,很高兴我们又见面啦! 给生活添点passion,开始今天的编程之路。 今天我们来看几个经典的动态内存笔试题。 1、题目1 #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<string.h> void GetMemory(char* …...
物联网研究实训室建设方案
一、引言 随着物联网技术的快速发展,其在各个行业的应用越来越广泛,对物联网专业人才的需求也日益增加。为满足这一需求,建设一个符合现代化教学需求的物联网研究实训室,对于提高学生的实践能力和创新能力具有重要意义。本方案旨…...
Mac vscode 激活列编辑模式
列编辑模式在批量处理多行文本时,非常有效,但 vscode 默认情况下,又没有激活,因此记录一下启动方法: 激活列编辑模式 然后就可以使用 Alt(Mac 上是 Option 或 Command 键) 鼠标左键 滑动选择了…...
深度学习:GPT-1的MindSpore实践
GPT-1简介 GPT-1(Generative Pre-trained Transformer)是2018年由Open AI提出的一个结合预训练和微调的用于解决文本理解和文本生成任务的模型。它的基础是Transformer架构,具有如下创新点: NLP领域的迁移学习:通过最…...
前端图像处理(一)
目录 一、上传 1.1、图片转base64 二、图片样式 2.1、图片边框【border-image】 三、Canvas 3.1、把canvas图片上传到服务器 3.2、在canvas中绘制和拖动矩形 3.3、图片(同色区域)点击变色 一、上传 1.1、图片转base64 传统上传: 客户端选择图片…...
unity中:超低入门级显卡、集显(功耗30W以下)运行unity URP管线输出的webgl程序有那些地方可以大幅优化帧率
删除Global Volume: 删除Global Volume是一项简单且高效的优化措施。实测表明,这一改动可以显著提升帧率,甚至能够将原本无法流畅运行的场景变得可用。 更改前的效果: 更改后的效果: 优化阴影和材质: …...
ftdi_sio应用学习笔记 4 - I2C
目录 1. 查找设备 2. 打开设备 3. 写数据 4. 读数据 5. 设置频率 6 验证 6.1 遍历设备 6.2 开关设备 6.3 读写测试 I2C设备最多有6个(FT232H),其他为2个。和之前的设备一样,定义个I2C结构体记录找到的设备。 #define FT…...
如何更好的把控软件测试质量
如何更好的把控软件测试质量 在软件开发过程中,测试是确保软件质量、稳定性和用户体验的重要环节。随着需求的不断变化以及技术的不断进步,如何更好的把控软件测试质量已成为一个不可忽视的话题。本文将从几个维度探讨确保软件质量的方法和方案…...
“漫步北京”小程序及“气象景观数字化服务平台”上线啦
随着科技的飞速发展,智慧旅游已成为现代旅游业的重要趋势。近日,北京万云科技有限公司联合北京市气象服务中心,打造的“气象景观数字化服务平台“和“漫步北京“小程序已经上线,作为智慧旅游的典型代表,以其丰富的功能…...
SOL链上的 Meme 生态发展:从文化到创新的融合#dapp开发#
一、引言 随着区块链技术的不断发展,Meme 文化在去中心化领域逐渐崭露头角。从 Dogecoin 到 Shiba Inu,再到更多细分的 Meme 项目,这类基于网络文化的加密货币因其幽默和社区驱动力吸引了广泛关注。作为近年来备受瞩目的区块链平台之一&…...
身份证实名认证API接口助力电商购物安全
亲爱的网购达人们,你们是否曾经因为网络上的虚假信息和诈骗而感到困扰?在享受便捷的网购乐趣时,如何确保交易安全成为了我们共同关注的话题。今天,一起来了解一下翔云身份证实名认证接口如何为电子商务保驾护航,让您的…...
【过程控制系统】第6章 串级控制系统
目录 6. l 串级控制系统的概念 6.1.2 串级控制系统的组成 6.l.3 串级控制系统的工作过程 6.2 串级控制系统的分析 6.2.1 增强系统的抗干扰能力 6.2.2 改善对象的动态特性 6.2.3 对负荷变化有一定的自适应能力 6.3 串级控制系统的设计 6.3.1 副回路的选择 2.串级系…...
YOLOv11融合针对小目标FFCA-YOPLO中的FEM模块及相关改进思路
YOLOv11v10v8使用教程: YOLOv11入门到入土使用教程 YOLOv11改进汇总贴:YOLOv11及自研模型更新汇总 《FFCA-YOLO for Small Object Detection in Remote Sensing Images》 一、 模块介绍 论文链接:https://ieeexplore.ieee.org/document/10…...
qt+opengl 三维物体加入摄像机
1 在前几期的文章中,我们已经实现了三维正方体的显示了,那我们来实现让物体的由远及近,和由近及远。这里我们需要了解一个概念摄像机。 1.1 摄像机定义:在世界空间中位置、观察方向、指向右侧向量、指向上方的向量。如下图所示: …...
day05(单片机高级)PCB基础
目录 PCB基础 什么是PCB?PCB的作用? PCB的制作过程 PCB板的层数 PCB设计软件 安装立创EDA PCB基础 什么是PCB?PCB的作用? PCB(Printed Circuit Board),中文名称为印制电路板,又称印刷…...
全球天气预报5天-经纬度版免费API接口教程
接口简介: 获取全球任意地区未来5天天气预报,必须传经纬度参数。可先调用【位置坐标】分类下相关接口获取地区经纬度坐标。 请求地址: https://cn.apihz.cn/api/tianqi/tqybjw5.php 请求方式: POST或GET。 请求参数:…...
Shell编程8
声明! 学习视频来自B站up主 **泷羽sec** 有兴趣的师傅可以关注一下,如涉及侵权马上删除文章,笔记只是方便各位师傅的学习和探讨,文章所提到的网站以及内容,只做学习交流,其他均与本人以及泷羽sec团队无关&a…...
python语言基础-5 进阶语法-5.5 上下文管理协议(with语句)
声明:本内容非盈利性质,也不支持任何组织或个人将其用作盈利用途。本内容来源于参考书或网站,会尽量附上原文链接,并鼓励大家看原文。侵删。 5.5 上下文管理协议(with语句)(参考链接࿱…...
自动驾驶3D目标检测综述(三)
前两篇综述阅读理解放在这啦,有需要自行前往观看: 第一篇:自动驾驶3D目标检测综述(一)_3d 目标检测-CSDN博客 第二篇:自动驾驶3D目标检测综述(二)_子流行稀疏卷积 gpu实现-CSDN博客…...
[2025CVPR]DeepVideo-R1:基于难度感知回归GRPO的视频强化微调框架详解
突破视频大语言模型推理瓶颈,在多个视频基准上实现SOTA性能 一、核心问题与创新亮点 1.1 GRPO在视频任务中的两大挑战 安全措施依赖问题 GRPO使用min和clip函数限制策略更新幅度,导致: 梯度抑制:当新旧策略差异过大时梯度消失收敛困难:策略无法充分优化# 传统GRPO的梯…...
React 第五十五节 Router 中 useAsyncError的使用详解
前言 useAsyncError 是 React Router v6.4 引入的一个钩子,用于处理异步操作(如数据加载)中的错误。下面我将详细解释其用途并提供代码示例。 一、useAsyncError 用途 处理异步错误:捕获在 loader 或 action 中发生的异步错误替…...
应用升级/灾备测试时使用guarantee 闪回点迅速回退
1.场景 应用要升级,当升级失败时,数据库回退到升级前. 要测试系统,测试完成后,数据库要回退到测试前。 相对于RMAN恢复需要很长时间, 数据库闪回只需要几分钟。 2.技术实现 数据库设置 2个db_recovery参数 创建guarantee闪回点,不需要开启数据库闪回。…...
C++:std::is_convertible
C++标志库中提供is_convertible,可以测试一种类型是否可以转换为另一只类型: template <class From, class To> struct is_convertible; 使用举例: #include <iostream> #include <string>using namespace std;struct A { }; struct B : A { };int main…...
Redis相关知识总结(缓存雪崩,缓存穿透,缓存击穿,Redis实现分布式锁,如何保持数据库和缓存一致)
文章目录 1.什么是Redis?2.为什么要使用redis作为mysql的缓存?3.什么是缓存雪崩、缓存穿透、缓存击穿?3.1缓存雪崩3.1.1 大量缓存同时过期3.1.2 Redis宕机 3.2 缓存击穿3.3 缓存穿透3.4 总结 4. 数据库和缓存如何保持一致性5. Redis实现分布式…...
【HarmonyOS 5.0】DevEco Testing:鸿蒙应用质量保障的终极武器
——全方位测试解决方案与代码实战 一、工具定位与核心能力 DevEco Testing是HarmonyOS官方推出的一体化测试平台,覆盖应用全生命周期测试需求,主要提供五大核心能力: 测试类型检测目标关键指标功能体验基…...
Python爬虫实战:研究feedparser库相关技术
1. 引言 1.1 研究背景与意义 在当今信息爆炸的时代,互联网上存在着海量的信息资源。RSS(Really Simple Syndication)作为一种标准化的信息聚合技术,被广泛用于网站内容的发布和订阅。通过 RSS,用户可以方便地获取网站更新的内容,而无需频繁访问各个网站。 然而,互联网…...
将对透视变换后的图像使用Otsu进行阈值化,来分离黑色和白色像素。这句话中的Otsu是什么意思?
Otsu 是一种自动阈值化方法,用于将图像分割为前景和背景。它通过最小化图像的类内方差或等价地最大化类间方差来选择最佳阈值。这种方法特别适用于图像的二值化处理,能够自动确定一个阈值,将图像中的像素分为黑色和白色两类。 Otsu 方法的原…...
华为云Flexus+DeepSeek征文|DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建
华为云FlexusDeepSeek征文|DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建 前言 如今大模型其性能出色,华为云 ModelArts Studio_MaaS大模型即服务平台华为云内置了大模型,能助力我们轻松驾驭 DeepSeek-V3/R1,本文中将分享如何…...
Maven 概述、安装、配置、仓库、私服详解
目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...
