- 自动驾驶激光3D点云处理系统性阐述及Open3D库函数应用
一碗白开水一
DPL自动驾驶3d人工智能
一、自动驾驶激光3D点云处理的核心挑战与流程自动驾驶系统依赖激光雷达(LiDAR)生成的高精度3D点云数据实现环境感知,其处理流程需解决以下核心问题:数据规模与实时性:现代LiDAR每秒生成数百万点,需在毫秒级完成处理以支持决策。动态环境适应性:需区分静态障碍物(如道路、建筑)与动态目标(如车辆、行人)。多传感器融合:与摄像头、雷达数据时空对齐,构建统一环境模型。典型处理流程分为四个阶段:原始点云
- 使用python的open3d库读取Bin格式点云并可视化
Python有很多库都可以处理点云,比如Python-PCL、Open3D等等。Python-PCL库已经很久没有维护了,而且安装极其麻烦!Open3D是由intel发布的3D点云可视化库,点云可视化和渲染都很方便,重要的是安装方便!!!1.安装PythonOpen3D环境:Ubuntu16.04pipinstallopen3d==0.9.0.0注意:open3d0.9.0.0只支持python2
- Open3D 点到面的ICP配准算法
AtlasCloud
python点云数据处理算法人工智能python矩阵numpy
目录一、算法原理1、算法概述2、点到平面ICP精配准3、参考文献二、主要函数三、代码实现四、结果展示1、初始位置2、配准结果一、算法原理1、算法概述 点到平面度量通常使用标准非线性最小二乘法来求解,例如Levenberg-Marquardt。点到平面ICP算法的每次迭代通常比点到点算法慢,但收敛速度明显更快。两个点云之间的相对旋转小于30°,在旋转矩阵中用θ替换sinθ,用1替换cosθ实现用线
- 口扫系统软件的架构设计流程
老猿的春天
三维c++口扫三维重建
[结构光图像流]↓解码结构光图案↓三角测量计算深度↓点云生成并去噪滤波↓实时配准/拼接(可选ICP/Odometry)↓网格重建(如MarchingCubes或BallPivoting)↓GPU显示(OpenGL/Open3D/VTK)
- open3d 使用 RANSAC 算法拟合平面
扶子
python点云处理平面pythonopen3d经验分享点云拟合平面
1、功能介绍:一个python代码演示了如何使用open3d和numpy来完成一个完整的点云平面拟合任务。它包括以下几个主要部分:生成符合某一平面方程的随机点云数据、使用RANSAC算法对这些点云进行平面拟合、可视化原始点云和平面拟合结果2、代码部分:importnumpyasnpimportopen3daso3d#生成随机点云np.random.seed(42)n_points=100#假设这些
- Open3D 进阶(31)渐进三角网(PTD)地面滤波
点云侠
点云进阶线性代数算法计算机视觉python
目录一、算法原理1、PTD算法2、实现流程二、代码实现三、参数指南四、结果展示。一、算法原理1、PTD算法 渐进三角网地面滤波算法(ProgressiveTINDensification,PTD)是一种广泛应用于机载LiDAR点云数据处理的滤波方法,旨在从复杂场景中精确分离地面点,以生成数字高程模型(DEM)。2、实现流程 PTD的核心思想是迭代加密三角网,逐步逼近真实地形:实现流程主要包括以
- open3d 点云拟合圆 mesh
扶子
python点云处理numpypythonopen3d经验分享点云拟合圆mesh
1、功能介绍:使用numpy和open3d进行二维圆拟合与三维可视化的完整示例。主要功能是对带有噪声的二维点云数据进行最小二乘法圆拟合,并使用open3d创建三角网格来可视化拟合出的圆形区域。2、代码部分:importnumpyasnpimportopen3daso3d#参数设置radius=5.0#圆的半径center=[0,0]#圆心num_points=200#点的数量noise_level
- 【转载翻译】Open3D和PCL的一些比较
空名Noname
open3d点云c++
转自个人博客:【转载翻译】Open3D和PCL的一些比较本人在逛Github时,发现一个解答Open3D和PCL对比的小文章,还挺有参考价值的原文:https://github.com/LaplaceKorea/investigate_open3d_vs_pcl/blob/main/README.rst#whats-the-support-for-gpus-look-like-in-open3d-
- Open3D--core模块函数详解
X-Vision
《open3d学习笔记》pythonopen3d
以下是Open3D核心模块open3d.core的完整函数及类的详细说明,涵盖所有公开接口,按功能分类整理。内容基于Open3D最新版本(v0.17+),并标注关键用途和参数。1.设备管理(Device)管理计算设备(CPU/GPU/CUDA)的配置与状态检查。函数/类参数返回值说明Device(device_type,device_id=0)device_type:str(e.g.,"CPU",
- las 点云可视化
目录点云灰色可视化las点云彩色可视化点云灰色可视化importlaspyimportnumpyasnpimportopen3daso3ddefread_las_to_o3d(filename):#读取las文件las=laspy.read(filename)#提取坐标数据points=np.vstack((las.x,las.y,las.z)).transpose()#创建Open3D点云对象p
- Open3D(C++) Ransac拟合平面(详细过程版)
点云侠
Open3D学习c++平面算法计算机视觉
目录一、算法原理二、代码实现三、结果展示一、算法原理见:PCL使用RANSAC拟合平面二、代码实现#include#include#include//RANSAC拟合平面Eigen::Vector4d
- Open3D(C++) Ransac拟合球体(详细过程版)
点云侠
Open3D学习c++算法开发语言计算机视觉3d
目录一、算法原理1、计算流程2、参考文献二、代码实现三、结果展示一、算法原理1、计算流程 空间球方程:(x−a)2+(y−b
- open3d显示点云报错[DrawGeometries] Failed creating OpenGL window.
桜見
c++
https://github.com/isl-org/Open3D/issues/6872最后exportXDG_SESSION_TYPE=x11后解决了
- open3d点云采样和滤波
微小冷
python教程Pythonpythonopen3d点云滤波点云处理
文章目录索引和采样点云滤波曲面滤波Taubin滤波索引和采样尽管点云的本质是三元数组的列表,但并没有提供类似方括号这种索引方案,而需通过【select_by_index】方法来实现,其输入参数有二,ids为点号列表,invert参数默认为否,表示返回ids中的点,否则将返回ids之外的点,示例如下importopen3daso3dimportnumpyasnpfromcopyimportdeepc
- Open3D Ransac算法分割点云平面
MelaCandy
算法python计算机视觉图像处理3d
目录一、概述1.1算法原理1.2应用场景二、代码实现2.1关键函数2.2完整代码三、实现效果3.1原始点云3.2分割后点云Open3D点云算法汇总及实战案例汇总的目录地址:Open3D点云算法与点云深度学习案例汇总(长期更新)-CSDN博客一、概述1.1算法原理RANSAC(RandomSampleConsensus)是一种迭代的参数估计算法,主要用于从包含大量噪声数据的样本中估计模型参数。其核心
- Open3D(C++) Ransac拟合多项式曲线
点云侠
Open3D学习c++开发语言矩阵计算机视觉算法
目录一、算法原理一、代码实现三、结果展示本文由CSDN点云侠原创,Open3D(C++)Ransac拟合多项式曲线,爬虫自重。如果你不是在点云侠的博客中看到该文章,那么此处便是不要脸的爬虫与GPT生成的文章。一、算法原理 RANSAC(RandomSampleConsensus)是一种用于拟合模型的迭代算法,它可以有效地从包含噪声和异常值的数据中估计出最佳的模型参数。在拟合多项式曲线时,RANS
- 点云从入门到精通技术详解100篇-基于点云的三维多目标追踪与目标检测
格图素书
目标检测人工智能计算机视觉
目录知识储备基于Python和Open3D库实现的三维点云多目标检测与跟踪技术要点解析:运行环境配置:扩展改进建议:前言三维多目标追踪技术点云目标检测算法2二维多目标追踪框架及三维点云目标检测2.1二维多目标追踪框架2.1.1DeepSORT总体架构2.1.2卡尔曼滤波算法2.1.3匈牙利匹配算法2.1.4二维表观特征提取模型2.2基于鸟瞰图的点云目标检测算法2.2.1ComplexYOLO总体结
- 基于open3d的一些常见点云操作
xiaomu_347
点云处理科研生活open3d点云处理
Open3D是一个强大的开源库,专门用于处理3D数据(如点云、网格等)。以下是Open3D中常见的点云操作总结:1.点云读取与写入读取点云:支持常见格式(.ply,.pcd,.xyz,.obj等)。pcd=o3d.io.read_point_cloud("file.ply")写入点云:o3d.io.write_point_cloud("output.ply",pcd)2.点云可视化快速可视化:o3
- Python实现人脸动捕与3D表情同步
百态老人
python3d开发语言
以下是一个基于Python的简单人脸动作捕捉与3D模型表情同步的示例代码,使用MediaPipe和Open3D库实现:importcv2importmediapipeasmpimportnumpyasnpimportopen3daso3d#初始化MediaPipe面部网格模型mp_face_mesh=mp.solutions.face_meshface_mesh=mp_face_mesh.Face
- Open3D(C++) 四元数奇异值分解
点云侠
Open3D学习c++矩阵开发语言3d计算机视觉线性代数
目录一、算法原理1、原理概述2、实现过程3、参考文献二、代码实现三、结果展示本文由CSDN点云侠原创,原文链接。如果你不是在点云侠的博客中看到该文章,那么此处便是不要脸的爬虫。一、算法原理1、原理概述 四元数矩阵的奇异值分解是将一个四元数矩阵分解成三个部分的乘积,即:Q=UΣV
- 点云库使用场景以及编译和使用实例
爱学习的大牛123
vtk学习点云vtk
1点云库概述与应用场景##什么是点云库?点云库是一套专门用于处理三维点云数据的软件工具和算法集合。点云是由大量的三维坐标点组成的数据集,通常用来表示物体或环境的表面。最知名的点云库是开源的PCL(PointCloudLibrary),但还有其他库如Open3D,PDAL(PointDataAbstractionLibrary)等也提供类似的功能。##点云库的主要功能1.**数据I/O**:读取和写
- Open3D 点云DBSCAN聚类算法
MelaCandy
算法聚类numpy计算机视觉图像处理3d
目录一、DBSCAN基本原理二、代码实现2.1关键函数2.2完整代码三、实现效果3.1原始点云3.2聚类后点云Open3D点云算法汇总及实战案例汇总的目录地址:Open3D点云算法与点云深度学习案例汇总(长期更新)-CSDN博客一、DBSCAN基本原理DBSCAN(Density-BasedSpatialClusteringofApplicationswithNoise)是一种基于密度的聚类算法,
- 点云空洞的边界识别提取 pso-bp 神经网络的模型来修复点云空洞 附python代码
点云-激光雷达-Slam-三维牙齿
激光雷达点云c++为主神经网络人工智能深度学习点云python
代码是一个Python程序,用于处理3D点云数据,特别是检测和修复点云中的孔洞区域。1.**导入库**:-`numpy`:用于数学运算。-`open3d`:用于处理3D数据和可视化。-`torch`:PyTorch库,用于深度学习。-`torch.nn`和`torch.optim`:PyTorch的神经网络和优化器模块。-`mpl_toolkits.mplot3d`和`matplotlib.pyp
- Python解决安装包报错4.0.0-unsupported
zhou_x_b
python开发语言
1、安装open3d一直报错,提示pip没有最新2、更新pip报错4.0.0-unsupported解决思路:pip含多个(wherepip命令可以在cmd中查看pip的位置),卸载pippipuninstallpip根据提示如果有多个都卸载了在安装pip命令:easy_installpip关掉软件在打开(否则没用)如果通过pycharm设置安装包,得选择python安装路径对应的pip
- 利用 Open3D 保存并载入相机视角的简单示例
微凉的衣柜
点云处理python点云处理open3d
1.前言在使用Open3D进行三维可视化和点云处理时,有时需要将当前的视角(CameraViewpoint)保存下来,以便下次再次打开时能够还原到同样的视角。本文将演示如何在最新的Open3DGUI界面(o3d.visualization.gui/o3d.visualization.O3DVisualizer)中实现这一功能,并展示完整示例代码及运行效果。2.环境准备Python版本:3.xOpe
- Open3d处理点云数据-改进的欧式聚类分割算法(六)
点云客户
算法聚类机器学习
1.概述1.1传统欧式聚类分割算法欧式聚类算法(EuclideanClustering)是一种将点云数据分割成不同聚类(簇)的算法。它是点云分割中的一种常用方法,旨在将距离比较近的点分为同一簇,从而识别出不同的物体或结构。这个算法主要适用于包含较小噪音和具有一定距离差异的点云数据。基本思想:(1)选择一个种子点(SeedPoint)作为当前簇的起始点。(2)遍历所有未分类的点,计算它们与种子点的距
- open3d绘制平面
太一吾鱼水
Python点云智能处理平面
在Open3D中绘制平面通常涉及到创建一个平面模型并将其可视化。Open3D是一个开源库,主要用于3D数据的处理和可视化,但它主要用于3D数据的处理,并不直接支持绘制2D平面。如果你想在Open3D中“绘制”一个平面,你可以通过以下几种方法来实现类似的效果:方法1:使用o3d.geometry.TriangleMesh创建平面你可以创建一个简单的平面网格,并将其视为一个2D平面。这可以通过定义一个
- Open3D(C++) 可视化(1)——绘制平面模型
点云侠
Open3D学习c++平面开发语言算法3d
目录一、概述二、代码实现三、结果展示一、概述 Open3D中没有实现绘制平面的功能,故自己写代码进行实现。效果如下:二、代码实现#include#include//生成平面模型staticstd
- open3d python 分割多个平面
黄晓魚
halcon3dPCL点云处理深度神经网络点云处理PCL库Open3D库Point++模型使用平面算法open3dpython
测试效果废话在Open3D中,detect_planar_patches方法用于从点云数据中检测平面区域(或称为平面补丁)。这个方法通过分析点云中各点之间的法线向量和方向性来识别具有相似法线向量的点群,从而识别出潜在的平面区域。下面是对你给出的代码行中各个参数的解释:normal_variance_threshold_deg:法线向量方差阈值(以度为单位)。这个参数设定了允许的点云中法线向量方向变
- Open3D(C++) 可视化绘制平面模型
后端架构魔术师
c++平面开发语言编程
Open3D(C++)可视化绘制平面模型Open3D是一个现代化的3D图像处理引擎,它包含很多常用的3D操作,如点云分割、重构、配准等。其中,在可视化方面Open3D也提供了一系列方便易用的函数和接口。在本篇文章中,我们将介绍如何使用Open3D绘制一个简单的平面模型并进行可视化展示。下面是完整的源代码:#include#includeintmain(){//创建平面顶点std::vectorve
- Algorithm
香水浓
javaAlgorithm
冒泡排序
public static void sort(Integer[] param) {
for (int i = param.length - 1; i > 0; i--) {
for (int j = 0; j < i; j++) {
int current = param[j];
int next = param[j + 1];
- mongoDB 复杂查询表达式
开窍的石头
mongodb
1:count
Pg: db.user.find().count();
统计多少条数据
2:不等于$ne
Pg: db.user.find({_id:{$ne:3}},{name:1,sex:1,_id:0});
查询id不等于3的数据。
3:大于$gt $gte(大于等于)
&n
- Jboss Java heap space异常解决方法, jboss OutOfMemoryError : PermGen space
0624chenhong
jvmjboss
转自
http://blog.csdn.net/zou274/article/details/5552630
解决办法:
window->preferences->java->installed jres->edit jre
把default vm arguments 的参数设为-Xms64m -Xmx512m
----------------
- 文件上传 下载 解析 相对路径
不懂事的小屁孩
文件上传
有点坑吧,弄这么一个简单的东西弄了一天多,身边还有大神指导着,网上各种百度着。
下面总结一下遇到的问题:
文件上传,在页面上传的时候,不要想着去操作绝对路径,浏览器会对客户端的信息进行保护,避免用户信息收到攻击。
在上传图片,或者文件时,使用form表单来操作。
前台通过form表单传输一个流到后台,而不是ajax传递参数到后台,代码如下:
<form action=&
- 怎么实现qq空间批量点赞
换个号韩国红果果
qq
纯粹为了好玩!!
逻辑很简单
1 打开浏览器console;输入以下代码。
先上添加赞的代码
var tools={};
//添加所有赞
function init(){
document.body.scrollTop=10000;
setTimeout(function(){document.body.scrollTop=0;},2000);//加
- 判断是否为中文
灵静志远
中文
方法一:
public class Zhidao {
public static void main(String args[]) {
String s = "sdf灭礌 kjl d{';\fdsjlk是";
int n=0;
for(int i=0; i<s.length(); i++) {
n = (int)s.charAt(i);
if((
- 一个电话面试后总结
a-john
面试
今天,接了一个电话面试,对于还是初学者的我来说,紧张了半天。
面试的问题分了层次,对于一类问题,由简到难。自己觉得回答不好的地方作了一下总结:
在谈到集合类的时候,举几个常用的集合类,想都没想,直接说了list,map。
然后对list和map分别举几个类型:
list方面:ArrayList,LinkedList。在谈到他们的区别时,愣住了
- MSSQL中Escape转义的使用
aijuans
MSSQL
IF OBJECT_ID('tempdb..#ABC') is not null
drop table tempdb..#ABC
create table #ABC
(
PATHNAME NVARCHAR(50)
)
insert into #ABC
SELECT N'/ABCDEFGHI'
UNION ALL SELECT N'/ABCDGAFGASASSDFA'
UNION ALL
- 一个简单的存储过程
asialee
mysql存储过程构造数据批量插入
今天要批量的生成一批测试数据,其中中间有部分数据是变化的,本来想写个程序来生成的,后来想到存储过程就可以搞定,所以随手写了一个,记录在此:
DELIMITER $$
DROP PROCEDURE IF EXISTS inse
- annot convert from HomeFragment_1 to Fragment
百合不是茶
android导包错误
创建了几个类继承Fragment, 需要将创建的类存储在ArrayList<Fragment>中; 出现不能将new 出来的对象放到队列中,原因很简单;
创建类时引入包是:import android.app.Fragment;
创建队列和对象时使用的包是:import android.support.v4.ap
- Weblogic10两种修改端口的方法
bijian1013
weblogic端口号配置管理config.xml
一.进入控制台进行修改 1.进入控制台: http://127.0.0.1:7001/console 2.展开左边树菜单 域结构->环境->服务器-->点击AdminServer(管理) &
- mysql 操作指令
征客丶
mysql
一、连接mysql
进入 mysql 的安装目录;
$ bin/mysql -p [host IP 如果是登录本地的mysql 可以不写 -p 直接 -u] -u [userName] -p
输入密码,回车,接连;
二、权限操作[如果你很了解mysql数据库后,你可以直接去修改系统表,然后用 mysql> flush privileges; 指令让权限生效]
1、赋权
mys
- 【Hive一】Hive入门
bit1129
hive
Hive安装与配置
Hive的运行需要依赖于Hadoop,因此需要首先安装Hadoop2.5.2,并且Hive的启动前需要首先启动Hadoop。
Hive安装和配置的步骤
1. 从如下地址下载Hive0.14.0
http://mirror.bit.edu.cn/apache/hive/
2.解压hive,在系统变
- ajax 三种提交请求的方法
BlueSkator
Ajaxjqery
1、ajax 提交请求
$.ajax({
type:"post",
url : "${ctx}/front/Hotel/getAllHotelByAjax.do",
dataType : "json",
success : function(result) {
try {
for(v
- mongodb开发环境下的搭建入门
braveCS
运维
linux下安装mongodb
1)官网下载mongodb-linux-x86_64-rhel62-3.0.4.gz
2)linux 解压
gzip -d mongodb-linux-x86_64-rhel62-3.0.4.gz;
mv mongodb-linux-x86_64-rhel62-3.0.4 mongodb-linux-x86_64-rhel62-
- 编程之美-最短摘要的生成
bylijinnan
java数据结构算法编程之美
import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;
public class ShortestAbstract {
/**
* 编程之美 最短摘要的生成
* 扫描过程始终保持一个[pBegin,pEnd]的range,初始化确保[pBegin,pEnd]的ran
- json数据解析及typeof
chengxuyuancsdn
jstypeofjson解析
// json格式
var people='{"authors": [{"firstName": "AAA","lastName": "BBB"},'
+' {"firstName": "CCC&
- 流程系统设计的层次和目标
comsci
设计模式数据结构sql框架脚本
流程系统设计的层次和目标
 
- RMAN List和report 命令
daizj
oraclelistreportrman
LIST 命令
使用RMAN LIST 命令显示有关资料档案库中记录的备份集、代理副本和映像副本的
信息。使用此命令可列出:
• RMAN 资料档案库中状态不是AVAILABLE 的备份和副本
• 可用的且可以用于还原操作的数据文件备份和副本
• 备份集和副本,其中包含指定数据文件列表或指定表空间的备份
• 包含指定名称或范围的所有归档日志备份的备份集和副本
• 由标记、完成时间、可
- 二叉树:红黑树
dieslrae
二叉树
红黑树是一种自平衡的二叉树,它的查找,插入,删除操作时间复杂度皆为O(logN),不会出现普通二叉搜索树在最差情况时时间复杂度会变为O(N)的问题.
红黑树必须遵循红黑规则,规则如下
1、每个节点不是红就是黑。 2、根总是黑的 &
- C语言homework3,7个小题目的代码
dcj3sjt126com
c
1、打印100以内的所有奇数。
# include <stdio.h>
int main(void)
{
int i;
for (i=1; i<=100; i++)
{
if (i%2 != 0)
printf("%d ", i);
}
return 0;
}
2、从键盘上输入10个整数,
- 自定义按钮, 图片在上, 文字在下, 居中显示
dcj3sjt126com
自定义
#import <UIKit/UIKit.h>
@interface MyButton : UIButton
-(void)setFrame:(CGRect)frame ImageName:(NSString*)imageName Target:(id)target Action:(SEL)action Title:(NSString*)title Font:(CGFloa
- MySQL查询语句练习题,测试足够用了
flyvszhb
sqlmysql
http://blog.sina.com.cn/s/blog_767d65530101861c.html
1.创建student和score表
CREATE TABLE student (
id INT(10) NOT NULL UNIQUE PRIMARY KEY ,
name VARCHAR
- 转:MyBatis Generator 详解
happyqing
mybatis
MyBatis Generator 详解
http://blog.csdn.net/isea533/article/details/42102297
MyBatis Generator详解
http://git.oschina.net/free/Mybatis_Utils/blob/master/MybatisGeneator/MybatisGeneator.
- 让程序员少走弯路的14个忠告
jingjing0907
工作计划学习
无论是谁,在刚进入某个领域之时,有再大的雄心壮志也敌不过眼前的迷茫:不知道应该怎么做,不知道应该做什么。下面是一名软件开发人员所学到的经验,希望能对大家有所帮助
1.不要害怕在工作中学习。
只要有电脑,就可以通过电子阅读器阅读报纸和大多数书籍。如果你只是做好自己的本职工作以及分配的任务,那是学不到很多东西的。如果你盲目地要求更多的工作,也是不可能提升自己的。放
- nginx和NetScaler区别
流浪鱼
nginx
NetScaler是一个完整的包含操作系统和应用交付功能的产品,Nginx并不包含操作系统,在处理连接方面,需要依赖于操作系统,所以在并发连接数方面和防DoS攻击方面,Nginx不具备优势。
2.易用性方面差别也比较大。Nginx对管理员的水平要求比较高,参数比较多,不确定性给运营带来隐患。在NetScaler常见的配置如健康检查,HA等,在Nginx上的配置的实现相对复杂。
3.策略灵活度方
- 第11章 动画效果(下)
onestopweb
动画
index.html
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/
- FAQ - SAP BW BO roadmap
blueoxygen
BOBW
http://www.sdn.sap.com/irj/boc/business-objects-for-sap-faq
Besides, I care that how to integrate tightly.
By the way, for BW consultants, please just focus on Query Designer which i
- 关于java堆内存溢出的几种情况
tomcat_oracle
javajvmjdkthread
【情况一】:
java.lang.OutOfMemoryError: Java heap space:这种是java堆内存不够,一个原因是真不够,另一个原因是程序中有死循环; 如果是java堆内存不够的话,可以通过调整JVM下面的配置来解决: <jvm-arg>-Xms3062m</jvm-arg> <jvm-arg>-Xmx
- Manifest.permission_group权限组
阿尔萨斯
Permission
结构
继承关系
public static final class Manifest.permission_group extends Object
java.lang.Object
android. Manifest.permission_group 常量
ACCOUNTS 直接通过统计管理器访问管理的统计
COST_MONEY可以用来让用户花钱但不需要通过与他们直接牵涉的权限
D