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

【机器人】复现 3D-Mem 具身探索和推理 | 3D场景记忆 CVPR 2025

3D-Mem 是用于具体探索推理3D场景记忆,来自CVPR 2025.

使用信息丰富的多视角图像,来表示场景并捕捉已探索区域的丰富视觉信息,

整合了基于前沿的探索,使智能体能够通过考虑已知和潜在的新信息,做出明智的决策。

本文分享3D-Mem复现和模型推理的过程~

下面是一个运行示例结果:

看一下占用地图的航向

下面是真实环境下,官方跑的demo,3D-Mem无需训练的设计,可以无缝适应真实的机器人,从而实现在现实世界中的部署

项目地址:https://umass-embodied-agi.github.io/3D-Mem/

 1、创建Conda环境

首先创建一个Conda环境,名字为3dmem,python版本为3.9

进入3dmem环境

conda create -n 3dmem python=3.9 -y
conda activate 3dmem

然后下载代码,进入代码工程:https://github.com/UMass-Embodied-AGI/3D-Mem

git clone https://github.com/UMass-Embodied-AGI/3D-Mem.git
cd 3D-Mem

2、安装habitat模拟器

我需要安装habitat-sim==0.2.5、headless 和 faiss-cpu

conda install -c conda-forge -c aihabitat habitat-sim=0.2.5 headless faiss-cpu=1.7.4 -y

等待安装完成~

3、安装 torch 和 pytorch3d

执行下面命令,进行安装torch:

pip install torch==2.0.1 torchvision==0.15.2 --index-url https://download.pytorch.org/whl/cu118

再安装pytorch3d:

conda install https://anaconda.org/pytorch3d/pytorch3d/0.7.4/download/linux-64/pytorch3d-0.7.4-py39_cu118_pyt201.tar.bz2 -y

4、安装依赖库

执行下面命令进行安装:

pip install omegaconf==2.3.0 open-clip-torch==2.26.1 ultralytics==8.2.31 supervision==0.21.0 opencv-python-headless==4.10.* \scikit-learn==1.4 scikit-image==0.22 open3d==0.18.0 hipart==1.0.4 openai==1.35.3 httpx==0.27.2

等待安装完成~

5、安装clip

执行下面命令进行安装:

pip install git+https://github.com/openai/CLIP.git

打印信息

Looking in indexes: https://mirrors.tuna.tsinghua.edu.cn/pypi/web/simple
Collecting git+https://github.com/openai/CLIP.gitCloning https://github.com/openai/CLIP.git to /tmp/pip-req-build-imrsh3kfRunning command git clone --filter=blob:none --quiet https://github.com/openai/CLIP.git /tmp/pip-req-build-imrsh3kfResolved https://github.com/openai/CLIP.git to commit dcba3cb2e2827b402d2701e7e1c7d9fed8a20ef1Preparing metadata (setup.py) ... done
.....
Successfully built clip
Installing collected packages: clip
Successfully installed clip-1.0

clip的主要思路流程:

6、修改Hugging Face 镜像源

代码会自动从Hugging Face下载模型权重,需要先配置为国内的镜像源

 编辑用户配置文件 ~/.bashrc,设置为 export HF_ENDPOINT=https://hf-mirror.com

执行下面命令:

echo 'export HF_ENDPOINT=https://hf-mirror.com' >> ~/.bashrc
source ~/.bashrc  # 立即生效

验证环境变量​​,是否修改成功:

echo $HF_ENDPOINT

正常会输出:https://hf-mirror.com,说明设置成功啦~

7、准备HM3D数据集

我们需要下载 hm3d_v0.2

下载地址:GitHub - matterport/habitat-matterport-3dresearch

选择的下载文件:hm3d-val-habitat-v0.2.tar

然后放到data目录下:

8、准备gpt-4o的Api

推荐使用国内的供应商,比较稳定:https://ai.nengyongai.cn/register?aff=RQt3

首先“添加令牌”,设置额度(比如5块钱),点击查看就能看到Key啦

 然后填写到 src/const.py中

# about habitat scene
INVALID_SCENE_ID = []# about chatgpt api
END_POINT = "https://ai.nengyongai.cn/v1"
OPENAI_KEY = "xxxxxxxxxxxxxxxxxxxxx"

点击模型列表,能查看支持的模型:

看一下使用情况:


 

9、运行模型推理

查看配置文件 cfg/eval_aeqa.yaml

