嵌入式系统与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. 利用嵌入式开发工具,如优…...
C++学习——编译的过程
编译的过程——预处理 引言预处理包含头文件宏定义指令条件编译 编译、链接 引言 C程序编译的过程:预处理 -> 编译(优化、汇编)-> 链接 编译和链接的内容可以查阅这篇文章(点击查看) 预处理 编译预处理是指&a…...
接口测试和单元测试
🍅 点击文末小卡片 ,免费获取软件测试全套资料,资料在手,涨薪更快 接口测试的本质:就是通过数据驱动,测试类里面的函数。 单元测试的本质:通过代码级别,测试函数。 单元测试的框架…...
redis工程实战介绍(含面试题)
文章目录 redis单线程VS多线程面试题**redis是多线程还是单线程,为什么是单线程****聊聊redis的多线程特性和IO多路复用****io多路复用模型****redis如此快的原因** BigKey大批量插入数据测试数据key面试题海量数据里查询某一固定前缀的key如果生产上限值keys * ,fl…...
深度学习:GPT-1的MindSpore实践
GPT-1简介 GPT-1(Generative Pre-trained Transformer)是2018年由Open AI提出的一个结合预训练和微调的用于解决文本理解和文本生成任务的模型。它的基础是Transformer架构,具有如下创新点: NLP领域的迁移学习:通过最…...
内嵌编辑器+AI助手,Wave Terminal打造终端新体验
作为新一代终端工具的佼佼者,Wave Terminal 突破性地将传统命令行与现代图形界面相结合,为开发者带来全新的操作体验。这款创新的开源终端工具跨越了操作系统的界限,完美支持 macOS、Windows 和 Linux 平台,特别适合需要频繁处理远…...
《Object类》
目录 一、Object类 1.1 定义与地位 1.2 toString()方法 1.3 equals()方法 1.4 hashcode()方法 一、Object类 1.1 定义与地位 Object类是Java语言中的根类,所有的类(除了Object类)都直接或间接继承自Object。这就意味着在Java中…...
GPTZero:高效识别AI生成文本,保障学术诚信与内容原创性
产品描述 GPTZero 是一款先进的AI文本检测工具,专为识别由大型语言模型(如ChatGPT、GPT-4、Bard等)生成的文本而设计。它通过分析文本的复杂性和一致性,判断文本是否可能由人类编写。GPTZero 已经得到了超过100家媒体机构的报道&…...
2024 APMCM亚太数学建模C题 - 宠物行业及相关产业的发展分析和策略 完整参考论文(1)
摘要 近年来,中国宠物食品行业迅速增长,但面临复杂的国际形势和多变的市场环境,因此科学地分析和预测该行业的发展趋势至关重要。本研究通过构建多个机器学习与统计回归模型,量化分析中国宠物食品行业的关键驱动因素,预测未来宠物食品总产值和出口值。 在数据处理部分,…...
深入实践 Shell 脚本编程:高效自动化操作指南
一、什么是 Shell 脚本? Shell 脚本是一种用 Shell 编写的脚本程序,用于执行一系列的命令。它是 Linux/Unix 系统中自动化管理任务的利器,能够显著提升工作效率,特别适合批量处理文件、监控系统状态、自动部署等任务。 二、Shell…...
用代码如何创建Python代理池
1. 导入所需库 这里使用requests库来发送HTTP请求获取网页内容和测试代理是否可用,BeautifulSoup用于解析网页(比如从提供代理列表的网页提取代理信息),random用于随机选择代理,time用于设置请求间隔等操作。 2. 获取…...
python蓝桥杯刷题2
1.最短路 题解:这个采用暴力枚举,自己数一下就好了 2.门牌制作 题解:门牌号从1到2020,使用for循环遍历一遍,因为range函数无法调用最后一个数字,所以设置成1到2021即可,然后每一次for循环&…...
跨境出海安全:如何防止PayPal账户被风控?
今天咱们聊聊那些让人头疼的事儿——PayPal账户被风控。不少跨境电商商家反馈,我们只是想要安安静静地在网上做个小生意,结果不知道为什么,莫名其妙账户就被冻结了。 但其实每个封禁都是有原因的,今天就来给大家分享分享可能的原…...
学习与理解LabVIEW中多列列表框项名和项首字符串属性
多列列表框控件在如下的位置: 可以对该控件右击,如下位置,即可设置该控件的显示项: 垂直线和水平线指的是上图中组成单元格的竖线和横线(不包括行首列首) 现在介绍该多列列表框的两个属性,分别…...
多摩川编码器协议及单片机使用
参考: https://blog.csdn.net/qq_28149763/article/details/132718177 https://mp.weixin.qq.com/s/H4XoR1LZSMH6AxsjZuOw6g 1、多摩川编码器协议 多摩川数据通讯是基于485 硬件接口标准NRZ 协议,通讯波特率为2.5Mbps 的串行通讯,采用差分两…...
小雪时节,阴盛阳衰,注意禁忌
宋张嵲《小雪作》 霜风一夜落寒林,莽苍云烟结岁阴。 把镜渐无勋业念,爱山唯驻隐沦心。 冰花散落衡门静,黄叶飘零一迳深。 世乱身穷无可奈,强将悲慨事微吟。 网络图片:小雪时节 笔者禁不住喟然而叹:“冰…...
shell脚本
一.要求 1.接收用户部署的服务名称 2.判断服务是否安装 已安装;自定义网站配置路径为/www;并创建共享目录和网页文件;重启服务 没有安装;安装对应的软件包 3.测试 判断服务是否成功运行; 已运行&#…...
[371]基于springboot的高校实习管理系统
摘 要 如今社会上各行各业,都喜欢用自己行业的专属软件工作,互联网发展到这个时候,人们已经发现离不开了互联网。新技术的产生,往往能解决一些老技术的弊端问题。因为传统高校实习管理系统信息管理难度大,容错率低&am…...
NVR管理平台EasyNVR多个NVR同时管理:全方位安防监控视频融合云平台方案
EasyNVR是基于端-边-云一体化架构的安防监控视频融合云平台,具有简单轻量的部署方式与多样的功能,支持多种协议(如GB28181、RTSP、Onvif、RTMP)和设备类型(IPC、NVR等),提供视频直播、录像、回放…...
Trains-04练习-函数
#基础练习 练习目标 01.计算车费 题目描述 小红打车,起步价8元(3公里), 每公里收费 2 元,她打车行驶了 n 公里,通过函数封装并计算车费 输入描述 输入一个公里数 输出描述 输出应付车费 示例 输入: 5 输出: 1…...
常用docker应用部署,wordpress、mysql、tomcat、nginx、redis
案例一、 wordpress 创建网络 docker network create wordpress-network创建容器 docker volume create --name mariadb_data docker run -d --name mariadb --restartalways \-p 3306:3306 \--env MARIADB_ALLOW_EMPTY_ROOT_PASSWORDyes \--env ALLOW_EMPTY_PASSWORDyes \--…...
设计模式之 模板方法模式
模板方法模式是行为型设计模式的一种。它定义了一个算法的骨架,并将某些步骤的实现延迟到子类中。模板方法模式允许子类在不改变算法结构的情况下重新定义算法的某些特定步骤。 模板方法模式的核心在于: 封装算法的骨架:通过父类中的模板方…...
GitLab|数据迁移
注意:新服务器GitLab版本需和旧版本一致 在旧服务器执行命令进行数据备份 gitlab-rake gitlab:backup:create 备份数据存储在 /var/opt/gitlab/backups/ 将备份数据传输到新服务器的/var/opt/gitlab/backups/下,并修改文件权限(下载前和上传…...
[CISCN 2019初赛]Love Math 详细题解
知识点: 数学函数转换字符串 GET传参外部赋值 eval()函数解析执行命令 PHP动态调用函数名 源码: <?php error_reporting(0); //听说你很喜欢数学,不知道你是否爱它胜过爱flag if(!isset($_GET[c])){show_source(__FILE__); }else{//例子 c20-1$content $_GET[c];if (…...
第N8周:使用Word2vec实现文本分类
🍨 本文为🔗365天深度学习训练营 中的学习记录博客🍖 原作者:K同学啊 本周任务: 结合Word2Vec文本内容预测文本标签 加载数据 import torch import torch.nn as nn import torchvision from torchvision import tra…...
SQL,力扣题目1635,Hopper 公司查询 I
一、力扣链接 LeetCode_1635 二、题目描述 表: Drivers ---------------------- | Column Name | Type | ---------------------- | driver_id | int | | join_date | date | ---------------------- driver_id 是该表的主键(具有唯一值的列)。 该表的每一行…...
【Apache Paimon】-- 6 -- 清理过期数据
目录 1、简要介绍 2、操作方式和步骤 2.1、调整快照文件过期时间 2.2、设置分区过期时间 2.2.1、举例1 2.2.2、举例2 2.3、清理废弃文件 3、参考 1、简要介绍 清理 paimon (表)过期数据可以释放存储空间,优化资源利用并提升系统运行效率等。本文将介绍如何清理 Paim…...
nginx 配置lua执行shell脚本
1.需要nginx安装lua_nginx_module模块,这一步安装时,遇到一个坑,nginx执行configure时,一直提示./configure: error: unsupported LuaJIT version; ngx_http_lua_module requires LuaJIT 2.x。 网上一堆方法都试了,都…...
C++:设计模式-单例模式
单例模式(Singleton Pattern)是一种设计模式,确保一个类只有一个实例,并且提供全局访问点。实现单例模式的关键是防止类被多次实例化,且能够保证实例的唯一性。常见的实现手法包括懒汉式、饿汉式、线程安全的懒汉式等。…...
优先级队列
概述 优先级队列(Priority Queue)是一种抽象数据类型(ADT),类似于普通的队列,不同之处在于每个元素都有一个与之相关的优先级。在优先级队列中,元素的出队顺序不是按照它们被入队的顺序&#x…...
一、Docker 安装集
一、Docker CentOS https://docs.docker.com/engine/install/centos/ 在 CentOS 上安装 Docker Engine # Docker要求CentOS系统的内核版本高于3.10:# Docker从1.13版本之后,采用时间线的方式作为版本号: 1. 分为社区版CE和企业版EE。 2. 社…...
软件测试——自动化测试常见函数
在上一篇文章软件测试——自动化测试概念篇-CSDN博客中,给大家演示了一下自动化程序,而本篇文章会带大家详细学习selenium库。 selenium库是python官方的库,里面包含了很多操控浏览器的函数。 本节重点 元素定位操作测试对象窗口等待导航弹…...
SEO网站都用哪里的服务器
在当今这个信息爆炸的时代,网站的加载速度已经成为衡量其质量的重要指标之一。对于SEO网站来说,速度不仅关乎用户体验,更是影响搜索引擎排名的重要因素。在众多服务器提供商中,鼎峰新匯凭借其卓越的性能和优质的服务,成…...
【从零开始的LeetCode-算法】3233. 统计不是特殊数字的数字数量
给你两个 正整数 l 和 r。对于任何数字 x,x 的所有正因数(除了 x 本身)被称为 x 的 真因数。 如果一个数字恰好仅有两个 真因数,则称该数字为 特殊数字。例如: 数字 4 是 特殊数字,因为它的真因数为 1 和…...
shell脚本(五)
声明! 学习视频来自B站up主 泷羽sec 有兴趣的师傅可以关注一下,如涉及侵权马上删除文章,笔记只是方便各位师傅的学习和探讨,文章所提到的网站以及内容,只做学习交流,其他均与本人以及泷羽sec团队无关&#…...
Windows中指定路径安装DockerDesktop
Windows中指定路径安装DockerDesktop 文章目录 Windows中指定路径安装DockerDesktop1. 先卸载干净(如果已安装过的话)2. 指定路径安装1. 新建需要安装的文件目录2. 指定路径安装 3. WSL子系统下载1. GitHub下载地址2. 指定版本直接下载 Widnows中直接安装docker desktop&#x…...
阿里云私服地址
1.解压apache-maven-3.6.1-bin 2.配置本地仓库:修改conf/dettings.xml中的<localReoisitory>为一个指定目录。56行 <localRepository>D:\apache-maven-3.6.1-bin\apache-maven-3.6.1\mvn_repo</localRepository> 3.配置阿里云私服:…...
深入探究 Vue 实例挂载过程与场景 —— 代码实例详解
Vue 实例挂载过程及使用场景分析 Vue 实例的挂载过程是 Vue 应用启动的核心,它决定了 Vue 组件如何与 DOM 进行绑定。在理解 Vue 实例挂载的过程后,我们可以根据不同的使用场景来选择合适的挂载方式。下面详细讲解 Vue 实例的挂载过程、常见使用场景,并通过实际项目示例进行…...
特征交叉-MaskNet文章总结代码实现
MaskNet 这个模型是微博21年提出的,23年twitter(X)开源的推荐系统排序模块使用的backbone结构。 核心思想是认为DNN为主的特征交叉是addictive,交叉效率不高;所以设计了一种multiplicatvie的特征交叉 如何设计muliplicative特征交叉呢&#x…...
【第八课】Rust中的函数与方法
目录 前言 函数指针 函数当作另一个函数的参数 函数当作另一个函数的返回值 闭包 方法 关联函数 总结 前言 在前面几课中,我们都或多或少的接触到了rust中的函数,rust中的函数和其他语言的并没有什么不同,简单的语法不在这篇文章中赘…...
PyQt飞机大战游戏(附下载地址)
欢迎下载体验! 文件大小:22.9 M 下载地址:链接:https://wwrr.lanzoul.com/iybV22frvcng pyqt5-飞机大战 一.前言 up主最近高产,再给大家分享一个博主开发的小游戏-飞机大战,这是一款飞行射击游…...
代替Spinnaker 的 POINTGREY工业级相机 FLIR相机 Python编程案例
SpinnakerSDK_FULL_4.0.0.116_x64 是一个用于FLIR相机的SDK,主要用于图像采集和处理。Spinnaker SDK主要提供C接口,无法直接应用在python环境。本文则基于Pycharm2019python3.7的环境下,调用opencv,EasySpin,PySpin,的库实现POINTGREY工业级相…...
redis模糊匹配key内存分析的脚本
效果: 脚本 与 redis-cli 命令放在同一路径下执行脚本 注意: 1、SCAN 命令仅扫描当前节点的键,若要扫描整个集群中的所有节点,建议在各个从节点上分别执行; 2、为避免扫描对业务产生影响: 可以在从节点或…...
STM32设计学生宿舍监测控制系统-分享
目录 前言 一、本设计主要实现哪些很“开门”功能? 二、电路设计原理图 电路图采用Altium Designer进行设计: 三、实物设计图 四、程序源代码设计 五、获取资料内容 前言 本项目旨在利用STM32单片机为核心,结合传感器技术、无线通信技…...
Python爬虫案例八:抓取597招聘网信息并用xlutils进行excel数据的保存
excel保存数据的三种方式: 1、pandas保存excel数据,后缀名为xlsx; 举例: import pandas as pddic {姓名: [张三, 李四, 王五, 赵六],年龄: [18, 19, 20, 21],住址: [广州, 青岛, 南京, 重庆] } dic_file pd.DataFrame(dic) dic_file…...
Mybatis-Day3
规则: 定义与SQL映射文件同名的Mapper接口,并且将Mapper接口和SQL映射文件放置在同一目录下 设置SQL映射我呢见的namespace属性为Mapper接口的全限定名 在Mapper接口中定义方法,方法名就是SQL映射文件中sql语句的id,并保持参数类…...
第六节-AppScan扫描报告
第六节-AppScan扫描报告 1.加载扫描结果 1.点击【打开】 2.选择之前保存过的扫描结果 3.等待加载完成 2.领导查看的报告 1.点击【报告】 2.模板选择为【缺省值】 3.最低严重性选择为【中】,测试类型选择为【应用程序】 4.点击【布局】 5.选择【其他徽标】&#x…...
多模MPO的测试套件
MultiFiber™Pro光功率计及光纤测试工具包 首款支持单模和多模MPO光纤认证的MPO光纤测试仪 利用“扫描全部”功能自动扫描和测试MPO连接器中的所有光纤 支持多模和单模MPO光纤干线 在测试光纤干线时无需使用扇形跳线 以最小的界面显示易懂的结果 用户界面上显示所有12光纤 自动…...
使用php和Xunsearch提升音乐网站的歌曲搜索效果
文章精选推荐 1 JetBrains Ai assistant 编程工具让你的工作效率翻倍 2 Extra Icons:JetBrains IDE的图标增强神器 3 IDEA插件推荐-SequenceDiagram,自动生成时序图 4 BashSupport Pro 这个ides插件主要是用来干嘛的 ? 5 IDEA必装的插件&…...
Idea忽略提交文件、Idea设置文件隐藏、Idea提交时隐藏部分文件、git提交时忽略文件
文章目录 一、在idea中commit文件时隐藏文件方式一:创建.gitignore文件(推荐)方式二:通过File Types设置隐藏文件方式三:通过Git配置忽略文件(不推荐)总结 二、可能遇到的问题2.1、.gitigno…...