南昌电商购物网站开发/南昌企业网站建设

南昌电商购物网站开发,南昌企业网站建设,网站管理员登陆不了,怎么在手机上搭建网站GrainGrasp为每个手指提供细粒度的接触指导,为灵巧手生成精细的抓取策略。 通过单独调整每个手指的接触来实现更稳定的抓取,从而提供了更接近人类能力的抓取指导。 论文地址:GrainGrasp: Dexterous Grasp Generation with Fine-grained Con…

GrainGrasp为每个手指提供细粒度的接触指导,为灵巧手生成精细抓取策略

通过单独调整每个手指的接触来实现更稳定的抓取,从而提供了更接近人类能力的抓取指导。

论文地址:GrainGrasp: Dexterous Grasp Generation with Fine-grained Contact Guidance

代码地址:https://github.com/wmtlab/GrainGrasp

看一下抓取效果:

看一物体CAD的抓取效果

不同视角观察:

1、创建Conda环境

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

然后进入GrainGrasp环境

conda create -n GrainGrasp python=3.9
conda activate GrainGrasp

2、安装PyTorch

我们使用的版本是pytorch==2.0.1+cu118

执行下面命令进行安装:

conda install pytorch==2.0.1 torchvision==0.15.2 torchaudio==2.0.2 pytorch-cuda=11.8 -c pytorch -c nvidia

3、安装GrainGrasp依赖库

下载GrainGrasp代码,然后进行GrainGrasp-main目录中

代码地址:https://github.com/wmtlab/GrainGrasp

创建一个文件requirements.txt,编写内容:

numpy==1.23.0
open3d==0.17.0
trimesh==4.1.7
attrdict==2.0.1
mano
chumpy==0.70

开始安装啦

pip install -r requirements.txt  -i https://pypi.tuna.tsinghua.edu.cn/simple

等待安装完成~

4、安装pytorch3d

访问 PyTorch3D 官方下载页面,找到与我们的环境匹配的 PyTorch3D 0.7.5 安装包

名称:pytorch3d-0.7.5-py39_cu118_pyt201.tar.bz2

然后下载并安装:

conda install pytorch3d-0.7.5-py39_cu118_pyt201.tar.bz2

5、模型推理

首先从MANO网站下载MANO模型文件(MANO_LEFT.pkl、MANO_RIGHT.pkl),到mano/models/目录中

手部支持的自由度:

这个配置文件整合了多个模块的路径和参数设置,用于手部和物体的 3D 重建和姿态估计任务。

每个模块的配置都包含了必要的路径和训练参数,以便在实际运行时能够正确加载数据和模型,并进行有效的训练和测试。

运行示例1:

python run_complete.py -i=8 -s=1234

看一下抓取效果:

看一物体CAD的抓取效果:

run_complete.py 源代码:

import os
import time
import torch
import trimesh
import argparse
import numpy as np
import open3d as o3d
from utils import annotate
from utils import vis
from utils import tools
from config import cfgs
from GrainGrasp import GrainGraspif __name__ == "__main__":# 设置设备为 GPU 或 CPUdevice = "cuda" if torch.cuda.is_available() else "cpu"# 创建命令行参数解析器parge = argparse.ArgumentParser(description="GrainGrasp")parge.add_argument("--idx", "-i", type=int, default=2, help="物体的索引")parge.add_argument("--epochs", "-e", type=int, default=300, help="优化的轮数")parge.add_argument("--threshold", "-t", type=float, default=0.0, help="阈值")parge.add_argument("--select", "-s", type=str, default="12345", help="选择的手指索引,最多5根手指:12345")parge.add_argument("--vis_pc", "-vp", type=bool, default=True, help="是否可视化点云")parge.add_argument("--vis_mesh", "-vm", type=bool, default=True, help="是否可视化网格")parge.add_argument("--vis_process", "-vprocess", type=bool, default=True, help="是否可视化优化过程")args = parge.parse_args()# 将选择的手指索引从字符串转换为整数列表select_finger_idx = list(map(lambda x: int(x), args.select))# 从配置文件中获取采样点数量sample_points_num = cfgs.obman_config.sample_points_num# 加载物体的三维网格模型obj_path = os.path.join("sample", str(args.idx), "obj_mesh.obj")obj_mesh = trimesh.load_mesh(obj_path)# 从网格中采样点云数据(备用方法)# obj_pc = tools.pc_sample(obj_mesh, sample_points_num)# 从文件加载点云数据obj_pc_path = os.path.join("sample", str(args.idx), "obj_pc.npy")  # 点云数据形状为 [3, 3000]obj_pc = np.load(obj_pc_path).T  # 转置为 [3000, 3]obj_pc = torch.Tensor(obj_pc)  # 转换为 PyTorch 张量# 初始化 GrainGrasp 模型grain_grasp = GrainGrasp(cfgs.dcog_config, cfgs.cvae_model_path, device)# 开始计时time_start = time.time()# 执行推理过程,获取抓取姿态优化结果result = grain_grasp.inference_complete(obj_pc,epochs=args.epochs,select_finger_idx=select_finger_idx,threshold=args.threshold,)print("运行时间是 {:.2f} 秒".format(time.time() - time_start))print("能量值为 ", result.E_pen)print("最小能量索引为 ", result.min_idx)hand_pc_final = result.min_idx_hand_pc # 获取优化后的手部点云数据hand_face = grain_grasp.dcog_model.rh_faces[0].cpu() # 获取手部网格的面数据hand_color = annotate.get_finger_colors(hand_pc_final) # 为手部点云数据分配颜色# 创建手部网格的 Open3D对象hand_mesh_o3d = vis.get_o3d_mesh(hand_pc_final, hand_face, [0, 0.8, 1], hand_color)obj_colors_true = annotate.get_obj_colors(result.obj_cls.cpu()) # 为物体点云数据分配颜色obj_pcd = vis.get_o3d_pcd(obj_pc.cpu().detach(), obj_colors_true)obj_mesh_o3d = vis.trimesh2o3d(obj_mesh)# 如果设置为可视化点云,则显示手部和物体点云if args.vis_pc:vis.vis_HandObject([hand_mesh_o3d], [obj_pcd])# 如果设置为可视化网格,则显示手部和物体网格if args.vis_mesh:vis.vis_HandObject([hand_mesh_o3d], [obj_mesh_o3d])# 如果设置为可视化优化过程,则显示优化过程if args.vis_process:record_hand_pc = result.min_idx_record_hand_pcrecord_handmesh_o3d = vis.get_o3d_mesh(record_hand_pc[0], hand_face, [0, 0.8, 1], hand_color)vis.vis_GraspProcess(record_handmesh_o3d, record_hand_pc[1:], obj_mesh_o3d)

思路流程

  1. 设备设置

    • 检查是否有可用的 GPU 设备,如果有则使用 GPU,否则使用 CPU。

  2. 参数解析

    • 使用 argparse 解析命令行参数,设置物体索引、优化轮数、阈值、手指选择、可视化选项等。

  3. 数据加载

    • 加载物体的三维网格模型(obj_mesh.obj)。

    • 从文件加载物体点云数据(obj_pc.npy),并将其转换为 PyTorch 张量。

  4. 模型初始化

    • 初始化 GrainGrasp 模型,加载预训练模型路径(cfgs.cvae_model_path)。

  5. 推理过程

    • 调用模型的 inference_complete 方法进行抓取姿态优化。

    • 传入物体点云数据、优化轮数、手指索引和阈值等参数。

    • 计算运行时间并输出优化结果(能量值和最小能量索引)。

  6. 结果可视化

    • 将优化后的手部点云数据和物体点云/网格模型进行可视化。

    • 如果设置为可视化点云,则显示手部网格和物体点云。

    • 如果设置为可视化网格,则显示手部网格和物体网格。

    • 如果设置为可视化优化过程,则显示优化过程中的手部姿态变化。

运行示例2:

python run_only_opt.py -i=4 -s=134

看一下抓取效果

看一物体CAD的抓取效果:

run_only_opt.py 源代码:

import os
import time
import torch
import trimesh
import argparse
import numpy as np
import open3d as o3d
from utils import annotate
from utils import vis
from utils import tools
from utils import Load_obman
from config import cfgs
from GrainGrasp import GrainGraspif __name__ == "__main__":# 设置设备为 GPU 或 CPUdevice = "cuda" if torch.cuda.is_available() else "cpu"# 初始化命令行参数解析器parge = argparse.ArgumentParser(description="GrainGrasp")parge.add_argument("--idx", "-i", type=int, default=2, help="物体的索引")parge.add_argument("--epochs", "-e", type=int, default=300, help="优化的轮数")parge.add_argument("--K", "-k", type=int, default=50, help="优化过程中的参数 K")parge.add_argument("--threshold", "-t", type=float, default=0.0, help="优化过程中的阈值")parge.add_argument("--select", "-s", type=str, default="12345", help="选择的手指索引,最多5根手指:12345")parge.add_argument("--vis_pc", "-vp", type=bool, default=True, help="是否可视化点云")parge.add_argument("--vis_mesh", "-vm", type=bool, default=True, help="是否可视化网格")parge.add_argument("--vis_process", "-vprocess", type=bool, default=True, help="是否可视化优化过程")args = parge.parse_args()# 将选择的手指索引从字符串转换为整数列表select_finger_idx = list(map(lambda x: int(x), args.select))# 从配置文件中获取采样点数量sample_points_num = cfgs.obman_config.sample_points_num# 构造物体网格模型路径obj_path = os.path.join("sample", str(args.idx), "obj_mesh.obj")# 加载物体网格模型obj_mesh = trimesh.load_mesh(obj_path)# 从网格中采样物体点云数据obj_pc = tools.pc_sample(obj_mesh, sample_points_num)# 构造手部点云数据路径hand_pc_path = os.path.join("sample", str(args.idx), "hand_pc.npy")  # [3,3000]# 加载手部点云数据hand_pc = np.load(hand_pc_path)obj_pc = torch.Tensor(obj_pc)hand_pc = torch.Tensor(hand_pc)# 初始化 GrainGrasp 模型grain_grasp = GrainGrasp(cfgs.dcog_config, None, device)# 开始计时time_start = time.time()# 执行优化过程,获取抓取姿态优化结果result = grain_grasp.inference_only_opt(obj_pc,hand_pc=hand_pc,K=args.K,epochs=args.epochs,select_finger_idx=select_finger_idx,threshold=args.threshold,)print("运行时间是 {:.2f} 秒".format(time.time() - time_start))print("能量值为 ", result.E_pen)print("最小能量索引为 ", result.min_idx)# 获取优化后的手部点云数据hand_pc_final = result.min_idx_hand_pc# 获取手部网格的面数据hand_face = grain_grasp.dcog_model.rh_faces[0].cpu()# 为手部点云数据分配颜色hand_color = annotate.get_finger_colors(hand_pc_final)# 创建手部网格的 Open3D 对象hand_mesh_o3d = vis.get_o3d_mesh(hand_pc_final, hand_face, [0, 0.8, 1], hand_color)# 为物体点云数据分配颜色obj_colors_true = annotate.get_obj_colors(result.obj_cls.cpu())# 创建物体点云的 Open3D 对象obj_pcd = vis.get_o3d_pcd(obj_pc.cpu().detach(), obj_colors_true)# 将 Trimesh 格式的物体网格转换为 Open3D 格式obj_mesh_o3d = vis.trimesh2o3d(obj_mesh)# 如果设置为可视化点云,则显示手部和物体点云if args.vis_pc:vis.vis_HandObject([hand_mesh_o3d], [obj_pcd])# 如果设置为可视化网格,则显示手部和物体网格if args.vis_mesh:vis.vis_HandObject([hand_mesh_o3d], [obj_mesh_o3d])# 如果设置为可视化优化过程,则显示优化过程if args.vis_process:record_hand_pc = result.min_idx_record_hand_pcrecord_handmesh_o3d = vis.get_o3d_mesh(record_hand_pc[0], hand_face, [0, 0.8, 1], hand_color)vis.vis_GraspProcess(record_handmesh_o3d, record_hand_pc[1:], obj_mesh_o3d)