# 通用设置
seed: 77  # 随机种子
exp_name: "exp_eval_aeqa"  # 实验名称
output_parent_dir: "results"  # 输出文件夹的父目录
scene_dataset_config_path: "data/hm3d_annotated_basis.scene_dataset_config.json"  # 场景数据集配置文件路径
scene_data_path: "data/hm3d_v0.2/"  # 场景数据路径
questions_list_path: 'data/aeqa_questions-41.json'  # 问题列表文件路径concept_graph_config_path: "cfg/concept_graph_default.yaml"  # 概念图配置文件路径# 主要设置
choose_every_step: true  # 是否在每一步都查询视觉语言模型(VLM),还是仅在到达导航目标后查询
egocentric_views: true  # 是否在提示视觉语言模型时添加自我中心视角
prefiltering: true  # 是否使用预筛选(实际上不能关闭,否则会超出上下文长度限制)
top_k_categories: 10  # 在预筛选过程中保留与目标最相关的前 k 个类别# 关于检测模型
yolo_model_name: yolov8x-world.pt  # YOLO 模型名称
sam_model_name: sam_l.pt  # SAM 模型名称
class_set: scannet200  # 使用 200 类别的数据集用于 YOLO-world 检测器# 关于快照聚类
min_detection: 1  # 最小检测数量# 相机和图像设置
camera_height: 1.5  # 相机高度(单位:米)
camera_tilt_deg: -30  # 相机倾斜角度(单位:度)
img_width: 1280  # 图像宽度(单位:像素)
img_height: 1280  # 图像高度(单位:像素)
hfov: 120  # 水平视场角(单位:度)# 是否保存可视化结果(这会比较慢)
save_visualization: true# 用于提示 GPT-4O 的图像大小
prompt_h: 360  # 提示图像高度(单位:像素)
prompt_w: 360  # 提示图像宽度(单位:像素)# 导航设置
num_step: 50  # 最大导航步数
init_clearance: 0.3  # 初始避碰距离(单位:米)
extra_view_phase_1: 2  # 第一阶段额外视角的数量
extra_view_angle_deg_phase_1: 60  # 第一阶段每个额外视角之间的角度(单位:度)
extra_view_phase_2: 6  # 第二阶段额外视角的数量
extra_view_angle_deg_phase_2: 40  # 第二阶段每个额外视角之间的角度(单位:度)# 关于 TSDF、深度图和边界更新
explored_depth: 1.7  # 已探索深度(单位:米)
tsdf_grid_size: 0.1  # TSDF 网格大小(单位:米)
margin_w_ratio: 0.25  # 宽度方向的边界比例
margin_h_ratio: 0.6  # 高度方向的边界比例
planner:  # 规划器设置eps: 1  # 规划器的精度max_dist_from_cur_phase_1: 1  # 第一阶段未找到目标时,探索边界的步长(单位:米)max_dist_from_cur_phase_2: 1  # 第二阶段找到目标后,接近目标的步长(单位:米)final_observe_distance: 0.75  # 第二阶段找到一个距离目标对象此距离的地方进行观察(单位:米)surrounding_explored_radius: 0.7  # 周围已探索区域的半径(单位:米)# 关于边界选择frontier_edge_area_min: 4  # 边界边缘最小面积frontier_edge_area_max: 6  # 边界边缘最大面积frontier_area_min: 8  # 边界最小面积frontier_area_max: 9  # 边界最大面积min_frontier_area: 20  # 边界至少需要的像素数量max_frontier_angle_range_deg: 150  # 边界中像素所张角度的最大值(单位:度)region_equal_threshold: 0.95  # 区域相等的阈值# 关于场景图构建
scene_graph:confidence: 0.003  # 置信度阈值nms_threshold: 0.1  # 非极大值抑制阈值iou_threshold: 0.5  # 交并比阈值obj_include_dist: 3.5  # 包含目标对象的距离(单位:米)target_obj_iou_threshold: 0.6  # 目标对象的交并比阈值

运行下面代码,生成 A-EQA 数据集的预测结果

python run_aeqa_evaluation.py -cf cfg/eval_aeqa.yaml

运行程序后,会联网下载一些模型权重,

包括:yolov8x-world.pt、sam_l.pt、open_clip_pytorch_model.bin、ViT-B-32.pt等

下面是运行信息:

00:00:00 - ***** Running exp_eval_aeqa *****
00:00:00 - Total number of questions: 41
00:00:00 - number of questions after splitting: 41
00:00:00 - question path: data/aeqa_questions-41.json
Downloading https://github.com/ultralytics/assets/releases/download/v8.2.0/yolov8x-world.pt to 'yolov8x-world.pt'...
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 141M/141M [04:04<00:00, 605kB/s]
00:04:09 - Load YOLO model yolov8x-world.pt successful!
Downloading https://github.com/ultralytics/assets/releases/download/v8.2.0/sam_l.pt to 'sam_l.pt'...
100%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 1.16G/1.16G [11:56<00:00, 1.74MB/s]
00:16:12 - Load SAM model sam_l.pt successful!
00:16:12 - Loaded ViT-B-32 model config.
open_clip_pytorch_model.bin:  70%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▎                                                  | 440M/626M [03:17<01:11, 2.58MB/s]....

