当前位置: 首页 > news >正文

BOOST 库在机器视觉中的应用及示例代码分析

一、引言

机器视觉是一门让计算机模拟人类视觉功能,对图像或视频数据进行理解、分析和决策的学科领域。在机器视觉的开发过程中,常常需要高效处理各种数据结构、进行数值计算、实现多线程并行处理以及运用优秀的算法框架等。BOOST 库作为一个功能强大、涵盖众多实用模块的 C++ 开源库,为机器视觉应用开发提供了诸多便利。它能够帮助开发者更加便捷地解决诸如图像数据管理、特征提取算法优化、系统性能提升等方面的问题。下面将详细介绍 BOOST 库在机器视觉几个关键方面的应用并结合代码进行阐释。

二、BOOST 库简介

BOOST 库是一个经过广泛测试、可移植且开源的 C++ 库集合,包含了上百个独立的模块,涉及智能指针、多线程、容器扩展、数值运算、图像处理等众多领域。这些模块可以根据实际需求灵活选用,大大提高了 C++ 开发的效率和代码质量。

三、BOOST 库在机器视觉数据结构方面的应用

(一)图像数据存储与管理

在机器视觉中,图像通常以二维数组的形式表示像素信息(例如灰度图像每个像素用一个字节表示亮度值,彩色图像常用 RGB 三个字节表示一个像素)。BOOST 的多维数组库(boost::multi_array)可以方便地管理图像数据。

以下是一个简单示例,展示如何使用 boost::multi_array 来存储和访问一幅灰度图像(假设图像宽 width 为 100,高 height 为 100):

#include <iostream>
#include <boost/multi_array.hpp>int main() {// 定义图像数据类型,这里用无符号8位整数表示灰度值(0 - 255)typedef boost::multi_array<unsigned char, 2> ImageArray;// 定义图像尺寸ImageArray::extent_gen extents;ImageArray image(extents[100][100]);// 初始化图像数据,简单示例设置为全白(灰度值255)for (size_t y = 0; y < 100; ++y) {for (size_t x = 0; x < 100; ++x) {image[y][x] = 255;}}// 访问并修改部分像素值image[50][50] = 0;  // 将坐标(50, 50)处的像素设为黑色(灰度值0)std::cout << "Pixel value at (50, 50): " << (int)image[50][50] << std::endl;return 0;
}

在上述代码中,首先通过 typedef 定义了一个二维的 boost::multi_array 类型来表示图像,其元素类型为 unsigned char 用于存储灰度值。然后利用 extents 定义了图像的宽和高维度大小,并创建了实际的图像数据结构 image。接着可以通过循环方便地初始化图像像素值,也能单独访问和修改指定位置的像素,就如同操作普通的二维数组一样,但 boost::multi_array 提供了更强大的边界检查等功能,有助于提升代码的健壮性。

(二)容器扩展用于特征数据管理

在机器视觉里,提取图像特征(如角点、边缘等)后,往往需要使用合适的容器来存储和管理这些特征数据。BOOST 库中的一些容器扩展,比如 boost::unordered_map 可以很方便地将特征标识(例如特征点的编号)和对应的特征描述子(如包含特征点坐标、方向、尺度等信息的结构体)关联起来。

假设有一个简单的特征点结构体如下,包含坐标 xy 和一个简单的描述子值(这里简化示意):

struct FeaturePoint {double x;double y;int descriptor;
};

下面是使用 boost::unordered_map 来存储特征点的示例代码,假设我们已经通过某种特征提取算法得到了多个特征点:

#include <iostream>
#include <boost/unordered_map.hpp>int main() {// 定义特征点的unordered_map,键为特征点编号(这里简单用整数表示),值为FeaturePoint结构体boost::unordered_map<int, FeaturePoint> featurePoints;// 添加几个特征点示例FeaturePoint p1 = {10.0, 20.0, 123};FeaturePoint p2 = {30.0, 40.0, 456};featurePoints[1] = p1;featurePoints[2] = p2;// 访问和输出特征点信息for (const auto& pair : featurePoints) {std::cout << "Feature Point " << pair.first << ": (" << pair.second.x << ", " << pair.second.y << "), Descriptor: " << pair.second.descriptor << std::endl;}return 0;
}

通过 boost::unordered_map,可以快速地根据特征点编号查找对应的特征信息,相比普通的 std::map,在插入和查找操作上具有更好的平均性能,尤其适合在机器视觉应用中大量特征数据需要频繁访问的场景。