思路流程

  1. 设备设置与参数解析

    • 检查是否有可用的 GPU 设备,如果有则使用 GPU,否则使用 CPU。

    • 使用 argparse 解析命令行参数,设置物体索引、优化轮数、参数 K、阈值、手指选择、可视化选项等。

  2. 数据加载

    • 加载物体的三维网格模型(obj_mesh.obj)。

    • 从物体网格模型中采样点云数据(tools.pc_sample)。

    • 从文件加载手部点云数据(hand_pc.npy),并将其转换为 PyTorch 张量。

  3. 模型初始化

    • 初始化 GrainGrasp 模型,不加载预训练模型路径(None)。

  4. 优化过程

    • 调用模型的 inference_only_opt 方法进行抓取姿态优化。

    • 传入物体点云数据、手部点云数据、参数 K、优化轮数、手指索引和阈值等参数。

    • 计算运行时间并输出优化结果(能量值和最小能量索引)。

  5. 结果可视化

    • 将优化后的手部点云数据和物体点云/网格模型进行可视化。

    • 如果设置为可视化点云,则显示手部网格和物体点云。

    • 如果设置为可视化网格,则显示手部网格和物体网格。

    • 如果设置为可视化优化过程,则显示优化过程中的手部姿态变化。

分享完成~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/898930.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

快速部署Samba共享服务器作为k8s后端存储

由于Ceph Squid(v19.2.1)‌不原生支持直接导出 SMB 服务器‌,需通过手动集成 Samba 或其他第三方工具实现‌ 所以直接部署最简单的 安装软件包 apt install samba编辑配置文件 vim /etc/samba/smb.conf在最末尾添加以下 # cp /etc/samba/sm…

【MYSQL】索引和事务

🥰🥰🥰来都来了,不妨点个关注叭! 👉博客主页:欢迎各位大佬!👈 本期内容讲解 MySQL 中的索引和事务,在学习的过程中,我们需要经常问自己为什么 文章目录 1. 索…

计划管理工具应该具备的能(甘特图)

在当今快节奏的项目管理环境中,高效地规划和跟踪项目进度是至关重要的。甘特图,作为项目管理领域的经典工具,以其直观的时间轴和任务分配方式,深受项目管理者的青睐。 随着数字化时代的到来,甘特图线上编辑器应运而生&…

CSS动画

目录 一、核心概念与语法 1. keyframes 关键帧 2. animation 属性 二、动画调速函数(animation-timing-function) 1. 预设值 2. 贝塞尔曲线 3. 步进函数(steps()) 三、动画控制与交互 1. 暂停与恢复 2. JavaScript 控制…

2025年河北省第二届职业技能大赛网络安全项目 模块 B样题任务书

2025年河北省第二届职业技能大赛网络安全项目 模块 B样题任务书 河北省第二届职业技能大赛网络安全项目-模块 B-夺旗挑战赛(CTF)一、目标系统1二、目标系统2三、目标系统3四、目标系统4 需要真题环境-培训可以私信博主! 河北省第二届职业技能…

钞票准备好了吗?鸿蒙电脑 5 月见

3月20日,在华为 Pura 先锋盛典及鸿蒙智行新品发布会上,华为常务董事、终端BG董事长、智能汽车解决方案BU董事长余承东表示,华为终端全面进入鸿蒙时代,今年5月将推出鸿蒙电脑。 在3月20日的华为Pura先锋盛典及鸿蒙智行新品发布会上…

Java高频面试之集合-15

hello啊,各位观众姥爷们!!!本baby今天来报道了!哈哈哈哈哈嗝🐶 面试官:解决哈希冲突有哪些方法? 1. 开放寻址法(Open Addressing) 核心思想:当哈…

GitHub 上的 Khoj 项目:打造你的专属 AI 第二大脑

在信息爆炸的时代,高效管理和利用个人知识变得愈发重要。GitHub 上的 Khoj 项目为我们提供了一个强大的解决方案,它能成为你的 “AI 第二大脑”,帮你轻松整合、搜索和运用知识。今天,就来详细了解下 Khoj。​ Khoj 是什么&#x…

爬虫(requsets)笔记

一、request_基本使用 pip install requests -i https://pypi.douban.com/simple 一个类型六个属性 r.text 获取网站源码 r.encoding 访问或定制编码方式r.url 获取请求的urlr.content 响应的字节类型r.status_code 响应的状态码r.headers 响应的头信息 import requestsur…

centos7连不上接网络