当下载和加载成功后,会显示:

00:00:00 - ***** Running exp_eval_aeqa *****
00:00:00 - Total number of questions: 41
00:00:00 - number of questions after splitting: 41
00:00:00 - question path: data/aeqa_questions-41.json
00:00:00 - Load YOLO model yolov8x-world.pt successful!
00:00:02 - Load SAM model sam_l.pt successful!
00:00:02 - Loaded ViT-B-32 model config.
00:00:04 - Loading pretrained ViT-B-32 weights (laion2b_s34b_b79k).
00:00:05 - Load CLIP model successful!
00:00:05 - Question 00c2be2a-1377-4fae-a889-30936b7890c3 already processed
00:00:05 - Question 013bb857-f47d-4b50-add4-023cc4ff414c already processed
00:00:05 - 
========
Index: 2 Scene: 00848-ziup5kvtCCR
00:00:05 - semantic_texture_path: data/hm3d_v0.2/val/00848-ziup5kvtCCR/ziup5kvtCCR.semantic.glb or scene_semantic_annotation_path: data/hm3d_v0.2/val/00848-ziup5kvtCCR/ziup5kvtCCR.semantic.txt does not exist
00:00:06 - Loaded 192 classes from scannet 200: data/scannet200_classes.txt!!!
00:00:06 - Load scene 00848-ziup5kvtCCR successfully without semantic texture
00:00:10 - Question id 01fcc568-f51e-4e12-b976-5dc8d554135a initialization successful!
00:00:10 - 
== step: 0
00:00:11 - Done! Execution time of detections_to_obj_pcd_and_bbox function: 0.12 seconds
00:00:13 - Done! Execution time of detections_to_obj_pcd_and_bbox function: 0.09 seconds
00:00:15 - Done! Execution time of detections_to_obj_pcd_and_bbox function: 0.08 seconds
00:00:16 - Done! Execution time of detections_to_obj_pcd_and_bbox function: 0.05 seconds
00:00:17 - Done! Execution time of detections_to_obj_pcd_and_bbox function: 0.04 seconds
00:00:18 - Done! Execution time of detections_to_obj_pcd_and_bbox function: 0.05 seconds
00:00:19 - Done! Execution time of detections_to_obj_pcd_and_bbox function: 0.07 seconds
00:00:20 - Step 0, update snapshots, 25 objects, 6 snapshots
00:00:23 - HTTP Request: POST https://ai.nengyongai.cn/v1/chat/completions "HTTP/1.1 200 OK"
00:00:23 - Prefiltering selected classes: ['sofa chair', 'couch', 'pillow', 'coffee table', 'cabinet']
00:00:23 - Prefiltering snapshot: 6 -> 3
00:00:23 - Input prompt:
00:00:23 - Task: You are an agent in an indoor scene tasked with answering questions by observing the surroundings and exploring the environment. To answer the question, you are required to choose either a Snapshot as the answer or a Frontier to further explore.
Definitions:
Snapshot: A focused observation of several objects. Choosing a Snapshot means that this snapshot image contains enough information for you to answer the question. If you choose a Snapshot, you need to directly give an answer to the question. If you don't have enough information to give an answer, then don't choose a Snapshot.
Frontier: An observation of an unexplored region that could potentially lead to new information for answering the question. Selecting a frontier means that you will further explore that direction. If you choose a Frontier, you need to explain why you would like to choose that direction to explore.
Question: Where is the teddy bear?
Select the Frontier/Snapshot that would help find the answer of the question.
The following is the egocentric view of the agent in forward direction: [iVBORw0KGg...]
The followings are all the snapshots that you can choose (followed with contained object classes)
Please note that the contained classes may not be accurate (wrong classes/missing classes) due to the limitation of the object detection model. So you still need to utilize the images to make decisions.
Snapshot 0 [iVBORw0KGg...]coffee table, couch, pillow
Snapshot 1 [iVBORw0KGg...]coffee table, pillow, sofa chair
Snapshot 2 [iVBORw0KGg...]cabinet, couch
The followings are all the Frontiers that you can explore: 
Frontier 0 [iVBORw0KGg...]
Frontier 1 [iVBORw0KGg...]
Please provide your answer in the following format: 'Snapshot i
[Answer]' or 'Frontier i
[Reason]', where i is the index of the snapshot or frontier you choose. For example, if you choose the first snapshot, you can return 'Snapshot 0
The fruit bowl is on the kitchen counter.'. If you choose the second frontier, you can return 'Frontier 1
I see a door that may lead to the living room.'.
Note that if you choose a snapshot to answer the question, (1) you should give a direct answer that can be understood by others. Don't mention words like 'snapshot', 'on the left of the image', etc; (2) you can also utilize other snapshots, frontiers and egocentric views to gather more information, but you should always choose one most relevant snapshot to answer the question.00:00:32 - HTTP Request: POST https://ai.nengyongai.cn/v1/chat/completions "HTTP/1.1 200 OK"
00:00:32 - Response: [frontier 0]
Reason: [I would like to explore the hallway further as it may lead to other rooms where the teddy bear might be located.]
00:00:32 - Prediction: frontier, 0
00:00:32 - Next choice: Frontier at [79 33]
UserWarning: *c* argument looks like a single numeric RGB or RGBA sequence, which should be avoided as value-mapping will have precedence in case its length matches with *x* & *y*.  Please use the *color* keyword-argument or provide a 2D array with a single row if you intend to specify the same RGB or RGBA value for all points.
00:00:33 - Current position: [    0.11692    0.021223      6.1057], 1.005
00:00:34 - 
== step: 1