四、BOOST 库在机器视觉算法优化方面的应用

(一)数值计算优化

很多机器视觉算法涉及大量的数值计算,例如图像滤波中的卷积运算、特征匹配中的距离计算等。BOOST 库中的数学相关模块(如 boost::numeric 等)可以提供高效的数值算法和数据类型。

以图像的简单均值滤波为例,常规的实现可能如下(这里简化代码,不考虑边界处理等完整细节):

#include <iostream>
#include <vector>// 假设这里是一幅灰度图像,用二维vector表示
using Image = std::vector<std::vector<unsigned char>>;Image meanFilter(const Image& input, int kernelSize) {int width = input.size();int height = input[0].size();Image output(width, std::vector<unsigned char>(height, 0));int halfKernel = kernelSize / 2;for (int y = halfKernel; y < height - halfKernel; ++y) {for (int x = halfKernel; x < width - halfKernel; ++x) {int sum = 0;for (int ky = -halfKernel; ky <= halfKernel; ++ky) {for (int kx = -halfKernel; kx <= halfKernel; ++kx) {sum += input[y + ky][x + kx];}}output[y][x] = sum / (kernelSize * kernelSize);}}return output;
}

然而,使用 BOOST 库中的 boost::accumulators 模块可以更简洁高效地实现数值累加等操作。以下是改写后的代码:

#include <iostream>
#include <vector>
#include <boost/accumulators/accumulators.hpp>
#include <boost/accumulators/statistics/stats.hpp>
#include <boost/accumulators/statistics/mean.hpp>using namespace boost::accumulators;// 同样假设灰度图像用二维vector表示
using Image = std::vector<std::vector<unsigned char>>;Image meanFilter(const Image& input, int kernelSize) {int width = input.size();int height = input[0].size();Image output(width, std::vector<unsigned char>(height, 0));int halfKernel = kernelSize / 2;for (int y = halfKernel; y < height - halfKernel; ++y) {for (int x = halfKernel; x < width - halfKernel; ++x) {accumulator_set<double, stats<tag::mean>> acc;for (int ky = -halfKernel; ky <= halfKernel; ++ky) {for (int kx = -halfKernel; kx <= halfKernel; ++kx) {acc(input[y + ky][x + kx]);}}output[y][x] = static_cast<unsigned char>(mean(acc));}}return output;
}

在上述改进后的代码中,利用 boost::accumulators 来累计卷积核覆盖区域内的像素值,最后通过 mean 函数直接获取平均值,代码结构更加清晰,并且 boost::accumulators 在内部实现上针对数值累加等操作进行了优化,一定程度上可以提高计算效率,尤其是在处理复杂的数值计算任务时优势更明显。

(二)基于 BOOST 图库(Graph Library)的图像分割算法

图像分割是机器视觉中的重要任务,将图像划分成不同的具有相似特征的区域。BOOST 库中的图库(Graph Library)可以辅助构建基于图的图像分割算法。

下面是一个简单示例,展示如何利用 BOOST 图库构建一个简单的基于区域合并的图像分割思路(简化示意,实际应用需更多完善和优化):

#include <iostream>
#include <boost/graph/adjacency_list.hpp>
#include <boost/graph/graph_traits.hpp>
#include <boost/graph/connected_components.hpp>// 定义图像分割用的图结构类型
typedef boost::adjacency_list<boost::vecS, boost::vecS, boost::undirectedS> Graph;// 假设这里有一个简单函数获取图像的初始区域(返回区域编号的二维数组,每个像素所属区域编号)
std::vector<std::vector<int>> getInitialRegions(int width, int height);int main() {int width = 100;int height = 100;std::vector<std::vector<int>> initialRegions = getInitialRegions(width, height);// 创建图对象Graph g(width * height);// 根据初始区域构建图的边,这里简单示例,如果相邻区域相似则添加边(判断相似的逻辑省略)for (int y = 0; y < height - 1; ++y) {for (int x = 0; x < width - 1; ++x) {int currentRegion = initialRegions[y][x];int rightRegion = initialRegions[y][x + 1];int belowRegion = initialRegions[y + 1][x];if (currentRegion!= rightRegion) {boost::add_edge(x + y * width, (x + 1) + y * width, g);}if (currentRegion!= belowRegion) {boost::add_edge(x + y * width, x + (y + 1) * width, g);}}}// 利用BOOST库的函数计算图的连通分量,即最终分割的区域std::vector<int> component(num_vertices(g));int numComponents = connected_components(g, &component[0]);std::cout << "Number of image segments: " << numComponents << std::endl;return 0;
}