选择编辑, 选择虚拟机网络编辑 右键虚拟机,点击设置,设置网络,选择nat模式, 配置:/etc/sysconfig/network-scripts/ifcfg-ens33 vim /etc/sysconfig/network-scripts/ifcfg-ens33设置IP地址如图所示,重…

C++类与对象的第一个简单的实战练习-3.24笔记

在哔哩哔哩学习的这个老师的C面向对象高级语言程序设计教程&#xff08;118集全&#xff09;讲的真的很不错 实战一&#xff1a; 情况一&#xff1a;将所有代码写到一个文件main.cpp中 #include<iostream> //不知道包含strcpy的头文件名称是什么,问ai可知 #include<…

Jetson Orin NX使用 Ollama 本地部署 deepseek

本文记录在 jetson orin nx 上使用 ollama 部署 deepseek 的过程 有用的网站及工具 NVIDIA Jetson AI LabOllama官网Jtop 工具 > 用以查看jetson GPU/CPU/Memory 等占用情况的工具&#xff0c;安装过程如下&#xff1a; sudo apt-get install python3-pip sudo -H pip3 in…

目标检测20年(三)

对这篇论文感兴趣的小伙伴可以订阅笔者《目标检测》专栏&#xff0c;关注笔者对该文献的阅读和理解。 前两篇解读链接&#xff1a; 目标检测20年&#xff08;一&#xff09;-CSDN博客 目标检测20年&#xff08;二&#xff09;-CSDN博客 目录 四、 检测器的加速发展 4.1 特…

智能手持终端PDA在设备巡检管理中的应用

在工业制造、能源电力、轨道交通等领域&#xff0c;设备巡检是保障生产安全与连续性的核心环节。传统巡检模式存在效率低、易出错、数据滞后等痛点。上海岳冉智能设备巡检手持终端PDA&#xff0c;以智能化、数字化、高可靠为核心设计理念&#xff0c;集RFID、条码扫描、AI图像识…

AI知识补全(二):提示工程(Prompting)是什么?

名人说&#xff1a;人生如逆旅&#xff0c;我亦是行人。 ——苏轼《临江仙送钱穆父》 创作者&#xff1a;Code_流苏(CSDN)&#xff08;一个喜欢古诗词和编程的Coder&#x1f60a;&#xff09; 上一篇&#xff1a;AI知识补全&#xff08;一&#xff09;&#xff1a;tokens是什么…

C++友元:跨墙访问的三种姿势

目录 友元 友元之普通函数形式 友元之成员函数形式 友元类 友元的特点 友元 什么叫友元&#xff1f; 一般来说&#xff0c;类的私有成员只能在类的内部访问&#xff0c;类之外是不能访问它们的。但如果将其他类/函数设置为类的友元&#xff0c;那么友元类/函数就可以在前…

位运算[找出唯一成对的数]

题目来源&#xff1a;蓝桥云课 不用辅助储存空间 import java.util.Random;public class T_01 {public class Util {public static void swap(int[] arr, int i, int j) {int temp arr[i];arr[i] arr[j];arr[j] temp;}public static void print(int[] arr) {for (int i 0; …

7.2 控件和组件

版权声明&#xff1a;本文为博主原创文章&#xff0c;转载请在显著位置标明本文出处以及作者网名&#xff0c;未经作者允许不得用于商业目的 C#工具箱位于编辑窗口的左侧&#xff0c;它默认内置了大量的控件和组件。控件一般派生于System.Windows.Forms.Control类&#xff0c;显…

OpenCV第2课 OpenCV的组成结构与图片/视频的加载及展示

1.OpenCV 的组成结构 2.OpenCV 的具体模块 3. 图像的读取 4. 视频的读取 1.OpenCV 的组成结构 OpenCV 是由很多模块组成的,这些模块可以分成很多层: 最底层是基于硬件加速层(HAL)的各种硬件优化。再上一层是opencv_contrib 模块所包含的OpenCV 由其他开发人员所贡献的代…

安装配置Tesseract-OCR

1,下载对应的可执行文件 在Tesseract OCR下载地址Index of /tesseract下载合适的版本安装包,如下: 点击安装包进行安装: 语言选择英文: 如果需要识别中文,则可以在安装过程中勾选下载中文语言包和脚本(也可以按需选择繁体):