可视化的结果保存在:results/exp_eval_aeqa 中

看一下占用地图,规划航向(1)

规划航向(2)

规划航向(3)

模型推理示例2

对应的配置文件是:cfg/eval_goatbench.yaml

运行代码,生成 GOAT-Bench 数据集的预测结果:

python run_goatbench_evaluation.py -cf cfg/eval_goatbench.yaml

GOAT-Bench 为每个场景提供了 10 个探索情节,并且由于时间和资源的限制,默认只测试第一情节。 

我们还可以通过设置来指定要评估每个场景的情节 --split

分享完成~

 相关文章推荐:

UniGoal 具身导航 | 通用零样本目标导航 CVPR 2025-CSDN博客

【机器人】复现 UniGoal 具身导航 | 通用零样本目标导航 CVPR 2025-CSDN博客

【机器人】复现 ECoT 具身思维链推理-CSDN博客

【机器人】复现 SG-Nav 具身导航 | 零样本对象导航的 在线3D场景图提示-CSDN博客

【机器人】复现 WMNav 具身导航 | 将VLM集成到世界模型中-CSDN博客

相关文章:

【机器人】复现 3D-Mem 具身探索和推理 | 3D场景记忆 CVPR 2025

3D-Mem 是用于具体探索和推理的3D场景记忆&#xff0c;来自CVPR 2025. 使用信息丰富的多视角图像&#xff0c;来表示场景并捕捉已探索区域的丰富视觉信息&#xff0c; 整合了基于前沿的探索&#xff0c;使智能体能够通过考虑已知和潜在的新信息&#xff0c;做出明智的决策。 …...

视觉-语言导航:综述与类别

22年4月来自国防科大的论文“Vision-Language Navigation: A Survey and Taxonomy”。 视觉-语言导航 (VLN) 任务要求智体遵循人类语言指令&#xff0c;在未曾见过的环境中导航。这个充满挑战的领域涉及自然语言处理、计算机视觉、机器人技术等领域&#xff0c;并催生了众多专…...

基于SpringBoot的家政预约系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏&#xff1a;…...

什么是子网委派?

Azure 子网委派的概念 子网委托使您能够为所选的 Azure PaaS 服务指定一个特定的子网,并将其注入到您的虚拟网络中。子网委托为客户提供了完全的控制权,可以管理 Azure 服务与其虚拟网络的集成。 当您将子网委托给 Azure 服务时,您允许该服务为该子网建立一些基本的网络配…...

5个yyds的.Net商城开源项目

今天一起来盘点下5个商城开源项目。 1、支持多语言、多商店的商城&#xff0c;.Net7 EF7领域驱动设计架构&#xff08;Smartstore&#xff09; 项目简介 Smartstore 支持桌面和移动平台、多语言、多商店、多货币的商城&#xff0c;并支持SEO优化&#xff0c;支持无限数量的…...

如何快速隔离被攻击的服务器以防止横向渗透

网络延迟过高会显著影响用户体验和服务性能&#xff0c;以下是系统化的排查思路和解决方案&#xff1a; --- ### **1. 快速定位问题范围** #### **基础检查** - **测试延迟目标**&#xff1a; bash ping <目标IP或域名> # 检查基础延迟&#xff08;ICMP…...

【解决】自己的域名任何端口都访问不到,公网地址正常访问,服务器报错500。