在这个示例中,首先定义了适合图像分割场景的图结构类型 Graph,通过 boost::adjacency_list 进行定义。然后获取图像的初始区域信息(这里用简单函数模拟,实际中可能通过像素灰度、颜色等特征聚类等方式获取),接着根据相邻区域的相似性(这里简单示意,实际要复杂的相似性判断)构建图的边,最后利用 boost::graph 中的 connected_components 函数来计算图的连通分量,也就是最终分割得到的图像区域个数以及各像素所属的区域,实现了一个简单的基于图的图像分割思路,而 BOOST 图库提供了丰富的图操作函数,便于开发者进一步优化和拓展该算法。

五、BOOST 库在机器视觉系统性能提升方面的应用

(一)多线程并行处理

机器视觉系统往往需要处理大量的图像数据或者执行复杂的计算任务,为了提高处理速度,可以利用 BOOST 库的多线程模块(如 boost::thread 等)实现并行处理。

例如,在对一批图像进行特征提取时,假设特征提取函数 extractFeatures 已经定义好,以下是使用多线程并行处理的示例代码:

#include <iostream>
#include <vector>
#include <boost/thread.hpp>// 假设这里是一个简单的特征提取函数,接受一幅图像并返回特征点向量(简化示意)
std::vector<FeaturePoint> extractFeatures(const Image& image);// 定义图像类型,这里简化用二维vector表示
using Image = std::vector<std::vector<unsigned char>>;int main() {// 假设有一组图像数据std::vector<Image> images = { /* 这里填充若干幅图像 */ };std::vector<std::vector<FeaturePoint>> allFeatures(images.size());// 创建线程向量std::vector<boost::thread> threads;// 启动多个线程分别对每幅图像进行特征提取for (size_t i = 0; i < images.size(); ++i) {threads.push_back(boost::thread([&, i]() {allFeatures[i] = extractFeatures(images[i]);}));}// 等待所有线程完成for (auto& th : threads) {th.join();}// 后续可以对提取的所有特征进行汇总、匹配等操作// 这里简单输出特征点数量示例for (size_t i = 0; i < allFeatures.size(); ++i) {std::cout << "Image " << i << " has " << allFeatures[i].size() << " feature points." << std::endl;}return 0;
}

在上述代码中,通过 boost::thread 创建多个线程,每个线程负责对一幅图像进行特征提取操作,通过 lambda 表达式将图像索引传递给特征提取函数,然后利用 join 操作等待所有线程执行完毕。这样可以充分利用多核处理器的性能,同时处理多幅图像,大大缩短了整体的特征提取时间,提升了机器视觉系统在面对批量图像数据时的处理效率。

(二)内存管理优化

在机器视觉应用中,处理大尺寸图像或者长时间运行的系统中,内存管理至关重要。BOOST 库中的智能指针(如 boost::shared_ptrboost::unique_ptr 等)可以帮助更好地管理图像数据以及相关资源的内存。

以 boost::shared_ptr 为例,假设我们有一个图像加载函数 loadImage 用于从文件加载图像数据到 boost::multi_array 结构中(代码省略具体加载实现细节),以下是使用 boost::shared_ptr 来管理图像数据内存的示例:

#include <iostream>
#include <boost/multi_array.hpp>
#include <boost/shared_ptr.hpp>// 假设这里是加载图像函数,返回指向图像数据的shared_ptr(简化示意)
boost::shared_ptr<boost::multi_array<unsigned char, 2>> loadImage(const std::string& fileName);int main() {std::string imageFileName = "test.jpg";boost::shared_ptr<boost::multi_array<unsigned char, 2>> imageData = loadImage(imageFileName);// 可以像正常指针一样访问图像数据,例如获取图像宽、高并输出部分像素值(假设图像已正确加载)int width = imageData->shape()[0];int height = imageData->shape()[1];std::cout << "Image width: " << width << ", height: " << height << std::endl;std::cout << "Pixel value at (0, 0): " << (int)(*imageData)[0][0] << std::endl;return 0;
}

