CGAL在ubuntu下的安装及Hello World的测试
ubuntu下的安装
CGAL安装
参考地址:https://doc.cgal.org/latest/Manual/usage.html
在ubuntu下安装:
sudo apt-get install libcgal-dev
安装后的路径:
注意安装这个步骤安装后,boost,CGAL,gmp,mpfr头文件都在/usr/include目录下。
boost,gmp,mpfr库文件都在/usr/lib/x86_64-linux-gnu目录下。CGAL5.0及以后版本只有头文件没有库文件
头文件路径: /usr/include/CGAL
库文件路径: /usr/lib/x86_64-linux-gnu
教程 Hello World
原文地址:https://doc.cgal.org/latest/Manual/tutorial_hello_world.html
本教程适用于了解 C++ 并具有几何算法基础知识的 CGAL 新手。第一部分展示如何定义点和线段类,以及如何对其应用几何谓词。本节进一步提高了人们的认识,即使用浮点数作为坐标时存在严重问题。在第二部分中,您将遇到一个典型的 CGAL 函数,它计算 2D 凸包。第三部分展示了Traits类的含义,第四部分解释了概念和模型的概念。
1 三点一线
在第一个示例中,我们演示了如何构造一些点和一段,并对它们执行一些基本操作。
所有 CGAL 头文件都位于子目录中include/CGAL。所有 CGAL 类和函数都在命名空间中CGAL。类以大写字母开头,全局函数以小写字母开头,常量全部大写。物体的尺寸用后缀表示。
几何基元,如点类型,是在kernel中定义的。我们为第一个示例选择的内核使用double精度浮点数作为该点的笛卡尔坐标。
除了类型之外,我们还看到诸如三点方向测试之类的谓词,以及诸如距离和中点计算之类的*结构。*谓词具有一组离散的可能结果,而构造则产生一个数字或另一个几何实体。
文件 Kernel_23/points_and_segment.cpp
#include <iostream>
#include <CGAL/Simple_cartesian.h>
typedef CGAL::Simple_cartesian<double> Kernel;
typedef Kernel::Point_2 Point_2;
typedef Kernel::Segment_2 Segment_2;
int main()
{Point_2 p(1,1), q(10,10); //构造点std::cout << "p = " << p << std::endl;std::cout << "q = " << q.x() << " " << q.y() << std::endl;//两点之间的距离std::cout << "sqdist(p,q) = "<< CGAL::squared_distance(p,q) << std::endl;Segment_2 s(p,q); //构造直线Point_2 m(5, 9);std::cout << "m = " << m << std::endl;//点到直线的距离std::cout << "sqdist(Segment_2(p,q), m) = "<< CGAL::squared_distance(s,m) << std::endl;std::cout << "p, q, and m ";switch (CGAL::orientation(p,q,m)){case CGAL::COLLINEAR:std::cout << "are collinear\n"; //共线break;case CGAL::LEFT_TURN:std::cout << "make a left turn\n"; //逆时针break;case CGAL::RIGHT_TURN:std::cout << "make a right turn\n"; //顺时针break;}std::cout << " midpoint(p,q) = " << CGAL::midpoint(p,q) << std::endl;return 0;
}
正如下一个示例所示,用浮点数处理几何图形可能会令人惊讶。
文件 Kernel_23/surprising.cpp
#include <iostream>
#include <CGAL/Simple_cartesian.h>
typedef CGAL::Simple_cartesian<double> Kernel;
typedef Kernel::Point_2 Point_2;
int main()
{{Point_2 p(0, 0.3), q(1, 0.6), r(2, 0.9); //结果不共线std::cout << (CGAL::collinear(p,q,r) ? "collinear\n" : "not collinear\n");}{Point_2 p(0, 1.0/3.0), q(1, 2.0/3.0), r(2, 1); //结果不共线std::cout << (CGAL::collinear(p,q,r) ? "collinear\n" : "not collinear\n");}{Point_2 p(0,0), q(1, 1), r(2, 2); //结果共线std::cout << (CGAL::collinear(p,q,r) ? "collinear\n" : "not collinear\n");}return 0;
}
阅读代码,我们可以假设它会打印三次“共线”。然而实际输出如下:
不共线
不共线
共线
这是因为这些分数不能表示为双精度数,并且共线性测试将在内部计算 3x3 矩阵的行列式,该行列式接近但不等于 0,因此前两个测试的非共线性。
执行左转的点可能会发生类似的情况,但由于行列式计算期间的舍入误差,这些点似乎是共线的,或者执行右转。
如果您必须确保以完全精度解释您的数字,您可以使用执行精确谓词和提取结构的 CGAL 内核。
文件 Kernel_23/exact.cpp
#include <iostream>
#include <CGAL/Exact_predicates_exact_constructions_kernel.h>
#include <sstream>
typedef CGAL::Exact_predicates_exact_constructions_kernel Kernel;
typedef Kernel::Point_2 Point_2;
int main()
{Point_2 p(0, 0.3), q, r(2, 0.9);{q = Point_2(1, 0.6); //结果不共线std::cout << (CGAL::collinear(p,q,r) ? "collinear\n" : "not collinear\n"); }{std::istringstream input("0 0.3 1 0.6 2 0.9");input >> p >> q >> r; //结果共线std::cout << (CGAL::collinear(p,q,r) ? "collinear\n" : "not collinear\n");}{q = CGAL::midpoint(p,r); //结果共线std::cout << (CGAL::collinear(p,q,r) ? "collinear\n" : "not collinear\n");}return 0;
}
这是输出,您可能仍然会感到惊讶。
不共线
共线
共线
在第一个块中,点仍然不共线,原因很简单,您看到的文本坐标会变成浮点数。当它们转换为任意精度有理数时,它们精确地表示浮点数,但不是文本!
这在第二个块中有所不同,它对应于从文件中读取数字。然后直接从字符串构造任意精度有理数,以便它们准确地表示文本。
在第三个块中,您会看到中点构造的构造是精确的,正如内核类型的名称所暗示的那样。
在许多情况下,您将拥有“精确”的浮点数,即它们是由某些应用程序计算或从传感器获取的。它们不是字符串“0.1”或动态计算为“1.0/10.0”,而是一个全精度浮点数。如果它们被输入到不进行构造的算法,则可以使用提供精确谓词但不精确构造的内核。一个这样的例子是凸包算法,我们将在下一节中看到。输出是输入的子集,算法仅比较坐标并执行方向测试。
乍一看,执行精确谓词和构造的内核似乎是完美的选择,但性能要求或有限的内存资源使其并非如此。此外,对于许多算法来说,进行精确的构造是无关紧要的。例如,表面网格简化算法通过将边缘折叠到边缘的中点来迭代地收缩边缘。
大多数 CGAL 包都会解释它们应该使用或支持哪种内核。
2 点序列的凸包
本节中的所有示例都计算一组点的 2D 凸包。我们展示了算法将其输入作为表示一系列点的开始/结束迭代器对,并将结果(在示例中为凸包上的点)写入输出迭代器。
2.1 内置数组中的点的凸包
在第一个示例中,我们有一个由五个点组成的数组作为输入。由于这些点的凸包是输入的子集,因此提供一个用于存储具有相同大小的结果的数组是安全的。
文件 Convex_hull_2/array_convex_hull_2.cpp
#include <iostream>
#include <CGAL/Exact_predicates_inexact_constructions_kernel.h>
#include <CGAL/convex_hull_2.h>
typedef CGAL::Exact_predicates_inexact_constructions_kernel K;
typedef K::Point_2 Point_2;
int main()
{Point_2 points[5] = { Point_2(0,0), Point_2(10,0), Point_2(10,10), Point_2(6,5), Point_2(4,1) };Point_2 result[5];Point_2 *ptr = CGAL::convex_hull_2( points, points+5, result );std::cout << ptr - result << " points on the convex hull:" << std::endl;for(int i = 0; i < ptr - result; i++){std::cout << result[i] << std::endl;}return 0;
}
我们在上一节中已经看到 CGAL 附带了多个内核。由于凸包算法仅对输入点的坐标和方向进行比较,因此我们可以选择提供精确谓词但不提供精确几何构造的内核。
凸包函数采用三个参数,即输入的起始指针和结束指针,以及结果数组的起始指针。该函数将指针返回到结果数组中,正好位于最后写入的凸包点后面,因此指针差异告诉我们凸包上有多少个点。
2.2 向量中点的凸包
在第二个示例中,我们将内置数组替换为std::vector标准模板库的数组。
文件 Convex_hull_2/vector_convex_hull_2.cpp
#include <CGAL/Exact_predicates_inexact_constructions_kernel.h>
#include <CGAL/convex_hull_2.h>
#include <vector>
typedef CGAL::Exact_predicates_inexact_constructions_kernel K;
typedef K::Point_2 Point_2;
typedef std::vector<Point_2> Points;
int main()
{Points points, result;points.push_back(Point_2(0,0));points.push_back(Point_2(10,0));points.push_back(Point_2(10,10));points.push_back(Point_2(6,5));points.push_back(Point_2(4,1));CGAL::convex_hull_2( points.begin(), points.end(), std::back_inserter(result) );std::cout << result.size() << " points on the convex hull" << std::endl;return 0;
}
我们将一些点放入向量中,调用类push_back()的方法std::vector。
然后我们调用凸包函数。前两个参数points.begin()和points.end()是迭代器,它们是指针的泛化:它们可以取消引用和递增。凸包函数是通用的,因为它将任何可以取消引用和递增的内容作为输入。
第三个参数是结果写入的位置。在前面的示例中,我们提供了指向已分配内存的指针。这种指针的泛化是输出迭代器,它允许递增并向取消引用的迭代器赋值。在此示例中,我们从一个空向量开始,该向量根据需要增长。因此,我们不能简单地传递它result.begin(),而是传递一个由辅助函数生成的输出迭代器std::back_inserter(result)。该输出迭代器在递增时不执行任何操作,而是调用result.push_back(..)赋值。
如果您了解 STL(标准模板库),那么上面的内容就很有意义,因为这就是 STL 将算法与容器解耦的方式。如果您不了解STL,您最好先熟悉一下它的基本思想。
3 关于内核和特征类
在本节中,我们将展示如何表达必须满足的要求,以便类似的函数convex_hull_2()可以与任意点类型一起使用。
如果您查看该函数convex_hull_2()和其他 2D 凸包算法的手册页,您会发现它们有两个版本。在我们到目前为止看到的示例中,该函数采用两个用于输入点范围的迭代器和一个用于写入结果的输出迭代器。第二个版本有一个附加的模板参数Traits和一个此类型的附加参数。
template<class InputIterator , class OutputIterator , class Traits >
OutputIterator
convex_hull_2(InputIterator first,InputIterator beyond,OutputIterator result,const Traits & ch_traits)
典型的凸包算法使用哪些几何基元?当然,这取决于算法,所以让我们考虑什么可能是最简单有效的算法,即所谓的“Graham/Andrew Scan”。该算法首先从左到右对点进行排序,然后通过从排序列表中逐个添加点来增量构建凸包。为此,它至少必须了解某种点类型,应该知道如何对这些点进行排序,并且必须能够评估三重点的方向。
这就是模板参数的用武之地Traits。因为ch_graham_andrew()它必须提供以下嵌套类型:
Traits::Point_2Traits::Less_xy_2Traits::Left_turn_2Traits::Equal_2
你可以猜到,Left_turn_2负责方向测试,而 则Less_xy_2用于对点进行排序。这些类型必须满足的要求已与该概念一起完整记录ConvexHullTraits_2。
这些类型被重新分组的原因很简单。另一种选择是使用相当冗长的函数模板,以及更长的函数调用。
template <class InputIterator, class OutputIterator, class Point_2, class Less_xy_2, class Left_turn_2, class Equal_2>
OutputIterator
ch_graham_andrew( InputIterator first,InputIterator beyond,OutputIterator result);
有两个明显的问题:什么可以用作此模板参数的参数?为什么我们有模板参数?
为了回答第一个问题,CGAL概念的任何Kernel模型都提供了该概念所需的内容ConvexHullTraits_2
至于第二个问题,考虑一个我们想要计算投影到平面上的 3D 点的凸包的应用程序yz。使用该类Projection_traits_yz_3是对前面示例的一个小修改。
文件 Convex_hull_2/convex_hull_yz.cpp
#include <iostream>
#include <iterator>
#include <CGAL/Exact_predicates_inexact_constructions_kernel.h>
#include <CGAL/Projection_traits_yz_3.h>
#include <CGAL/convex_hull_2.h>
typedef CGAL::Exact_predicates_inexact_constructions_kernel K3;
typedef CGAL::Projection_traits_yz_3<K3> K;
typedef K::Point_2 Point_2;
int main()
{std::istream_iterator< Point_2 > input_begin( std::cin );std::istream_iterator< Point_2 > input_end;std::ostream_iterator< Point_2 > output( std::cout, "\n" );CGAL::convex_hull_2( input_begin, input_end, output, K() );return 0;
}
另一个示例是关于用户定义的点类型,或来自 CGAL 之外的第三方库的点类型。将点类型与该点类型所需的谓词放在类的范围内,您就可以convex_hull_2()使用这些点来运行。
最后,让我们解释一下为什么将一个traits对象传递给凸包函数?它将允许使用更通用的投影特征对象来存储状态,例如,如果投影平面由方向给出,则该方向在类中是硬连线的Projection_traits_yz_3。
4 概念和模型
在上一节中,我们写道:CGAL概念的任何**模型都提供了该概念所需的内容。 Kernel``ConvexHullTraits_2
概念是对类型的一组要求,即它具有某些嵌套类型、某些成员函数或带有某些以该类型为基础的自由函数*。**概念的模型*是满足概念要求的类。
我们来看看下面的函数。
template <typename T>
T
duplicate(T t)
{return t;
}
如果你想用一个类来实例化这个函数C,这个类至少必须提供一个复制构造函数,我们说这个类C必须是一个模型CopyConstructible。单例类不能满足此要求。
另一个例子是函数:
template <typename T>
T& std::min(const T& a, const T& b)
{return (a<b)?a:b;
}
operator<(..)仅当为用作 as 的类型定义时,此函数才会编译T,并且我们说该类型必须是LessThanComparable的模型。
具有所需自由函数的概念的一个示例是HalfedgeListGraphCGAL 包CGAL 和 Boost Graph Library。为了成为HalfedgeListGraph类的模型G,必须有全局函数halfedges(const G&)等。
具有所需特征类的概念的一个示例是InputIterator。对于模型来说,InputIterator类的专门化std::iterator_traits必须存在(或者通用模板必须适用)。
5 进一步阅读
我们还推荐 Addison-Wesley 的 Nicolai M. Josuttis 所著的标准教科书“The C++ Standard Library, A Tutorial and Reference”,或 Matthew H. Austern 所著的“Generic Planning and the STL”,介绍 STL 及其概念和概念。楷模。
CGAL 的其他资源包括教程的其余部分以及https://www.cgal.org/上的用户支持页面。
原文链接:1. cgal在ubuntu下的安装及Hello World的测试_cgal ubuntu-CSDN博客
相关文章:
CGAL在ubuntu下的安装及Hello World的测试
ubuntu下的安装 CGAL安装 参考地址:https://doc.cgal.org/latest/Manual/usage.html 在ubuntu下安装: sudo apt-get install libcgal-dev 安装后的路径: 注意安装这个步骤安装后,boost,CGAL,gmp,mpfr头文件都在/usr/include目录下。 boost,gmp,mpfr库文件都在/…...
VIM命令常用
一、启动vim 以:和/开头的命令都有历史纪录,可以首先键入:或/然后按上下箭头来选择某个历史命令。 在命令行窗口中输入以下命令即可 vim 直接启动vim vim filename 打开vim并创建名为filename的文件 二、文件命令 打开单个文件vim file同时打开多个文件vim file1 …...
STM32单片机实战开发笔记-I2C通讯总线【wulianjishu666】
嵌入式单片机开发实战例程合集: 链接:https://pan.baidu.com/s/11av8rV45dtHO0EHf8e_Q0Q?pwd28ab 提取码:28ab I2C模块测试 功能描述 I2C总线接口连接微控制器和串行I2C总线。它提供多主机功能,控制所有I2C总线特定的时序&am…...
区块链 | NFT 水印:Review on Watermarking Techniques(一)
🍍原文:Review on Watermarking Techniques Aiming Authentication of Digital Image Artistic Works Minted as NFTs into Blockchains 1 应用于 NFT 的水印技术 常见的水印技术类型可以分为: 可见 v i s i b l e \mathsf{visible} visi…...
Python设计模式 - 单例模式
定义 单例模式是一种创建型设计模式, 其主要目的是确保一个类只有一个实例, 并提供一个全局访问点来访问该实例。 结构 应用场景 资源管理:当需要共享某个资源时,例如数据库连接、线程池、日志对象等,可以使用单例模…...
AI日报:干翻AI PC!苹果M4芯片首发;GoEnhance可生成粘土风格视频;DeepSeek-V2模型已在魔搭社区开源
欢迎来到【AI日报】栏目!这里是你每天探索人工智能世界的指南,每天我们为你呈现AI领域的热点内容,聚焦开发者,助你洞悉技术趋势、了解创新AI产品应用。 新鲜AI产品点击了解:AIbase - 智能匹配最适合您的AI产品和网站 1、干翻AI …...
cmake进阶:目标属性
一. 简介 前面学习了 cmake 的一些目录属性,本文来学习 cmake的一些 目标属性。 目标属性,顾名思义就是目标对应的属性。 二. cmake进阶:目标属性 目标属性,顾名思义就是目标对应的属性。 cmake的所有目标属性可以通过如下网址…...
uniapp0基础编写安卓原生插件和调用第三方jar包和编写语音播报插件之使用jar包插件
前言 如果你不会编写安卓插件,你可以先看看我之前零基础的文章(uniapp0基础编写安卓原生插件和调用第三方jar包和编写语音播报插件之零基础编写安卓插件), 我们使用第三方包,jar包编写安卓插件 开始 把依赖包,放到某个模块的/libs目录(myTestPlug/libs) 还要到build…...
恢复数据,电脑数据恢复详细操作指南(4个方法)
“我经常会把很多重要的文件都保存在电脑上,但今天在清理电脑时好像误删了一些数据,有没有比较好用的数据恢复方法可以分享一下呢?请大家给我推荐几个吧!” 随着电脑的普及,我们越来越多地将重要数据存储在电脑中。然而…...
make SGX_MODE=SW
make SGX_MODESW...
【毕业设计】基于微信小程序的校园快递平台系统设计与实现
1.项目介绍 如今社会上各行各业,都喜欢用自己行业的专属软件工作,互联网发展到这个时候,人们已经发现离不开了互联网。新技术的产生,往往能解决一些老技术的弊端问题。因为传统校园快递平台系统信息管理难度大,容错率…...
SWAT模型【建模方法、实例应用、高级进阶技能】实践
第一部分:SWAT模型实践部分 一、SWAT模型及应用介绍 1.1 面源污染概要 1.2 SWAT模型及应用 1.3 SWAT模型原理 1.4 SWAT模型输入文件 1.5 ArcGIS与SWAT关系 二、SWAT模型中GIS必备技术 2.1 GIS软件平台 2.2 ArcGIS10.6安装和注意事项 2.3 ArcGIS入门 2.…...
远动通讯屏功能和作用
远动通讯屏功能和作用 首先大家要先了解,什么叫远动通讯?远动通讯是电力系统指用于远程通信和远程控制的设备。它主要采集电发场站的电气运行参数与远程调度监控中心进行数据交互,并接收调度中心远程的指令控制。提高电力系统的运行效率和可靠…...
Dashboard 安装部署
Dashboard 安装部署 Dashboard 安装部署 一:下载 二:部署步骤 1.镜像下载及导入 国内直接拉外网镜像会失败,可在境外下载镜像 查看 deployment 里的镜像版本 Dashboard Deploymentcontainers:- name: kubernetes-dashboardimage: k8s.g…...
idea Maven 插件 项目多环境打包配置
背景 不同环境的配置文件不一样,打包方式也有差异 1. 准备配置文件 这里 local 为本地开发环境 可改为 dev 名称自定义 test 为测试环境 prod 为生产环境 根据项目业务自行定义 application.yml 配置: spring:profiles:#对应pom中的配置active: spring.…...
密室逃脱游戏-第12届蓝桥杯省赛Python真题精选
[导读]:超平老师的Scratch蓝桥杯真题解读系列在推出之后,受到了广大老师和家长的好评,非常感谢各位的认可和厚爱。作为回馈,超平老师计划推出《Python蓝桥杯真题解析100讲》,这是解读系列的第58讲。 密室逃脱游戏&…...
ES6-自学01
调用方法读取文件:如果失败就throw抛出err,成功则抛出data 2.使用promise封装,如果失败就改变状态为 reject(err) 如果成功就 resolve(返回成功的值) ,然后then,就可以获取返回的值,值toString()方法来把…...
PyQt5批量生成Checkbox及批量检查Checkbox的勾选状态
批量生成Checkbox并添加到TableWidget中 for i in range(10):checkbox_i QCheckBox(fCheckbox_{i}) # 生成Checkbox并命名为Checkbox_iself.ui_1.tableWidget_1.setCellWidget(i,1,checkbox_i) 批量检查勾选状态 # 批量生成Checkbox并存入列表 list_Checkbox_1 [] for …...
如何获得一个Oracle 23ai数据库(Virtual Appliance)
准确的说,是Oracle 23ai Free Developer版,因为企业版目前只在云上(OCI和Azure)和ECC上提供。 方法包括3种,本文介绍第1种: Virtual ApplianceRPM安装Docker 从此处下载虚拟机。 可以看到虚拟机需要4G内…...
跟TED演讲学英文:What moral decisions should driverless cars make by Iyad Rahwan
What moral decisions should driverless cars make? Link: https://www.ted.com/talks/iyad_rahwan_what_moral_decisions_should_driverless_cars_make Speaker: Iyad Rahwan Date: September 2016 文章目录 What moral decisions should driverless cars make?Introduct…...
生成xcframework
打包 XCFramework 的方法 XCFramework 是苹果推出的一种多平台二进制分发格式,可以包含多个架构和平台的代码。打包 XCFramework 通常用于分发库或框架。 使用 Xcode 命令行工具打包 通过 xcodebuild 命令可以打包 XCFramework。确保项目已经配置好需要支持的平台…...
UDP(Echoserver)
网络命令 Ping 命令 检测网络是否连通 使用方法: ping -c 次数 网址ping -c 3 www.baidu.comnetstat 命令 netstat 是一个用来查看网络状态的重要工具. 语法:netstat [选项] 功能:查看网络状态 常用选项: n 拒绝显示别名&#…...
关于iview组件中使用 table , 绑定序号分页后序号从1开始的解决方案
问题描述:iview使用table 中type: "index",分页之后 ,索引还是从1开始,试过绑定后台返回数据的id, 这种方法可行,就是后台返回数据的每个页面id都不完全是按照从1开始的升序,因此百度了下,找到了…...
深入浅出深度学习基础:从感知机到全连接神经网络的核心原理与应用
文章目录 前言一、感知机 (Perceptron)1.1 基础介绍1.1.1 感知机是什么?1.1.2 感知机的工作原理 1.2 感知机的简单应用:基本逻辑门1.2.1 逻辑与 (Logic AND)1.2.2 逻辑或 (Logic OR)1.2.3 逻辑与非 (Logic NAND) 1.3 感知机的实现1.3.1 简单实现 (基于阈…...
根目录0xa0属性对应的Ntfs!_SCB中的FileObject是什么时候被建立的----NTFS源代码分析--重要
根目录0xa0属性对应的Ntfs!_SCB中的FileObject是什么时候被建立的 第一部分: 0: kd> g Breakpoint 9 hit Ntfs!ReadIndexBuffer: f7173886 55 push ebp 0: kd> kc # 00 Ntfs!ReadIndexBuffer 01 Ntfs!FindFirstIndexEntry 02 Ntfs!NtfsUpda…...
【UE5 C++】通过文件对话框获取选择文件的路径
目录 效果 步骤 源码 效果 步骤 1. 在“xxx.Build.cs”中添加需要使用的模块 ,这里主要使用“DesktopPlatform”模块 2. 添加后闭UE编辑器,右键点击 .uproject 文件,选择 "Generate Visual Studio project files",重…...
GraphRAG优化新思路-开源的ROGRAG框架
目前的如微软开源的GraphRAG的工作流程都较为复杂,难以孤立地评估各个组件的贡献,传统的检索方法在处理复杂推理任务时可能不够有效,特别是在需要理解实体间关系或多跳知识的情况下。先说结论,看完后感觉这个框架性能上不会比Grap…...
RushDB开源程序 是现代应用程序和 AI 的即时数据库。建立在 Neo4j 之上
一、软件介绍 文末提供程序和源码下载 RushDB 改变了您处理图形数据的方式 — 不需要 Schema,不需要复杂的查询,只需推送数据即可。 二、Key Features ✨ 主要特点 Instant Setup: Be productive in seconds, not days 即时设置 :在几秒钟…...
新版NANO下载烧录过程
一、序言 搭建 Jetson 系列产品烧录系统的环境需要在电脑主机上安装 Ubuntu 系统。此处使用 18.04 LTS。 二、环境搭建 1、安装库 $ sudo apt-get install qemu-user-static$ sudo apt-get install python 搭建环境的过程需要这个应用库来将某些 NVIDIA 软件组件安装到 Je…...
Docker环境下安装 Elasticsearch + IK 分词器 + Pinyin插件 + Kibana(适配7.10.1)
做RAG自己打算使用esmilvus自己开发一个,安装时好像网上没有比较新的安装方法,然后找了个旧的方法对应试试: 🚀 本文将手把手教你在 Docker 环境中部署 Elasticsearch 7.10.1 IK分词器 拼音插件 Kibana,适配中文搜索…...