一、问题描述 后端项目部署在服务器上&#xff0c;通过域名访问接口服务器报错500&#xff0c;通过浏览器访问殒命的任何端口都是无法访问此网站。 但是通过公网地址访问是可以正常访问到的&#xff0c;感觉是域名出现了问题 二、解决过程 先说结论&#xff1a;问题原因是…...

Kubernetes MCP服务器(K8s MCP):如何使用?

#作者&#xff1a;曹付江 文章目录 1、什么是 Kubernetes MCP 服务器&#xff1f;1.1、K8s MCP 服务器 2、开始前的准备工作2.1. Kubernetes集群2.2. 安装并运行 kubectl2.3. Node.js 和 Bun2.4. &#xff08;可选&#xff09;Helm v3 3、如何设置 K8s MCP 服务器3.1. 克隆存储…...

RHCE 练习三:架设一台 NFS 服务器

一、题目要求 1、开放 /nfs/shared 目录&#xff0c;供所有用户查询资料 2、开放 /nfs/upload 目录&#xff0c;为 192.168.xxx.0/24 网段主机可以上传目录&#xff0c;并将所有用户及所属的组映射为 nfs-upload,其 UID 和 GID 均为 210 3.将 /home/tom 目录仅共享给 192.16…...

SpringBoot(二)--- SpringBoot基础(http协议、分层解耦)

目录 前言 一、SpringBoot入门 1.入门程序 2.解析 二、HTTP协议 1.HTTP概述 2.HTTP请求协议 2.1 GET方式的请求协议 2.2 POST方式的请求协议 2.3 两者的区别 2.4 获取请求数据 3.HTTP响应协议 三、分层解耦 1.三层架构 2.IOC&DI 2.1 入门 2.2 IOC详解 2.…...

mongodb部署Shard Cluster

一、创建集群认证文件 mkdir ./data ./confopenssl rand -base64 756 > ./conf/keyfilechmod 400 ./conf/keyfiledocker network create mongo-cluster二、部署configsever副本集 #!/bin/bash inamemongodb:8.0.9 conf_namemongo_conf_ replset_nameconfrsecho "…...

【大数据】MapReduce 编程--索引倒排--根据“内容 ➜ 出现在哪些文件里(某个单词出现在了哪些文件中,以及在每个文件中出现了多少次)

将 Hadoop 所需的 JAR 文件添加到项目中&#xff0c;确保可以使用 Hadoop 的 API JAR (Java Archive) 文件是一种用于打包多个 Java 类文件、资源文件&#xff08;如图片、配置文件等&#xff09;以及元数据的压缩文件格式。它类似于 ZIP 文件&#xff0c;但 JAR 文件通常用于 …...

使用PHP对接东南亚、日本、印度和印度尼西亚股票数据源

本文将介绍如何通过StockTV提供的API接口&#xff0c;使用PHP语言来获取并处理东南亚&#xff08;包括马来西亚、新加坡等&#xff09;、日本、印度以及印度尼西亚的股票市场数据。我们将以获取市场列表、查询公司信息、查看涨跌排行榜为例&#xff0c;展示具体的操作流程。 准…...

从基础到高级:网站反爬技术全景解析与第三方工具对比

网站反爬与用户行为检测实战指南:从基础防护到智能识别 在当今数据驱动的互联网时代,网站面临着日益复杂的爬虫攻击和恶意行为威胁。本文将系统性地介绍网站反爬与用户行为检测的技术体系,包括基本原理、防护策略、第三方组件选型以及真实案例分析,帮助开发者构建更加安全…...

docker安装Prometheus+Grafana

docker 安装Prometheus 下载镜像 很多镜像服务器都不行了&#xff0c;我用的这个地址还可以 查看可用docker镜像地址&#xff1a;https://cloud.tencent.com/developer/article/2485043 docker pull docker.xuanyuan.me/prom/prometheus:latest启动 docker run -itd --name…...

解决 Linux Bash 脚本因换行符问题导致的 “bash^M: No such file or directory“ 错误

一、问题重现 最近在部署一个 Bash 脚本时遇到一个诡异的问题&#xff1a; bash $ chmod x deploy.sh $ ./deploy.sh /usr/bin/env: ‘bash\r’: No such file or directory 明明脚本内容正确&#xff0c;权限也设置好了&#xff0c;为什么会出现这样的错误&#xff1f; 二…...

DS1302实时时钟模块

目录 0.单片机定时器时钟的几个缺点&#xff1a; 1.DS1302介绍 2.引脚定义和应用电路 3.原理图 4.内部结果框图&#xff0c;RAM&#xff08;寄存器&#xff09; 5.寄存器定义 6.时序定义 7.DS1302时钟代码 第一步&#xff1a; 第二步&#xff1a; 第三步&#xff1a…...