使用 boost::shared_ptr 管理图像数据内存,当多个模块或者函数需要访问同一幅图像数据时,它可以自动跟踪引用计数,当最后一个引用释放时,自动释放所指向的图像数据内存,避免了内存泄漏以及手动管理内存释放的复杂性,提高了内存使用的安全性和效率,尤其适合在复杂的机器视觉系统中涉及多模块协作、频繁创建和销毁图像数据对象的场景。

六、结论

BOOST 库凭借其丰富多样且功能强大的模块,在机器视觉领域从数据结构管理、算法优化到系统性能提升等诸多方面都有着广泛且有效的应用。通过合理运用 BOOST 库中的相关功能,开发者可以编写出更加高效、健壮且易于维护的机器视觉应用程序。无论是处理图像数据、优化复杂算法中的数值计算,还是提升整个系统的处理速度和内存管理水平,BOOST 库都提供了切实可行的解决方案,助力机器视觉技术在更多实际场景中发挥更大的作用,并且随着机器视觉领域不断发展以及 BOOST 库自身的持续更新完善,其应用前景也将更为广阔。

相关文章:

BOOST 库在机器视觉中的应用及示例代码分析

一、引言 机器视觉是一门让计算机模拟人类视觉功能&#xff0c;对图像或视频数据进行理解、分析和决策的学科领域。在机器视觉的开发过程中&#xff0c;常常需要高效处理各种数据结构、进行数值计算、实现多线程并行处理以及运用优秀的算法框架等。BOOST 库作为一个功能强大、…...

第二十六天 自然语言处理(NLP)词嵌入(Word2Vec、GloVe)

自然语言处理&#xff08;NLP&#xff09;中的词嵌入&#xff08;Word2Vec、GloVe&#xff09;技术&#xff0c;是NLP领域的重要组成部分&#xff0c;它们为词汇提供了高维空间到低维向量的映射&#xff0c;使得语义相似的词汇在向量空间中的距离更近。以下是对这些技术的详细解…...

Log4j2 详解(异步日志打印及CSV格式日志输出)

Log4j2 详解 Apache Log4j2 是一个功能强大的 Java 日志记录框架&#xff0c;提供高性能和灵活的配置。本文档涵盖了 Log4j2 的核心功能及其详细使用方式&#xff0c;包括基础配置、异步日志、CSV 格式日志的输出以及使用注意事项。 一 Log4j2 基础概念与配置 1.1 Log4j2 介绍…...

[网络安全] DVWA之Content Security Policy (CSP) Bypass 攻击姿势及解题详析合集

CSP概念 CSP 是 Content Security Policy&#xff08;内容安全策略&#xff09;的缩写&#xff0c;是一种用于增强 Web 应用程序安全性的安全机制。它通过允许网站管理员控制页面中加载内容的来源来减少跨站脚本攻击&#xff08;XSS&#xff09;等常见的安全风险。 CSP 的工作…...

linux shell脚本 【分支结构case...in 、循环结构、函数】内附练习

1.思维导图 2.练习 1.定义一个find函数&#xff0c;查找ubuntu和root的gid 2.定义一个数组&#xff0c;写一个函数完成对数组的冒泡排序 bubble() {n${#arr[*]}for((i0;i<n-1;i));dofor((j0;j<n-1-i;j));doif ((arr[j]>arr[j1]));thentemp${arr[j]}arr[j]${arr[j1]}a…...

C# 设计模式(结构型模式):桥接模式

C# 设计模式&#xff08;结构型模式&#xff09;&#xff1a;桥接模式 在软件设计中&#xff0c;我们经常会遇到系统的变化频繁&#xff0c;或者需要灵活扩展功能的场景。这时&#xff0c;桥接模式&#xff08;Bridge Pattern&#xff09;便显得尤为重要。桥接模式是一个结构型…...

RC充电电路仿真与分析

RC充电原理 下图是一个常见的RC充电电路&#xff1a;&#xff08;假设R10K&#xff0c;C100nF&#xff09; SW断开时&#xff0c;这个电路处于断路状态&#xff0c;C既没有充电也没有放电&#xff1b;SW闭合时&#xff0c;直流电源5V为电容C充电&#xff1b; 充电时电容两端…...

在 SQL 中获取第m个开始的n条记录方法汇总

