深度相机进行目标物体的空间姿态(位姿)估计
利用深度相机(如Kinect、Intel Realsense、Zed相机等)进行目标物体的空间姿态(位姿)估计,通常结合了3D点云处理、目标识别和位姿优化算法。以下是完整的实现流程、算法选择及注意事项:
一、实现流程
1. 目标识别与点云提取
-
目标识别:
- 传统方法:基于RGB-D的特征匹配(如RGB图像特征+SIFT、ORB,结合深度信息过滤背景)。
- 深度学习方法:使用3D目标检测模型(如PointRCNN、VoteNet)直接在点云中检测目标物体。
- 模板匹配:将目标的3D点云模板与输入点云进行比对(如ICP预对齐)。
-
点云提取:
- 从深度相机的RGB-D数据中提取目标物体的局部点云(剔除背景和噪声点)。
2. 关键点或模型对齐
-
关键点检测:
- 提取目标物体的3D关键点(如角点、边缘点)或特征区域。
- 对于已知模型,可预先标注目标物体的3D模型关键点坐标。
-
模型对齐:
-
ICP算法(Iterative Closest Point):
- 通过迭代优化,将目标点云与3D模型点云对齐,得到初步的位姿估计。
- 优点:鲁棒性强,适用于已知模型的对齐。
- 缺点:收敛速度较慢,依赖初始位姿估计。
-
PnP算法(基于关键点的位姿估计):
- 如果已知目标物体的3D模型点云,可直接提取3D点云中的关键点(如模型上的特征点),结合深度相机的内参矩阵,直接使用PnP算法(如EPnP、DLS)求解位姿。
- 需要确保3D模型点与2D/3D观测点的对应关系。
-
3. 位姿优化与精化
-
结合深度信息的PnP:
- 深度相机提供的点云直接提供了3D观测点,因此可以跳过传统PnP中由2D像素坐标反推3D投影的步骤。
- 直接使用3D到3D的配准:将目标点云与模型点云对齐,直接优化旋转和平移参数(如通过ICP或Gauss-Newton迭代)。
-
深度学习方法:
- DenseFusion:结合RGB图像和深度图,通过CNN提取特征,再通过PnP优化位姿。
- PointNet++:直接对点云进行特征提取,预测位姿参数(旋转和平移)。
4. 后处理与鲁棒性增强
-
滤波与鲁棒估计:
- 使用RANSAC剔除误匹配点(如异常点云点或深度噪声)。
- Kalman滤波或粒子滤波对连续帧的姿态进行平滑。
-
多传感器融合:
- 结合IMU(惯性测量单元)数据,提升动态场景下的位姿估计鲁棒性。
二、关键算法选择
1. 基于PnP的位姿估计(适合已知3D模型的物体)
-
步骤:
- 提取目标物体的3D点云中的关键点(如SIFT 3D特征点或预定义的模型点)。
- 将这些点与物体3D模型的对应点匹配。
- 使用PnP算法(如EPnP、DLS)求解位姿。
-
代码示例(Open3D + OpenCV):
import numpy as np import open3d as o3d import cv2# 假设已知物体3D模型的关键点(model_points_3d)和对应的点云观测点(observed_points_3d) # 相机内参矩阵(K)和畸变参数(dist_coeffs) camera_matrix = np.array([[fx, 0, cx], [0, fy, cy], [0, 0, 1]], dtype=np.float32) dist_coeffs = np.zeros((4,1)) # 假设无畸变# 调用OpenCV的solvePnP success, rvec, tvec = cv2.solvePnP(objectPoints=model_points_3d,imagePoints=observed_points_3d[:, :2], # 若直接使用3D点,可能需要调整cameraMatrix=camera_matrix,distCoeffs=dist_coeffs,flags=cv2.SOLVEPNP_EPNP # 推荐EPNP算法 )# 将旋转向量转换为旋转矩阵 rotation_matrix, _ = cv2.Rodrigues(rvec)
2. 基于ICP的点云配准(适合未知模型或动态场景)
-
步骤:
- 对齐目标点云与3D模型点云。
- 通过ICP迭代优化变换矩阵(旋转和平移)。
-
Open3D实现示例:
source_cloud = o3d.t.geometry.PointCloud(model_points_3d) target_cloud = o3d.t.geometry.PointCloud(observed_points_3d)# 执行ICP配准 icp = o3d.t.pipelines.registration.icp(source=source_cloud,target=target_cloud,max_correspondence_distance=0.02,transformation=np.identity(4),criteria=... ) final_transformation = icp.transformation # 得到位姿矩阵
3. 深度学习方法(适合复杂场景)
-
DenseFusion:
- 结合RGB图像和深度图的特征,通过CNN提取特征,再通过PnP优化位姿。
- 代码框架:可参考DeMoN。
-
单阶段模型:
- 直接输出位姿参数(如YOLO-POSE、VoteNet),适合实时应用。
三、深度相机的优势与挑战
优势
- 直接提供深度信息:
- 可直接构建3D点云,避免传统RGB图像中因遮挡或纹理不足导致的特征匹配失败的问题。
- 高精度位姿估计:
- 深度数据可直接用于3D配准(如ICP),减少投影误差。
挑战
- 噪声与稀疏性:
- 深度相机的点云可能存在噪声、空洞或低分辨率,需预处理(如滤波、补全)。
- 计算复杂度:
- 大规模点云的ICP或PnP计算量较大,需优化(如下采样、GPU加速)。
四、推荐方案流程
方案1:传统方法(适合已知3D模型的刚性物体)
- 输入:深度相机的RGB-D数据。
- 步骤:
- 分割目标物体:使用RANSAC或深度分割(如语义分割网络)提取目标点云。
- 关键点匹配:提取模型与点云的关键点(如FPFH特征匹配)。
- PnP求解:通过匹配的3D-3D点对,使用EPNP或DLS求解位姿。
- ICP精修:用ICP进一步优化位姿。
方案2:深度学习方法(适合复杂场景)
- 输入:RGB图像 + 深度图。
- 步骤:
- 目标检测与分割:使用2D/3D检测模型(如PointRCNN)定位目标。
- 位姿回归:通过训练好的网络直接输出位姿参数(如Quaternion + Translation)。
- 后处理:使用ICP或PnP进一步优化。
五、工具与库推荐
-
开源工具:
- Open3D:点云处理、ICP、PCL(Point Cloud Library)。
- ROS包:
moveit
、ar_track_alvar
(需结合深度相机驱动)。 - PyTorch3D:深度学习3D几何处理库。
-
算法框架:
- OpenCV的 solvePnP:适合小规模关键点匹配。
- DenseFusion:结合RGB-D的端到端位姿估计。
- YOLACT-3D:实时3D目标检测与位姿估计。
六、关键步骤详解
1. 点云预处理
- 去噪:使用统计离群值移除、双边滤波。
- 坐标系对齐:将点云转换到相机坐标系(需相机内参与外参标定)。
2. 3D-3D匹配
- 特征描述符匹配:
- FPFH(Fast Point Feature Histograms):描述点云局部几何特征。
- FGR(Feature-based Global Registration):快速匹配点云对。
3. 优化与鲁棒性
- 加权最小化:
- 根据点云的置信度(如深度置信度)加权优化。
- 多帧融合:
- 使用滤波器(如UKF、EKF)融合多帧数据,提升鲁棒性。
七、典型应用案例
案例1:工业机器人抓取
- 流程:
- 深度相机获取场景点云。
- 检测目标物体并分割点云。
- 通过ICP或PnP计算物体位姿。
- 控制机械臂根据位姿执行抓取。
案例2:AR中的虚拟物体放置
- 流程:
- 实时获取RGB-D数据。
- 检测目标平面(如桌面)或物体。
- 通过位姿估计确定虚拟物体的放置位置。
八、注意事项
-
标定深度相机:
- 需标定相机内参(深度传感器的内参矩阵)及RGB与深度传感器的外参(如RGB与Depth的相对位姿)。
- 工具:
OpenCV相机标定
、Azure Kinect SDK
。
-
遮挡与遮挡处理:
- 使用RANSAC剔除遮挡点。
- 对于部分可见物体,需使用鲁棒的特征匹配算法。
-
实时性优化:
- 下采样点云(如Voxel Grid滤波)。
- 使用GPU加速ICP或深度学习推理。
九、代码示例:Open3D实现ICP配准
import open3d as o3dsource = o3d.io.read_point_cloud("model.pcd") # 物体3D模型点云
target = o3d.io.read_point_cloud("observed.pcd") # 深度相机采集的点云# 执行ICP
threshold = 0.02 # 对应深度相机的分辨率(如0.02米)
reg_p2p = o3d.pipelines.registration.registration_icp(source, target,threshold,trans_init=np.identity(4),transformation_estimation=o3d.pipelines.registration.TransformationEstimationPointToPoint(),criteria=o3d.pipelines.registration.ICPConvergenceCriteria(max_iteration=20, relative_fitness=1e-6)
)final_transformation = reg_p2p.transformation # 得到的位姿矩阵
十、总结
利用深度相机进行目标位姿估计的流程为:
- 数据采集:获取RGB-D数据。
- 目标识别与分割:定位目标物体的点云区域。
- 位姿估计:通过PnP、ICP或深度学习模型求解位姿。
- 优化与鲁棒性增强:滤波、多帧融合、RANSAC剔除异常点。
推荐优先尝试方案:
- 已知3D模型的刚性物体:EPNP + ICP精修。
- 复杂场景或未知物体:DenseFusion(结合RGB-D的深度学习方法)。
通过结合深度学习与传统几何方法,可以实现高精度、实时的位姿估计,广泛应用于AR、机器人抓取、工业检测等领域。
利用深度相机进行目标物体的空间姿态(位姿)估计,结合了深度信息与几何优化算法,以下是完整的实现流程、关键算法及优化策略:
一、核心流程
1. 数据输入与预处理
-
输入数据:
- 深度相机的 RGB-D数据(彩色图像 + 深度图)。
- 目标物体的 3D模型(如CAD模型的点云或网格)。
-
预处理步骤:
- 点云提取:通过分割算法(如Mask R-CNN)或阈值分割提取目标物体的点云。
- 坐标系对齐:将点云转换到相机坐标系(需标定相机内参与外参)。
2. 位姿估计方法
方法1:基于3D-3D配准的ICP算法
- 步骤:
- 初始位姿猜测:通过2D检测(如YOLO)或粗略匹配得到初始位姿。
- ICP优化:
- 将目标模型点云与观测点云对齐,通过迭代最小化点间距离。
- Open3D实现:
import open3d as o3dsource = o3d.io.read_point_cloud("model.pcd") # 模型点云 target = o3d.io.read_point_cloud("observed.pcd") # 深度相机采集点云# 初始变换矩阵(可选) trans_init = np.identity(4) # 执行ICP reg_p2p = o3d.pipelines.registration.registration_icp(source, target, threshold=0.02, # 阈值根据深度分辨率调整trans_init=trans_init,... # 其他参数 final_transformation = reg_p2p.transformation
方法2:结合深度学习的端到端方法
- 流程:
- 输入RGB-D数据:将深度图和RGB图作为网络输入。
- 网络结构:
- DenseFusion:结合RGB特征(2D CNN)与深度特征(3D CNN),输出位姿。
- PVNet:直接预测关键点,再通过PnP求解位姿。
- 代码示例(DenseFusion):
# 假设已加载网络模型 input_data = np.concatenate([rgb_image, depth_image], axis=2) pose = model.predict(input_data) # 输出位姿(旋转矩阵和平移向量)
方法3:混合方法(传统+深度学习)
- 步骤:
- 使用深度学习模型(如Mask R-CNN)检测目标并获取2D边界框。
- 提取对应区域的深度点云,通过PnP/ICP优化位姿。
二、关键算法与工具
1. ICP(Iterative Closest Point)
- 适用场景:已知目标3D模型,需高精度配准。
- 优势:直接优化3D点云,无需投影到2D。
- 挑战:收敛速度慢,依赖初始位姿。
2. 深度学习模型
-
DenseFusion:
- 输入:RGB图像 + 深度图。
- 输出:6D位姿(旋转和平移)。
- 优势:实时性强,适合多类物体。
-
PVNet:
- 预测物体的 2D关键点,再通过PnP求解位姿。
3. OpenCV与Open3D结合
- 步骤:
- 使用OpenCV的
solvePnP
处理关键点。 - 用Open3D优化点云配准。
- 使用OpenCV的
三、实现细节与优化技巧
1. 深度数据处理
- 深度图到点云转换:
def depth_to_pointcloud(depth_image, intrinsics):# intrinsics为相机内参(fx, fy, cx, cy)h, w = depth_image.shapeu, v = np.meshgrid(np.arange(w), np.arange(h))x = (u - cx) * depth_image / fxy = (v - cy) * depth_image / fyz = depth_imagereturn np.stack([x, y, z], axis=-1)
2. 鲁棒性优化
- 处理深度噪声:
- 使用中值滤波或双边滤波去除深度图噪声。
- 多帧融合:
- 使用卡尔曼滤波(Kalman Filter)或UKF(Unscented Kalman Filter)融合多帧估计结果。
3. 实时性优化
- 下采样点云:使用Voxel Grid滤波减少点云规模。
- 硬件加速:在GPU上运行ICP或深度学习模型。
四、典型工具与框架
-
开源库:
- Open3D:3D点云处理、ICP、PCL(Point Cloud Library)。
- ROS包:
moveit
(机器人路径规划)、ar_track_alvar
(AR标记跟踪)。 - 深度学习框架:
- PyTorch3D:3D几何计算。
- Detectron2:支持3D目标检测扩展。
-
硬件支持:
- Intel RealSense SDK、Azure Kinect SDK:提供API获取校准后的RGB-D数据。
五、典型应用场景
场景 | 推荐方法 | 适用性 |
---|---|---|
工业机器人抓取 | ICP + EPnP | 高精度、刚性物体 |
AR/VR中物体跟踪 | DENSEFUSION | 实时性要求高,多类物体 |
室内SLAM与建图 | ICP + 滑动窗口优化 | 大规模场景、动态环境 |
六、代码示例:从深度图到位姿估计
import numpy as np
import cv2
import open3d as o3d# 1. 读取并转换数据
depth_image = ... # 深度图(单位:米)
color_image = ... # 对应的RGB图像
intrinsics = ... # 相机内参(fx, fy, cx, cy)# 将深度图转换为点云
pcd = depth_to_pointcloud(depth_image, intrinsics)# 2. 目标分割与关键点提取
# 使用Mask R-CNN分割目标区域
mask = mask_rcnn_inference(color_image)
target_pcd = pcd[mask]# 3. 初始位姿估计(如通过2D检测框)
# 假设已知物体3D模型(model_pcd)
# 使用ICP对齐
icp_result = o3d.pipelines.registration.registration_icp(source=model_pcd, target=target_pcd, ...)# 4. 输出最终位姿
final_pose = icp_result.transformation
七、注意事项
-
标定深度相机:
- 需标定深度传感器的内参(fx, fy, cx, cy)及RGB与Depth传感器的外参(相对位姿)。
-
遮挡处理:
- 对于部分可见物体,使用部分匹配ICP或深度学习模型的鲁棒性。
-
实时性优化:
- 使用GPU加速:如在NVIDIA GPU上运行PyTorch模型。
- 点云下采样:将高分辨率点云降采样到1万点以内。
八、总结
- 深度相机的优势:直接提供3D信息,避免传统RGB方法中因遮挡或纹理不足导致的失败。
- 推荐流程:
- 深度学习模型(如DenseFusion)快速定位。
- ICP或EPNP优化位姿。
- 使用RANSAC剔除异常点。
通过结合深度相机的3D数据与先进算法,可实现亚毫米级位姿估计,适用于工业自动化、AR/VR、机器人导航等场景。
相关文章:
深度相机进行目标物体的空间姿态(位姿)估计
利用深度相机(如Kinect、Intel Realsense、Zed相机等)进行目标物体的空间姿态(位姿)估计,通常结合了3D点云处理、目标识别和位姿优化算法。以下是完整的实现流程、算法选择及注意事项: 一、实现流程 1. 目…...
3月8日实验
拓扑: 需求: 1.学校内部的HTTP客户端可以正常通过域名www.baidu.com访问到白度网络中的HTTP服务器 2.学校网络内部网段基于192.168.1.0/24划分,PC1可以正常访问3.3.3.0/24网段,但是PC2不允许 3.学校内部路由使用静态路由&#…...
GO语言学习笔记
一、viper笔记【七米】 https://liwenzhou.com/posts/Go/viper/ 二、优雅关机和平滑重启 https://liwenzhou.com/posts/Go/graceful-shutdown/ 三、gin使用zap https://liwenzhou.com/posts/Go/zap-in-gin/ 四、flag 用于命令行传参 https://liwenzhou.com/posts/Go/flag/ 五、…...
Autosar技术栈总目录
总目录 Autosar架构理解Autosar Mcal配置开发(TC3xx系列 基于EB)Autosar Mcal配置开发(S32K3xx系列 基于EB)Autosar BSW服务开发(基于Davinci CFG &Dev)Makefile编译自动化脚本 持续更新中… Autosar架…...
开发指南107-谷歌内核浏览器滚动条设置
平台上统一制定了滚动条样式(仅限于webkit内核):/* ------美化谷歌浏览器滚动条 开始-----------*/ ::-webkit-scrollbar{width:12px;height:12px;background-color: #E1E1E1;} ::-webkit-scrollbar-button:single-button { background-color:#E1E1E1; display: …...
25年携程校招社招求职能力北森测评材料计算部分:备考要点与误区解析
在求职过程中,能力测评是筛选候选人的重要环节之一。对于携程这样的知名企业,其能力测评中的材料计算部分尤为关键。许多求职者在备考时容易陷入误区,导致在考试中表现不佳。本文将深入解析材料计算部分的实际考察方向,并提供针对…...
Linux系统编程--线程同步
目录 一、前言 二、线程饥饿 三、线程同步 四、条件变量 1、cond 2、条件变量的使用 五、条件变量与互斥锁 一、前言 上篇文章我们讲解了线程互斥的概念,为了防止多个线程同时访问一份临界资源而出问题,我们引入了线程互斥,线程互斥其实…...
李沐《动手学深度学习》——14.9. 用于预训练BERT的数据集——wiki数据集问题以及存在的其他问题
问题1:出现"file is not a zip file" 原因是链接已经失效。 解决方法:打开下面链接自行下载,需要魔法。下载完解压到特定位置。 下载链接:项目首页 - Wikitext-2-v1数据包下载:Wikitext-2-v1 数据包下载本仓库提供了一…...
【英伟达AI论文】多模态大型语言模型的高效长视频理解
摘要:近年来,基于视频的多模态大型语言模型(Video-LLMs)通过将视频处理为图像帧序列,显著提升了视频理解能力。然而,许多现有方法在视觉主干网络中独立处理各帧,缺乏显式的时序建模,…...
深入理解 DOM 元素
深入理解 DOM 元素:构建动态网页的基石 在网页开发的世界里,DOM(Document Object Model,文档对象模型)元素宛如一座桥梁,连接着静态的 HTML 结构与动态的 JavaScript 交互逻辑。它让原本呆板的网页变得鲜活…...
linux如何判断进程对磁盘是随机写入还是顺序写入?
模拟工具&性能测试工具:fio fio参数说明: filename/dev/sdb1:测试文件名称,通常选择需要测试的盘的data目录。 direct1:是否使用directIO,测试过程绕过OS自带的buffer,使测试磁盘的结果更真…...
实现静态网络爬虫(入门篇)
一、了解基本概念以及信息 1.什么是爬虫 爬虫是一段自动抓取互联网信息的程序,可以从一个URL出发,访问它所关联的URL,提取我们所需要的数据。也就是说爬虫是自动访问互联网并提取数据的程序。 它可以将互联网上的数据为我所用,…...
[Web]get请求和post请求
Get get请求的特点是: 1.所有的参数都通过URL进行传递。其中传输的参数的书写的格式为?key1value1&key2value2。具体示例:https://example.com/search?qapple&limit10。访问的时候,先写/xxx,确定本次请求要访问的资源u…...
【落羽的落羽 C++】C++入门基础:引用,内联,nullptr
文章目录 一、引用1. 引用的概念2. 引用的特点3. 引用的使用4. const引用5. 引用和指针 二、inline内联三、nullptr 一、引用 1. 引用的概念 引用是C中的一个较为重要的概念。它是给已存在变量取的“别名”,编译器不会为引用变量开辟内存空间,它和它引…...
RabbitMQ应用问题大全(精心整理版)
前言 其实这部分知识我是整理在语雀上了,这里是直接复制粘贴过来的。不是很好阅读,可以直接点下方链接去语雀看,那个看的会舒服很多。 https://www.yuque.com/g/ngioig/upbg6b/fkarhyo8fpgrtyq8/collaborator/join?tokenGvlO0di8KaIfO8aF&am…...
【人工智能】卷积神经网络的奥秘:深度学习的视觉革命
卷积神经网络(CNN)是深度学习中处理图像、视频等高维数据的主流模型,因其局部特征提取和参数共享特性而效率高且效果优异。本文深入探讨了CNN的理论基础,包括卷积操作、池化层、激活函数和全连接层的数学原理,并通过LaTeX公式推导其前向传播和反向传播过程。接着,我们提供…...
掌握MiniQMT:程序化下单与撤单的高效实现
掌握MiniQMT:程序化下单与撤单的高效实现 🚀量化软件开通 🚀量化实战教程 在量化交易领域,程序化下单与撤单是实现自动化交易策略的关键环节。通过MiniQMT平台,我们可以高效地执行这些操作,从而快速响应…...
【高级篇】大疆Pocket 3加ENC编码器实现无线RTMP转HDMI进导播台
【高级篇】大疆Pocket 3加ENC编码器实现无线RTMP转HDMI进导播台 文章目录 准备工作连接设备RTMP概念ENCSHV2推流地址设置大疆Pocket 3直播设置总结 老铁们好! 很久没写软文了,今天给大家带了一个干货,如上图,大疆Pocket 3加ENC编…...
Nacos学习笔记-占位符读取其他命名空间内容
Nacos当前命名空间下的配置文件需要跨命名空间读取其他配置文件的内容。可以先通过Nacos提供的API接口获取配置文件内容,然后解析数据将其放入环境的PropertySource中。 相关依赖包 <!-- Nacos依赖包 --> <dependency><groupId>com.alibaba.clo…...
每天五分钟深度学习框架PyTorch:使用残差块快速搭建ResNet网络
本文重点 前面我们使用pytorch搭建了残差块,本文我们更进一步,我们使用残差块搭建ResNet网络,当学会如何搭建残差块之后,搭建ResNet就会非常简单了,因为ResNet就是由多个残差块组成的。 残差块 残差块我们前面已经介…...
python操作java文件的一种方法
对于python操作java代码的场景来说,比较多的可能就是涉及加密的场景,尤其涉及到登录的场景,对于输入的账号密码可能会涉及到加密,如果开发告诉我们如何加密,那么,OK,我们可以直接通过代码去实现…...
自然语言处理:最大期望值算法
介绍 大家好,博主又来给大家分享知识了,今天给大家分享的内容是自然语言处理中的最大期望值算法。那么什么是最大期望值算法呢? 最大期望值算法,英文简称为EM算法,它的核心思想非常巧妙。它把求解模型参数的过程分成…...
leetcode-sql数据库面试题冲刺(高频SQL五十题)
题目: 197.上升的温度 表: Weather ---------------------- | Column Name | Type | ---------------------- | id | int | | recordDate | date | | temperature | int | ---------------------- id 是该表具有唯一值的列。 没有具有相同 recordDate …...
开发者社区测试报告(功能测试+性能测试)
功能测试 测试相关用例 开发者社区功能背景 在当今数字化时代,编程已经成为一项核心技能,越来越多的人开始学习编程,以适应快速变化的科技 环境。基于这一需求,我设计开发了一个类似博客的论坛系统,专注于方便程序员…...
环形链表问题的探究与代码实现
在数据结构与算法的学习中,环形链表是一个经典的问题。它不仅考察对链表这种数据结构的理解,还涉及到指针操作和逻辑推理。本文将结合代码和图文,深入分析如何判断链表中是否有环以及如何找到环的入口点。 目录 一、判断链表中是否有环 …...
【C++】vector(下):vector类的模拟实现(含迭代器失效问题)
文章目录 前言一、vector类的常用接口的模拟实现1.头文件(my vector.h)整体框架2.模拟实现vector类对象的常见构造3.模拟实现vector iterator4.模拟实现vector类对象的容量操作5.模拟实现vector类对象的访问6.模拟实现vector类对象的修改操作 二、vector…...
NLTK和jieba
NLTK与jieba概述 自然语言处理(NLP)领域是计算机科学领域与人工智能领域中的一个重要方向,主要研究方向是实现人与计算机之间用自然语言进行有效通信的各种理论和方法。 在自然语言处理领域中,文本类型的数据占据着很大的市场&a…...
Java后端高频面经——计算机网络
TCP/IP四层模型?输入一个网址后发生了什么,以百度为例?(美团) (1)四层模型 应用层:支持 HTTP、SMTP 等最终用户进程传输层:处理主机到主机的通信(TCP、UDP&am…...
CSDN博客:Markdown编辑语法教程总结教程(中)
❤个人主页:折枝寄北的博客 Markdown编辑语法教程总结 前言1. 列表1.1 无序列表1.2 有序列表1.3 待办事项列表1.4 自定义列表 2. 图片2.1 直接插入图片2.2 插入带尺寸的图片2.3 插入宽度确定,高度等比例的图片2.4 插入高度确定宽度等比例的图片2.5 插入居…...
Springboot redis bitMap实现用户签到以及统计,保姆级教程
项目架构,这是作为demo展示使用: Redis config: package com.zy.config;import com.fasterxml.jackson.annotation.JsonAutoDetect; import com.fasterxml.jackson.annotation.PropertyAccessor; import com.fasterxml.jackson.databind.Ob…...
AI Agent系列(一) - Agent概述
AI Agent系列【一】 前言一、AI代理的特点二、 AI Agent的技术框架三、 开源自主代理 前言 AI Agent,即人工智能代理,一般直接叫做智能体 百度百科给AI Agent定义为: “以大语言模型为大脑驱动的系统,具备自主理解、感知、规划、…...
Scala 中trait的线性化规则(Linearization Rule)和 super 的调用行为
在 Scala 中,特质(Trait)是一种强大的工具,用于实现代码的复用和组合。当一个类混入(with)多个特质时,可能会出现方法冲突的情况。为了解决这种冲突,Scala 引入了最右优先原则&#…...
【Linux系统编程】初识系统编程
目录 一、什么是系统编程1. 系统编程的定义2. 系统编程的特点3. 系统编程的应用领域4. 系统编程的核心概念5. 系统编程的工具和技术 二、操作系统四大基本功能1. 进程管理(Process Management)2. 内存管理(Memory Management)3. 文…...
Unsloth - 动态 4 bit 量化
文章目录 💔 量化可能会破坏模型🦙 Llama 3.2 Vision 细节Pixtral (12B) 视觉🦙 Llama 3.2 (90B) 视觉指令 本文翻译自:Unsloth - Dynamic 4-bit Quantization (2024年12月4日 Daniel & Michael https://unsloth.…...
技术领域,有许多优秀的博客和网站
在技术领域,有许多优秀的博客和网站为开发者、工程师和技术爱好者提供了丰富的学习资源和行业动态。以下是一些常用的技术博客和网站,涵盖了编程、软件开发、数据科学、人工智能、网络安全等多个领域: 1. 综合技术博客 1.1 Medium 网址: ht…...
黑金风格人像静物户外旅拍Lr调色教程,手机滤镜PS+Lightroom预设下载!
调色教程 针对人像、静物以及户外旅拍照片,运用 Lightroom 软件进行风格化调色工作。旨在通过软件中的多种工具,如基本参数调整、HSL(色相、饱和度、明亮度)调整、曲线工具等改变照片原本的色彩、明度、对比度等属性,将…...
Manus 与鸿蒙 Next 深度融合:构建下一代空间计算生态
前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。 https://www.captainbed.cn/north 文章目录 一、技术融合背景与意义1.1 技术栈协同优势1.2 典型应用场景 二、系统架构设计2.1 整体架构图…...
并查集模板
注意理解路径压缩 static class UnionFind {int[] fa;public UnionFind(int n) {fa new int[n];for (int i 0; i < n; i) {fa[i] i;}}public int find(int i) {if (fa[i] ! i) {fa[i] find(fa[i]);}return fa[i];}public void union(int i, int j) {int fai find(i);in…...
推流项目的ffmpeg配置和流程重点总结一下
ffmpeg的初始化配置,在合成工作都是根据这个ffmpeg的配置来做的,是和成ts流还是flv,是推动远端还是保存到本地, FFmpeg 的核心数据结构,负责协调编码、封装和写入操作。它相当于推流的“总指挥”。 先来看一下ffmpeg的…...
使用 Python 开发的简单招聘信息采集系统
以下是一个使用 Python 开发的简单招聘信息采集系统,它包含用户登录、招聘信息收集和前后端交互的基本功能。我们将使用 Flask 作为后端框架,HTML 作为前端页面。 项目结构 recruitment_system/ ├── app.py ├── templates/ │ ├── login.html │ ├── index…...
Selenium库打开指定端口(9222、9333等)浏览器【已解决!!!】
就是在写动态爬虫爬取数据的过程中,如果用selenium的话,有一个缺点,就是当我们去测试一个网站能不能爬取,它都会重新换端口打开一个浏览器,不会使用上一次使用的浏览器,在实际使用过程中这样调试很烦&#…...
Android MVI架构模式详解
MVI概念 MVI(Model-View-Intent)是一种Android应用架构模式,旨在通过单向数据流和不可变性来简化应用的状态管理。MVI的核心思想是将用户操作、状态更新和界面渲染分离,确保应用的状态可预测且易于调试。 MVI的核心组件 Model&a…...
低代码开发直聘管理系统
低代码 DeepSeek 组合的方式开发直聘管理系统,兼职是开挂的存在。整个管理后台系统 小程序端接口的输出,只花了两个星期不到。 一、技术栈 后端:SpringBoot mybatis MySQL Redis 前端:Vue elementui 二、整体效果 三、表结…...
LVGL开发说明
准备工作 LVGL图形化工具:Gui-Guider-Setup-1.8.0-GA.exeLVGL库:lvgl-release-v8.3屏幕触摸驱动:CST816屏幕驱动:ST7789屏幕尺寸:320 * 170 触发事件 按键的点击事件 添加点击事件 触摸屏点击对应的按键后就会触发回…...
推荐优秀的开源软件合集
在信息化高度发达的今天,数据安全与远程协作变得越来越重要。很多企业和个人都在寻找可替代商业闭源软件的开源解决方案。今天,我们向大家推荐几款优秀的开源软件,涵盖私有云存储、远程桌面、团队协作、内容管理等多个领域。 1. Nextcloud —…...
代码随想录刷题day41|(二叉树篇)二叉树的最大深度(递归)
目录 一、二叉树理论基础 二、二叉树的深度和高度 三、递归和迭代思路 3.1 递归法 3.2 迭代法 四、相关算法题目 五、总结 一、二叉树理论基础 详见:代码随想录刷题day34|(二叉树篇)二叉树的递归遍历-CSDN博客 二、二叉树的深度和高…...
向量内积(点乘)和外积(叉乘)
文章目录 1. 向量的内积(点积)1.1 定义1.2 几何意义表征两个向量的投影关系计算向量夹角的余弦值 1.3 重要性质1.4 应用场景 2. 向量的外积(叉积)2.1 定义(仅适用于三维空间)2.2 几何意义2.3 重要性质2.4 应…...
PDF转JPG(并去除多余的白边)
首先,手动下载一个软件(poppler for Windows),下载地址:https://github.com/oschwartz10612/poppler-windows/releases/tag/v24.08.0-0 否则会出现以下错误: PDFInfoNotInstalledError: Unable to get pag…...
【无人机路径规划】基于麻雀搜索算法(SSA)的无人机路径规划(Matlab)
效果一览 代码获取私信博主基于麻雀搜索算法(SSA)的无人机路径规划(Matlab) 一、算法背景与核心思想 麻雀搜索算法(Sparrow Search Algorithm, SSA)是一种受麻雀群体觅食行为启发的元启发式算法࿰…...
2020CVPR-SiamBAN:用于视觉跟踪的Siamese框自适应网络
原文标题:Siamese Box Adaptive Network for Visual Tracking 中文标题:用于视觉跟踪的Siamese框自适应网络 代码地址: GitHub - hqucv/siamban: Siamese Box Adaptive Network for Visual Tracking Abstract 大多数现有的跟踪器通常依靠多尺…...