redis的List为什么用ziplist和quicklist

redis的List为什么用ziplist和quicklist 压缩列表&#xff08;ziplist&#xff09; 是一种节省内存的数据结构&#xff0c;最早是 Redis 中为了减少内存开销而引入的一种顺序存储结构。它不是标准库里的内容&#xff0c;而是某些底层系统&#xff08;比如 Redis&#xff09;在…...

Java 后端基础 Maven

Maven 1.什么是Maven 2.Maven的作用 Maven核心 Maven概述 IDEA集成Maven 1.创建Maven项目 点击设置里的 Project Structure 将jdk和编译语言进行设置 随后点击apply点击ok 2.Maven坐标 3.导入Maven项目 将文件夹复制到当前项目的目录下 在这个目录下&#xff0c;在磁盘中…...

开源情报的发展前景与行业运用

开源情报系统在实际中的应用正随着技术进步和社会需求的增长而不断拓展&#xff0c;其在国家安全、军事、经济、公共卫生等多个领域展现出显著价值。以下是结合最新动态与案例的综合分析&#xff1a; 一、国家安全&#xff1a;从传统到现代的情报体系升级 开源情报在国家安全…...

《黑马前端ajax+node.js+webpack+git教程》(笔记)——node.js教程+webpack教程(nodejs教程)

黑马程序员前端AJAX入门到实战全套教程&#xff0c;包含学前端框架必会的&#xff08;ajaxnode.jswebpackgit&#xff09;&#xff0c;一套全覆盖 文章目录 Node.js与Webpack-01.Node.js入门定义和作用什么是前端工程化&#xff1f;&#xff08;离不开node.js&#xff09;Node.…...

Canvas设计图片编辑器全讲解(一)Canvas基础(万字图文讲解)

一、前序 近两年AI发展太过迅速&#xff0c;各类AI产品层出不穷&#xff0c;AI绘图/AI工作流/AI视频等平台的蓬勃发展&#xff0c;促使图片/视频等复杂内容的创作更加简单&#xff0c;让更多普通人有了图片和视频创作的机会。另一方面用户内容消费也逐渐向图片和视频倾斜。在“…...

disryptor和rabbitmq

disryptor和rabbitmq Disruptor 是什么&#xff1f; Disruptor 是一个由 LMAX Exchange 开发的高性能、低延迟的进程内&#xff08;in-process&#xff09;并发编程框架/库。它最初是为了解决金融交易系统中高吞吐量、低延迟消息传递的需求而设计的。 核心特点和设计理念&am…...

java基础-关键字:static、单例模式

1.例如&#xff1a;我们创造一个人的类&#xff0c;我们希望他是中国人类&#xff0c;所以我们希望所有对象都共有中国人的属性&#xff1b; import org.w3c.dom.ls.LSOutput;import java.sql.Connection; import java.sql.SQLOutput; import java.util.Arrays;public class Ma…...

深入解析PyTorch中MultiheadAttention的参数key_padding_mask与attn_mask

1. 基本背景 在multiheadattention中存在两个mask&#xff0c;一个参数是key_padding_mask&#xff0c;另外一个是attn_mask&#xff0c;尽管这两个参数是被人们所熟知的填充掩码和注意力掩码&#xff0c;但是深度理解以便清晰区分对于深刻理解该架构非常重要。 2. 参数Key_p…...

【Hadoop】--HA高可用搭建--3.2.2

修改环境配置文件 hadoop-env.sh # 在文件末尾添加以下内容&#xff1a; # java_home记得修改 export JAVA_HOME/usr/java/jdk1.8.0xxxx export HDFS_NAMENODE_USERroot export HDFS_DATANODE_USERroot export HDFS_ZKFC_USERroot export HDFS_JOURNALNODE_USERroot export YA…...

OpenCv(7.0)——银行卡号识别

文章目录 前言1.1 模板处理模块读取模板图像并预处理轮廓检测与处理构建数字模板库 1.2 银行卡图像预处理图像尺寸标准化形态学操作二值化与闭操作 1.3 卡号区域定位轮廓筛选逻辑 1.4 数字识别与结果展示完整代码展示总结 前言 本代码实现基于传统图像处理技术&#xff0c;通过…...

新手怎么样制作网站?

如果你是没有任何的建站基础&#xff0c;又没有任何的网站管理经验&#xff0c;那么应该如何开展网站制作呢&#xff1f;今天由我给大家分享一下网站制作的步骤和流程&#xff1a; 一、制定网站的核心主题&#xff1a; 在用户开展网站制作的之前&#xff0c;先确定一下以下的内…...