在 SQL 中&#xff0c;要获取第m个开始的n条记录&#xff0c;主要取决于你使用的数据库系统和支持的功能。以要获取第10个开始的20条记录为例说明几种常见的方法&#xff1a; 1. 使用 LIMIT 和 OFFSET 适用于 MySQL、PostgreSQL 等支持 LIMIT 的数据库。 SELECT * FROM table…...

Linux 35.6 + JetPack v5.1.4之编译 pytorch

Linux 35.6 JetPack v5.1.4之编译 pytorch 1. 源由2. 折腾3. 构建步骤3.1 下载代码3.2 编译选项3.3 CUDA选项3.4 CUDA路径3.5 版本控制3.6 编译whl 4. 总结5. 参考资料 1. 源由 目前&#xff0c;有很多科研性质的自动导航的开源代码&#xff0c;例如&#xff1a; Linux 35.5…...

docker 部署nginx

1、拉取阿里的nginx镜像&#xff1a; docker pull crpi-k5k93ldwfc7o75ip.cn-hangzhou.personal.cr.aliyuncs.com/list_su/nginx:stable-perl 2、官方nginx镜像&#xff1a; docker pull nginx:stable-perl 3、创建挂载文件目录 mkdir nginx && cd nginx mkdir c…...

深入刨析数据结构之排序(上)

目录 1.内部排序 1.1概述 1.2插入排序 1.2.1其他插入排序 1.2.1.1 折半插入排序 1.2.1.2 2-路插入排序 1.3希尔排序 1.4快速排序 1.4.1起泡排序 1.4.2快速排序 1.4.2.1hoare版本 1.4.2.2挖坑版本 1.4.2.3前后指针版本 1.4.2.4优化版本 1.4.2.4.1小区间插入排序优…...

Java - 日志体系_Apache Commons Logging(JCL)日志接口库_桥接Logback 及 源码分析

文章目录 PreApache CommonsApache Commons ProperLogging &#xff08;Apache Commons Logging &#xff09; JCL 集成logbackPOM依赖配置文件 logback.xml使用 源码分析jcl-over-slf4j 的工作原理1. LogFactory 的实现2. SLF4JLogFactory 和 Log 的实例化过程3. SLF4JLog 和 …...

力扣刷题:栈和队列OJ篇(下)

大家好&#xff0c;这里是小编的博客频道 小编的博客&#xff1a;就爱学编程 很高兴在CSDN这个大家庭与大家相识&#xff0c;希望能在这里与大家共同进步&#xff0c;共同收获更好的自己&#xff01;&#xff01;&#xff01; 目录 1.括号匹配问题&#xff08;1&#xff09;题目…...

QT:控件属性及常用控件(1)------核心控件及属性

一个图形化界面上的内容&#xff0c;不需要我们直接从零去实现 QT中已经提供了很多的内置控件&#xff1a; 按钮&#xff0c;文本框&#xff0c;单选按钮&#xff0c;复选按钮&#xff0c;下拉框等等。。。。。 文章目录 1.常用控件属性1.1 enabled1.2 geometry1.2.1 geometry…...

【juc】Lock锁和AQS的继承关系

目录 1. 说明2. Lock接口与AQS的关系2.1 Lock接口2.2 AQS&#xff08;AbstractQueuedSynchronizer&#xff09; 3. ReentrantLock与AQS的具体联系3.1 ReentrantLock的实现3.2 AQS在ReentrantLock中的作用 1. 说明 1.Lock锁和AQS&#xff08;AbstractQueuedSynchronizer&#x…...

自学记录鸿蒙API 13:实现多目标识别Object Detection

起步&#xff1a;什么叫多目标识别&#xff1f; 无论是生活中的动物识别、智能相册中的场景分类&#xff0c;还是工业领域的检测任务&#xff0c;都能看到多目标识别的身影。这次&#xff0c;我决定通过学习HarmonyOS最新的Object Detection API&#xff08;API 13&#xff09…...

BOC调制信号matlab性能仿真分析,对比功率谱,自相关性以及抗干扰性

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 (完整程序运行后无水印) 2.算法运行软件版本 matlab2022a 3.部分核心程序 &#xff08;完整版代码包含详细中文注释和操作步骤视频&#xff09…...

C# 事件机制

C# 事件机制详解&#xff1a;从概念到实践 在 C# 中&#xff0c;事件机制是处理对象间通信的重要方式&#xff0c;尤其是在 GUI 应用程序&#xff08;如 WPF、WinForms&#xff09;中&#xff0c;事件用于响应用户交互&#xff08;如按钮点击、鼠标移动等&#xff09;。本文将…...

使用 Python 实现随机中点位移法生成逼真的裂隙面

使用 Python 实现随机中点位移法生成逼真的裂隙面 一、随机中点位移法简介 1. 什么是随机中点位移法&#xff1f;2. 应用领域 二、 Python 代码实现 1. 导入必要的库2. 函数定义&#xff1a;随机中点位移法核心逻辑3. 设置随机数种子4. 初始化二维裂隙面5. 初始化网格的四个顶点…...

GPT分区 使用parted标准分区划分,以及相邻分区扩容

parted 是一个功能强大的命令行工具&#xff0c;用于创建和管理磁盘分区表和分区。它支持多种分区表类型&#xff0c;如 MBR&#xff08;msdos&#xff09;、GPT&#xff08;GUID Partition Table&#xff09;等&#xff0c;并且可以处理大容量磁盘。parted 提供了一个交互式界…...

【Triton-ONNX】如何使用 ONNX 模型服务与 Triton 通信执行推理任务上-Triton快速开始

模型部署系列文章 前置-docker 理解:【 0 基础 Docker 极速入门】镜像、容器、常用命令总结前置-http/gRPC 的理解: 【HTTP和gRPC的区别】协议类型/传输效率 /性能等对比【保姆级教程附代码】Pytorch (.pth) 到 TensorRT (.plan) 模型转化全流程【保姆级教程附代码(二)】Pytor…...

问题记录:[FATAL] [1735822984.951119148]: Group ‘manipulator‘ was not found.

前言&#xff1a;最近仿照UR5手眼标定的例程&#xff0c;在新的机械臂上进行手眼标定&#xff0c;还准备用easy_hand手眼标定包。将机器人功能包导入到工作空间后进行编译运行&#xff0c;启动launch文件&#xff1a; roslaunch easy_handeye eye_to_hand_CR7_calibration.lau…...

SpringCloudAlibaba实战入门之Sentinel服务降级和服务熔断(十五)

一、Sentinel概述 1、Sentinel是什么 随着微服务的流行,服务和服务之间的稳定性变得越来越重要。Sentinel 以流量为切入点,从流量控制、熔断降级、系统负载保护等多个维度保护服务的稳定性。 一句话概括:sentinel即Hystrix的替代品,官网: https://sentinelguard.io/zh…...

Scrum中敏捷项目经理(Scrum Master)扮演什么角色?

敏捷开发模式已经逐渐被主流的软件研发团队所接受&#xff0c;其中Scrum是最具代表性的敏捷方法之一。Scrum框架中有三个核心角色&#xff1a;Product Owner&#xff08;PO&#xff09;、Scrum Master&#xff08;SM&#xff09;和Development Team&#xff08;DT&#xff09;。…...

SpringMVC(四)响应

目录 数据处理及跳转 1. 结果跳转方式 ①.ModelAndView ②.ServletAPI 1、通过HttpServletResponse进行输出 2、通过HttpServletResponse实现请求转发 3、通过HttpServletResponse实现重定向 ③.SpringMVC 1.直接输出 2.请求转发 3.重定向 2.ResponseBody响应json数…...

操作系统之文件系统

&#x1f9d1; 博主简介&#xff1a;CSDN博客专家&#xff0c;历代文学网&#xff08;PC端可以访问&#xff1a;https://literature.sinhy.com/#/literature?__c1000&#xff0c;移动端可微信小程序搜索“历代文学”&#xff09;总架构师&#xff0c;15年工作经验&#xff0c;…...

Android SPRD 工模测试修改

设备有两颗led灯&#xff0c;工模测试需全亮 vendor/sprd/proprietories-source/factorytest/testitem/led.cpp -13,6 13,10 typedef enum{#define LED_BLUE "/sys/class/leds/blue/brightness"#define LED_RED …...

C语言与操作系统

学习C语言有助于理解计算机底层原理和操作系统的工作方式 C语言自诞生以来&#xff0c;就与计算机底层操作紧密相连。作为一门高级编程语言&#xff0c;C语言提供了对硬件直接控制的能力&#xff0c;同时保留了结构化编程的特性&#xff0c;这使得它成为编写操作系统、编译器和…...

信息安全管理:网络安全