React集成百度【JSAPI Three】教程(002):设置不同的环境效果

文章目录 2、设置不同的天气2.1 安装antd前端UI库2.2 是否开启动态天空2.3 创建天气组件2.4 代码2.0版本下载2、设置不同的天气 2.1 安装antd前端UI库 安装命令: npm install antd --save2.2 是否开启动态天空 天气中的阴天、多云需要在开启动态天空后才能有效显示。在页面…...

Helm Chart 中配置多个 Docker Registry 地址以实现备用访问

在 Helm Chart 中配置多个 Docker Registry 地址以实现备用访问&#xff0c;可以通过以下几种方式实现&#xff1a; 1. 在 values.yaml 中定义多个 Registry 在 values.yaml 中定义主 Registry 和备用 Registry&#xff0c;以便在部署时灵活切换&#xff1a; # values.yaml …...

星云智控v1.0.0产品发布会圆满举行:以创新技术重构物联网监控新生态

星云智控v1.0.0产品发布会圆满举行&#xff1a;以创新技术重构物联网监控新生态 2024年5月15日&#xff0c;成都双流蛟龙社区党群服务中心迎来了一场备受业界瞩目的发布会——优雅草科技旗下”星云智控v1.0.0”物联网AI智控系统正式发布。本次发布会吸引了包括沃尔沃集团、新希…...

利用ffmpeg截图和生成gif

ffmpeg -i input.mp4 -ss 00:00:10 -vframes 1 output.jpgffmpeg -i input.mp4 -ss 00:00:10 -vframes 180 output.jpg -vframes 180代表截取180帧, 实测后发现如果视频是60fps,那么会从第10秒截取到第13秒-i input.mp4&#xff1a;指定输入视频文件。-ss 00:00:10&#xff1a;…...

OpenCV CUDA 模块中的矩阵算术运算-----在频域中执行两个复数频谱的逐元素乘法的函数mulSpectrums()

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 mulSpectrums()是OpenCV CUDA 模块中用于在频域中执行两个复数频谱的逐元素乘法的函数。 该函数实现了以下运算&#xff1a; d s t s r c 1 ⋅…...

可视化图解算法41:搜索二维矩阵(二维数组中的查找)

1. 题目 牛客网 面试笔试TOP101 | LeetCode 74. 搜索二维矩阵 描述 在一个二维数组array中&#xff08;每个一维数组的长度相同&#xff09;&#xff0c;每一行都按照从左到右递增的顺序排序&#xff0c;每一列都按照从上到下递增的顺序排序。请完成一个函数&#xf…...

OpenCV CUDA模块中的矩阵算术运算------创建卷积操作对象的工厂方法 cv::cuda::createConvolution

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 createConvolution函数是OpenCV CUDA 模块中用于创建卷积操作对象的工厂方法。它返回一个指向 cv::cuda::Convolution 接口的智能指针&#xff0…...

从代码学习深度学习 - 用于预训练词嵌入的数据集 PyTorch版

文章目录 前言辅助工具代码绘图工具 (utils\_for\_huitu.py)数据处理工具 (utils\_for\_data.py)读取数据集 (PTB)构建词表下采样高频词中心词和上下文词的提取负采样小批量加载训练实例整合代码:构建数据加载器总结前言 词嵌入(Word Embedding)是将词语映射到低维连续向量…...

基于jsp+mysql+Spring的Springboot旅游网站管理系统设计和实现

基于jspmysqlSpring的Springboot旅游网站管理系统设计和实现 &#x1f345; 作者主页 网顺技术团队 &#x1f345; 欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; &#x1f345; 文末获取源码联系方式 &#x1f4dd; &#x1f345; 查看下方微信号获取联系方式 承接各种定…...

【Rust迭代器】Rust迭代器用法解析与应用实战

✨✨ 欢迎大家来到景天科技苑✨✨ &#x1f388;&#x1f388; 养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; &#x1f3c6; 作者简介&#xff1a;景天科技苑 &#x1f3c6;《头衔》&#xff1a;大厂架构师&#xff0c;华为云开发者社区专家博主&#xff0c;…...

嵌入式学习笔记DAY23(树,哈希表)

一、树 1.树的概念 之前我们一直在谈的是一对一的线性结构&#xff0c;现实中&#xff0c;还存在很多一对多的情况需要处理&#xff0c;一对多的线性结构——树。 树的结点包括一个数据元素及若干指向其子树的分支&#xff0c;结点拥有的子树数称为结点的度。度为0的结点称为叶…...

操作系统————五种页面置换算法(OPT,FIFO,LRU,NRU,加强版NRU)大总结