1 网络的定义和特征 1.1 网络的定义 &#xff08;根本懒得说。。你们自己wiki吧&#xff09; 网络的用处 What is a network…Devices in a network…LAN, WAN and InternetworksWhat do networks do for you… Sharing resourcesUse/share applications 1.2 网络的特征 Ch…...

python-leetcode-轮转数组

189. 轮转数组 - 力扣&#xff08;LeetCode&#xff09; class Solution:def rotate(self, nums: List[int], k: int) -> None:"""Do not return anything, modify nums in-place instead."""n len(nums)k % n # 如果 k 大于 n&#xff0c;…...

Windows上安装Go并配置环境变量(图文步骤)

前言 1. 本文主要讲解的是在windows上安装Go语言的环境和配置环境变量&#xff1b; Go语言版本&#xff1a;1.23.2 Windows版本&#xff1a;win11&#xff08;win10通用&#xff09; 下载Go环境 下载go环境&#xff1a;Go下载官网链接(https://golang.google.cn/dl/) 等待…...

【JS】期约的Promise.all()和 Promise.race()区别

概述 Promise.all() 和 Promise.race() 都是 JavaScript 中处理多个异步操作的 Promise 方法&#xff0c;但它们的行为和返回结果有所不同。 Promise.all()和Promise.race() 1. Promise.all() Promise.all() 接受一个由多个 Promise 实例组成的可迭代对象&#xff08;例如数…...

【Linux】信号处理

一、Linux系统信号 1、常见的系统信号 常见的Linux系统信号 信号值描述1SIGHUP挂起&#xff08;hang up&#xff09;进程2SIGINT中断进&#xff08;interrupt&#xff09;程3SIGQUIT停止&#xff08;stop&#xff09;进程9SIGKILL无条件终止&#xff08;terminate&#xff09;…...

Diffusion Transformer(DiT)——将扩散过程中的U-Net换成ViT:近频繁用于视频生成与机器人动作预测(含清华PAD详解)

前言 本文最开始属于此文《视频生成Sora的全面解析&#xff1a;从AI绘画、ViT到ViViT、TECO、DiT、VDT、NaViT等》 但考虑到DiT除了广泛应用于视频生成领域中&#xff0c;在机器人动作预测也被运用的越来越多&#xff0c;加之DiT确实是一个比较大的创新&#xff0c;影响力大&…...

144:vue+leaflet 使用canvas绘制不同方向、不同颜色的模仿船只三角形

作者: 还是大剑师兰特 ,曾为美国某知名大学计算机专业研究生,现为国内GIS领域高级前端工程师,CSDN知名博主,深耕openlayers、leaflet、mapbox、cesium,canvas,echarts等技术开发,欢迎加微信(gis-dajianshi),一起交流。 查看本专栏目录 - 本文是第 144个示例 文章目录…...

c# 快捷键模块

文章目录 命名空间和类类成员静态成员 静态方法GenerateHotkeyIdWndProcGetWindowHandleAndSourceRegisterUnregister 静态方法&#xff08;外部调用&#xff09;RegisterHotKey 和 UnRegisterHotKey 委托HotKeyCallbackHandler 枚举HotkeyModifiers 应用示例 using System; us…...

npm install 安装选项 -d -s -g

在使用 npm install 时&#xff0c;-d、-g 和 -s 是不同的选项&#xff0c;它们分别代表不同的安装模式或行为。以下是它们的详细解释&#xff1a; 1. -d&#xff1a;--save-dev 含义&#xff1a;将包安装为开发依赖&#xff08;devDependencies&#xff09;。使用场景&#…...

【每日学点鸿蒙知识】worker线程数量、判断用户是否进行权限决定、图片上传类型错误、request锁释放时机、H5问题

1、HarmonyOS 怎么判断worker线程创建了几个&#xff1f; 因为有数量限制&#xff0c;所以想查询当前的worker数量&#xff0c;避免创建失败&#xff0c;还有&#xff0c;是同时运行的worker数量有限制&#xff0c;还是同一个应用能创建的worker线程有限制 1、查询当前的work…...

0xc0000020错误代码怎么处理,Windows11、10坏图像错误0xc0000020的修复办法

“0xc0000020”是一种 Windows 应用程序错误代码&#xff0c;通常表明某些文件缺失或损坏。这可能是由于系统文件损坏、应用程序安装或卸载问题、恶意软件感染、有问题的 Windows 更新等原因导致的。 比如&#xff0c;当运行软件时&#xff0c;可能会出现类似“C:\xx\xxx.dll …...

智能工厂的设计软件 应用场景的一个例子:为AI聊天工具添加一个知识系统 之7 附件(文档)

为AI聊天工具添加一个知识系统 Part1 人性化&去中心化 前情提要 这一次我们暂时抛开前面对“智能工厂的软件设计”的考虑--其软件智能 产品就是 应用程序。直接将这些思维方式和方法论 运用在其具体应用场景中。本文是其中的一个应用场景。 今天用了 一个新的AI助手工具…...

智能化人才招聘系统是怎样的?

随着企业规模的扩大和业务范围的拓展&#xff0c;人才招聘成为了企业发展的关键环节。然而&#xff0c;市面上的人才招聘系统琳琅满目&#xff0c;质量参差不齐&#xff0c;许多企业发现&#xff0c;并非所有系统都能满足他们的需求&#xff0c;特别是智能化的需求。今天&#…...

memcached的基本使用

memcached是一种基于键值对的内存数据库&#xff0c;一般应用于缓存数据&#xff0c;提高数据访问速度&#xff0c;减轻后端数据库压力。 安装 这里以Ubuntu为例&#xff0c;其他系统安装方法请看官方文档。 sudo apt-get update sudo apt-get install memcached启动 memca…...

【Unity3d】C#浮点数丢失精度问题

一、float、double浮点数丢失精度问题 Unity3D研究院之被坑了的浮点数的精度&#xff08;一百零三&#xff09; | 雨松MOMO程序研究院 https://segmentfault.com/a/1190000041768195?sortnewest 浮点数丢失精度问题是由于大部分浮点数在IEEE754规范下就是无法准确以二进制…...

机器学习中回归预测模型中常用四个评价指标MBE、MAE、RMSE、R2解释

在机器学习中&#xff0c;评估模型性能时常用的四个指标包括平均绝对误差&#xff08;Mean Absolute Error, MAE&#xff09;、均方误差&#xff08;Mean Squared Error, MSE&#xff09;、均方根误差&#xff08;Root Mean Squared Error, RMSE&#xff09;和决定系数&#xf…...

2412d,d语言中写汇编

原文 嗨,我只是想共享该要点,它展示了如何在ASM中用D编写你好. D中写汇编非常方便!这是我写的: extern(C) int main() {auto hip "hello D\n".ptr;size_t len 8;//write(1,消息,长度)asm {mov RDX, len;//缓冲长度mov RSI, hip;//消息缓冲mov EDI, 1;//Stdout文描…...

急救复试英语口语第一招:confidence

自信与内容是成功的关键 复试是每个考生面临的一道重要关卡&#xff0c;尤其是对于需要进行英语口语测试的同学而言&#xff0c;如何在有限的时间内展示自己的英语能力和综合素质&#xff0c;成为了一个关键问题。今天我们将从两个方面为大家分享应对复试英语口语的技巧&#…...

深入理解 pytest Fixture 方法及其应用

在 Python 自动化测试领域&#xff0c;pytest 是当之无愧的王者。提到 pytest&#xff0c;不得不说它的一大核心功能——Fixture。Fixture 的强大&#xff0c;让复杂的测试流程变得井井有条&#xff0c;让测试代码更加灵活和可复用。 那么&#xff0c;pytest 的 Fixture 究竟是…...

python实现自动登录12306抢票 -- selenium

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 python实现自动登录12306抢票 -- selenium 前言其实网上也出现了很多12306的代码&#xff0c;但是都不是最新的&#xff0c;我也是从网上找别人的帖子&#xff0c;看B站视频&…...

@RestControllerAdvice注解

RestControllerAdvice 是 Spring 4 引入的一个组合注解&#xff0c;它结合了 ControllerAdvice 和 ResponseBody&#xff0c;专门用于处理 RestController 类型的控制器中的全局异常、全局数据绑定和全局模型属性等问题。在 Spring Boot 中&#xff0c;RestControllerAdvice 通…...

04-微服务02

我们将黑马商城拆分为5个微服务&#xff1a; 用户服务 商品服务 购物车服务 交易服务 支付服务 由于每个微服务都有不同的地址或端口&#xff0c;相信大家在与前端联调的时候发现了一些问题&#xff1a; 请求不同数据时要访问不同的入口&#xff0c;需要维护多个入口地址…...