❤️❤️❤️算法1&#xff1a;最佳置换算法&#xff08;OPT&#xff09; 算法思想&#xff1a; 值得注意的是这是一种理想型算法&#xff0c;实际上并不可能实现&#xff0c;读者需要注意 下面我们来解析一下它的原理&#xff1a; 我们假设有三个内存块&#xff0c;对于页面…...

数据结构(二) 线性表

一. 线性表 1.定义 线性表是由n(n>0)个具有相同数据类型的数据元素构成的有限序列。其中&#xff0c;元素之间通过顺序关系排列&#xff0c;每个元素有且只有一个直接前驱和一个直接后继(除首尾元素外) 二.线性表的顺序表示(顺序表) 1.存储方式 使用连续的内存空间(数组)存储…...

TS04:高性能四通道自动灵敏度校准电容触摸传感器

在现代电子设备中&#xff0c;电容触摸传感器的应用越来越广泛&#xff0c;而高性能的传感器芯片是实现良好用户体验的关键。 TS04 四通道电容触摸传感器&#xff0c;凭借其自动灵敏度校准功能和多种特性&#xff0c;成为理想的解决方案。本文将简要介绍 TS04 的主要特性、功能…...

鸿蒙 系统-安全-程序访问控制-应用权限管控

Ability Kit 提供了一种允许应用访问系统资源&#xff08;如&#xff1a;通讯录等&#xff09;和系统能力&#xff08;如&#xff1a;访问摄像头、麦克风等&#xff09;的通用权限访问方式&#xff0c;来保护系统数据&#xff08;包括用户个人数据&#xff09;或功能&#xff0…...

ArcGIS Pro 3.4 二次开发 - 框架

环境&#xff1a;ArcGIS Pro SDK 3.4 .NET 8 文章目录 框架1 框架1.1 如何在 DockPane 可见或隐藏时订阅和取消订阅事件1.2 执行命令1.3 设置当前工具1.4 激活选项卡1.5 激活/停用状态 - 修改条件1.6 判断应用程序是否繁忙1.7 获取应用程序主窗口1.8 关闭 ArcGIS Pro1.9 获取 …...

打破传统仓库管理困局:WMS如何重构出入库全流程

引言 在制造业与零售业高速发展的今天&#xff0c;仓库管理仍普遍面临效率低、错发漏发频发、库存数据滞后等痛点。人工登记导致30%的错单率&#xff0c;货位混乱让拣货耗时增加50%&#xff0c;而账实不符引发的二次采购成本更吞噬着企业利润。如何突破传统管理桎梏&#xff1…...

npm 安装时 SSL 证书过期问题笔记

问题描述: npm error code CERT_HAS_EXPIRED npm error errno CERT_HAS_EXPIRED npm error request to https://registry.npm.taobao.org/axios failed, reason: certificate has expired 这表明当前配置的 npm 镜像源&#xff08;淘宝镜像 https://registry.npm.taobao.org&…...

【大数据】MapReduce 编程-- PageRank--网页排名算法,用于衡量网页“重要性”-排序网页

PageRank 是 Google 创始人拉里佩奇&#xff08;Larry Page&#xff09;和谢尔盖布林&#xff08;Sergey Brin&#xff09;在 1998 年提出的一种网页排名算法&#xff0c;用于衡量网页“重要性”的一种方式。它是搜索引擎中用于排序网页的一种基础算法 一个网页越是被其他重要…...

Craw4AI:LLM友好的网页爬虫

GitHub&#xff1a;https://github.com/unclecode/crawl4ai 更多AI开源软件&#xff1a;发现分享好用的AI工具、AI开源软件、AI模型、AI变现 - 小众AI Crawl4AI旨在让网页爬取和数据提取变得简单而高效。无论构建复杂的 AI 应用程序还是增强大语言模型&#xff0c;Crawl4AI 都能…...

idea 安装飞算-javaAI 插件使用

文章目录 前言idea 安装飞算-javaAI 插件使用1. 介绍一下飞算-AI2. 安装使用 前言 如果您觉得有用的话&#xff0c;记得给博主点个赞&#xff0c;评论&#xff0c;收藏一键三连啊&#xff0c;写作不易啊^ _ ^。   而且听说点赞的人每天的运气都不会太差&#xff0c;实在白嫖的…...

Lombok

Lombok Lombok 是一个 Java 库&#xff0c;通过注解自动生成样板代码&#xff08;如 Getter/Setter、构造函数等&#xff09;&#xff0c;从而简化开发。在你提供的代码中&#xff0c;AllArgsConstructor 就是一个 Lombok 注解。以下是 Lombok 常用注解及其作用的详细说明&…...