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

PlanLLM: 首个支持开放词汇与封闭集任务的跨模态视频程序规划框架

2025年1月7号,由杨德杰、赵子敬、刘洋联合提出PlanLLM,一种基于可微调大型语言模型(LLM)的跨模态联合学习框架,用于解决视频程序规划任务。通过引入LLM增强规划模块和互信息最大化模块,PlanLLM突破了现有方法依赖封闭集标签和固定语义描述的限制,实现了对新步骤和任务的泛化能力。

该方法在COIN、CrossTask、NIV三个基准数据集上取得显著性能提升,展现了其在弱监督学习中的有效性。

一、研究背景

视频程序规划(给定视频起始和目标状态生成动作步骤序列)是具身AI的关键能力。早期方法依赖全监督视觉-文本标注,但成本高昂。近年弱监督方法兴起,仅需文本动作序列,通过编码器-解码器结构学习隐式视觉空间。引入LLM的方法(如SCHEMA)利用语言模型扩展动作描述,提升解码性能,但仍受限于封闭集标签和固定语义。

目前遇到困难和挑战:

1、封闭集标签泛化不足:现有方法将动作步骤编码为one-hot向量,无法处理开放世界场景(无法生成未见过的新步骤)。

2、常识与实例语义冲突:基于世界常识的固定动作描述(如“粉碎食物”)可能与具体视觉状态(如“粉碎机中的鹰嘴豆泥”)不符,导致推理错误。

3、语义关系未被利用:步骤间的语义关联(如“剥蒜”与“放入碎浆机”)未被显式建模,限制任务连贯性。

二、让我们一起来看一下PlanLLM

PlanLLM 框架主要由三个部分组成:特征提取、互信息最大化和LLM增强规划

1、输入阶段

PlanLLM的输入包括视频的起始状态(start state)和目标状态(goal state)的视频帧。这些视频帧分别代表了任务的初始条件和最终目标,例如在烹饪场景中,起始状态可能是“原材料”,目标状态可能是“成品菜肴”。

2、特征提取(Feature Extraction)

视觉特征提取:使用预训练的视觉编码器(如S3D网络)对起始状态和目标状态的视频帧进行编码,提取样本特定的视觉信息。这些视觉嵌入能够捕捉到视频帧中的关键视觉细节。

文本特征提取:使用预训练的语言编码器(如CLIP)对动作步骤描述进行编码,提取世界级别的常识信息。这些文本嵌入能够提供关于动作步骤的语义背景。

3、互信息最大化(Mutual Information Maximization)

视觉状态交互:通过自注意力机制处理视觉状态嵌入,增强视觉状态之间的上下文关联。

Q-Former框架:将处理后的视觉嵌入和文本嵌入输入到Q-Former架构中,生成跨模态的联合步骤嵌入。这一过程通过最大化视觉和语言嵌入之间的互信息,将样本特定的视觉信息与世界级别的文本常识结合。

互信息最大化损失:通过优化视觉-语言对比(VLC)损失和视觉-语言匹配(VLM)损失,进一步强化视觉和语言嵌入之间的关联。

4. LLM增强规划(LLM Enhanced Planning)

自由形式规划输出:将联合步骤嵌入和视觉状态嵌入输入到大型语言模型(LLM)中,LLM的解码器直接生成自由形式的动作步骤描述。这种自由形式的输出能够处理开放词汇的任务,即生成未在训练集中出现的新动作步骤。

两阶段训练方案:首先固定LLM,训练特征提取和互信息最大化模块,以对齐视觉和语言嵌入到LLM的输入空间;然后通过LoRA技术微调LLM,优化规划任务。

5. 输出阶段

PlanLLM能够处理两种类型的任务:

封闭集合动作步骤分类:对于传统的动作步骤分类任务,LLM增强的步骤解码分支输出动作步骤的ID。

开放词汇规划任务:对于开放词汇的规划任务,LLM生成自由形式的规划输出,并将生成的描述和新的文本动作步骤标签编码为向量。然后通过计算描述和标签之间的相似性,检索出最匹配的动作步骤标签。

整个工作流程通过跨模态联合学习,充分利用了视觉信息和语言模型的强大推理能力,实现了从视频帧到动作步骤序列的高效规划。

三、让我们一起展望PlanLLM 应用场景

比如:在我们汽车零部件组装车间

我们有智能机器人,它的工作是在汽车零部件组装车间里,将各种零部件组装成一个完整的汽车座椅。这个任务听起来很复杂,但有了PlanLLM,机器人就能轻松搞定。

1、任务目标

机器人的目标是将一堆散件(比如座椅框架、海绵垫、皮套等)组装成一个完整的汽车座椅。起始状态是这些零部件散落在工作台上,目标状态是一个组装好的座椅。

2、PlanLLM的工作过程

首先,机器人通过摄像头获取工作台上的视频帧,这些视频帧会被送到PlanLLM的视觉特征提取模块。PlanLLM会分析这些视频帧,识别出当前的起始状态(散件状态)和目标状态(完整座椅)。然后,PlanLLM的文本特征提取模块会根据任务要求,提取相关的动作步骤描述,比如“拿起座椅框架”“安装海绵垫”“套上皮套”等。

接下来,PlanLLM的互信息最大化模块会将视觉信息和文本描述结合起来,生成一个综合的动作步骤规划。这个规划会告诉机器人,先拿起座椅框架,然后把海绵垫放在框架上,接着套上皮套,最后固定好所有部件。

最后,PlanLLM的LLM增强规划模块会根据生成的规划,进一步细化每个动作步骤。比如,它会告诉机器人,拿起海绵垫的时候,要小心不要变形,套皮套的时候,要注意对齐缝线等。

3、机器人的执行

机器人接收到PlanLLM生成的详细规划后,就开始按照规划一步步执行。它先用机械臂拿起座椅框架,然后精准地把海绵垫放在框架上,接着小心翼翼地套上皮套,最后用螺丝刀固定好所有部件。整个过程就像一个熟练的工人一样,有条不紊地完成任务。

PlanLLM在智能机器人和自动化任务中的巨大潜力。它不仅能让机器人完成复杂的任务,还能让机器人更加智能、灵活和高效。

整理文章中三个常用的教学视频数据集

数据集:CrossTask

数据集地址:CrossTask|教育技术数据集|视频分析数据集

数据集:COIN

数据集地址:COIN Dataset|视频分析数据集|数据集数据集

数据集:NIV

数据集地址:敬请期待

相关文章:

PlanLLM: 首个支持开放词汇与封闭集任务的跨模态视频程序规划框架

2025年1月7号,由杨德杰、赵子敬、刘洋联合提出PlanLLM,一种基于可微调大型语言模型(LLM)的跨模态联合学习框架,用于解决视频程序规划任务。通过引入LLM增强规划模块和互信息最大化模块,PlanLLM突破了现有方…...

使用服务器部署DeepSeek-R1模型【详细版】

文章目录 引言deepseek-r1IDE或者终端工具算力平台体验deepseek-r1模型总结 引言 在现代的机器学习和深度学习应用中,模型部署和服务化是每个开发者面临的重要任务。无论是用于智能推荐、自然语言处理还是图像识别,如何高效、稳定地将深度学习模型部署到…...

TCP三次握手、四次挥手过程及原理

TCP 协议简述 TCP 提供面向有连接的通信传输,面向有连接是指在传送数据之前必须先建立连接,数据传送完成后要释放连接。 无论哪一方向另一方发送数据之前,都必须先在双方之间建立一条连接。在TCP/IP协议中,TCP协议提供可靠的连接…...

AWS App2Container

AWS App2Container 是一个由 Amazon Web Services (AWS) 提供的工具,它帮助用户将现有的传统应用程序(特别是运行在虚拟机或物理服务器上的应用)转化为容器化的应用,从而可以在 AWS 上更方便地部署、管理和扩展。具体来说&#xf…...

《一》深入了解软件测试工具 JMeter-自我介绍

深入了解软件测试工具 JMeter 在当今的数字化时代,软件已经渗透到我们生活的方方面面,从日常使用的手机应用到复杂的企业级系统,软件的质量和性能直接影响着用户体验和业务的成功。而软件测试作为保障软件质量的关键环节,其中的性…...

(算法竞赛)图论+DFS深搜——图的dfs遍历1

题目描述 给定一个无向图,包含 n 个顶点(编号为 1 到 n)和 e 条边。要求从顶点 1 开始进行深度优先搜索(DFS),并按照访问顺序输出遍历结果。注意:当存在多个邻接点时,优先访问编号较…...

二级C语言题解:十进制转其他进制、非素数求和、重复数统计

目录 一、程序填空📝 --- 十进制转其他进制 题目📃 分析🧐 二、程序修改🛠️ --- 非素数求和 题目📃 分析🧐 三、程序设计💻 --- 重复数统计 题目📃 分析🧐 前言…...

快速搭建GPU环境 | docker、k8s中使用gpu

目录 一、裸机部署安装 GPU Driver安装 CUDA Toolkit测试 二、Docker 环境安装 nvidia-container-toolkit配置使用该 runtime 三、 k8s 环境安装 device-plugin安装 GPU 监控 一、裸机部署 裸机中要使用上 GPU 需要安装以下组件: GPU DriverCUDA Toolkit 二者的关…...

基于docker搭建Kafka集群,使用KRaft方式搭建,摒弃Zookeeper

KAFKA基于docker使用KRaft进行集群搭建 环境:已成功搭建kafka服务 可点击链接跳转至安装kafka-3.8.0版本 并启用SASL认证 教程 使用基于Zookeeper方式搭建集群教程 kafka-3.8.0版本 并启用SASL认证 教程 搭建kafka-ui可视化工具 192.168.2.91 192.168.2.92 192…...

分库分表详解

分库分表确实有垂直切分和水平切分两种,针对给出的描述,以下是对这两种切分方式的详细分析和验证: 垂直切分 描述:将表按照功能模块、关系密切程度划分出来,部署到不同的库上。 分析:垂直切分主要是根据…...

【重生之学习C语言----水仙花篇】

目录 ​编辑 ----------------------------------------begin-------------------------------------- 一、什么是水仙花数? 二、问题分析 确定数字的位数:计算输入数字的位数 n。 分离每一位数字:例如将 153 分离为 1、5、3。 计算各…...

云端IDE如何重定义开发体验

豆包 MarsCode 是一个集成了AI功能的编程助手和云端IDE,旨在提高开发效率和质量。它支持多种编程语言和IDE,提供智能代码补全、代码解释、单元测试生成和问题修复等功能,同时具备AI对话视图和开发工具。 豆包 MarsCode 豆包 MarsCode 编程助…...

模拟实现string类

目录 一.构造与析构函数 二.基础小功能的实现 1.clear 2.c_str 3外部对私有的查看 三.实现string的迭代器 四.string的增删查改 1.push_back尾插 1.1reserve扩容 1.2尾插 3.运算符重载 4.insert在任意位置插入 5.erase删除 5.1npos的处理 5.2函数的实现 6.find查…...

使用一个大语言模型对另一个大语言模型进行“调教”

使用一个大语言模型对另一个大语言模型进行“调教”(通常称为微调或适配),是一种常见的技术手段,用于让目标模型更好地适应特定的任务、领域或风格。以下是基于搜索结果整理的详细步骤和方法: 1.准备工作 安装必要的…...

十二、Docker Compose 部署 SpringCloudAlibaba 微服务

一、部署基础服务 0、项目部署结构 项目目录结构如下: /home/zhzl_hebei/ ├── docker-compose.yml └── geochance-auth/└── Dockerfile└── geochance-auth.jar └── geochance-system/└── Dockerfile└── geochance-system.jar └── geochance-gateway/…...

深入浅出:旋转变位编码(RoPE)在现代大语言模型中的应用

在现代大语言模型(LLMs)中,位置编码是一个至关重要的组件。无论是 Meta 的 LLaMA 还是 Google 的 PaLM,这些模型都依赖于位置编码来捕捉序列中元素的顺序信息。而旋转变位编码(RoPE) 作为一种创新的位置编码…...

C# 使用ADO.NET访问数据全解析

.NET学习资料 .NET学习资料 .NET学习资料 在 C# 的应用开发中,数据访问是极为关键的部分。ADO.NET作为.NET 框架下用于数据访问的核心技术,能够帮助开发者便捷地与各类数据源进行交互。本文将深入剖析ADO.NET,带你掌握使用 C# 通过ADO.NET访…...

趣解单词,实现快速记忆

英文单词 love,是“爱”的意思: love v./n.爱;喜欢;热爱;爱情;心爱的人 那什么是爱呢?love,首字母为l,是一根绳子,ve-通f,love通life&#xff0…...

TEMU电池法规:CE-battery法规指令主要检测以下这三样,汞、镉、铅

TEMU电池法规:CE-battery法规的指令主要检测以下这三样,汞、镉、铅有害物质: CE-Battery认证是依据欧盟新电池法规EU 2023/1542指令进行的电池安全检测报告。该认证针对所有类别的电池,包括内置或添加到产品中的电池,…...

vscode 如何通过Continue引入AI 助手deepseek

第一步: 在deepseek 官网上注册账号,得到APIKeys(deepseek官网地址) 创建属于自己的APIKey,然后复制这个key,(注意保存自己的key)! 第二步: 打开vscode,在插件市场安装Continue插件, 点击设置,添加deepseek模型,默认…...

【大数据技术】搭建完全分布式高可用大数据集群(Scala+Spark)

搭建完全分布式高可用大数据集群(Scala+Spark) scala-2.13.16.tgzspark-3.5.4-bin-without-hadoop.tgz注:请在阅读本篇文章前,将以上资源下载下来。 写在前面 本文主要介绍搭建完全分布式高可用集群Spark的详细步骤。 注意: 统一约定将软件安装包存放于虚拟机的/softwa…...

【翻译+论文阅读】DeepSeek-R1评测:粉碎GPT-4和Claude 3.5的开源AI革命

目录 一、DeepSeek-R1 势不可挡二、DeepSeek-R1 卓越之处三、DeepSeek-R1 创新设计四、DeepSeek-R1 进化之路1. 强化学习RL代替监督微调学习SFL2. Aha Moment “啊哈”时刻3. 蒸馏版本仅采用SFT4. 未来研究计划 部分内容有拓展,部分内容有删除,与原文会有…...

前缀和练习——洛谷P8218:求区间和

题目: 这道题很简单&#xff0c;直接根据题目无脑套公式 代码&#xff1a; #include<bits/stdc.h> using namespace std; const int N 1e5 9; using ll long long; ll a[N], perfix[N]; int main() {ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);//取消同步输…...

uv 安装包

是的&#xff0c;你可以使用 uv 来安装 Python 包。uv 是一个高性能的 Python 包安装器和解析器&#xff0c;由 astral.sh 团队开发&#xff0c;旨在替代 pip 和 pip-tools&#xff0c;提供更快的包安装体验。 ### 如何使用 uv 安装包 1. **安装 uv**&#xff1a; 如果你还…...

【机器学习】训练(Training)、验证(Validation)和测试(Testing)

机器学习中训练(Training)、验证(Validation)和测试(Testing)这三个阶段的作用和关系。 1. 训练阶段 (Training) - 使用训练集数据来训练模型 - 模型通过学习训练数据的特征和模式来调整其内部参数 - 这个阶段模型会不断优化以减少预测误差 - 通常使用最大的数据集比例&…...

3. k8s二进制集群之负载均衡器高可用部署

Haproxy 和 Keepalived安装Haproxy配置文件准备Keepalived配置及健康检查启动Haproxy & Keepalived服务继续上一篇文章《K8S集群架构及主机准备》,下面介绍负载均衡器搭建过程 Haproxy 和 Keepalived安装 在负载均衡器两个主机上安装即可 apt install haproxy keepalived…...

C++游戏开发实战:从引擎架构到物理碰撞

&#x1f4dd;个人主页&#x1f339;&#xff1a;一ge科研小菜鸡-CSDN博客 &#x1f339;&#x1f339;期待您的关注 &#x1f339;&#x1f339; 1. 引言 C 是游戏开发中最受欢迎的编程语言之一&#xff0c;因其高性能、低延迟和强大的底层控制能力&#xff0c;被广泛用于游戏…...

MSPFN 代码复现

1、环境配置 conda create -n MSPFN python3.9 conda activate MSPFN pip install opencv-python pip install tensorflow pip install tqdm pip install matplotlib2、train 2.1 创建数据集 2.1.1 数据集格式 |--rainysamples |--file1&#xff1a; |--file2:|--fi…...

[c语言日寄]浮点数在内存中的储存

【作者主页】siy2333 【专栏介绍】⌈c语言日寄⌋&#xff1a;这是一个专注于C语言刷题的专栏&#xff0c;精选题目&#xff0c;搭配详细题解、拓展算法。从基础语法到复杂算法&#xff0c;题目涉及的知识点全面覆盖&#xff0c;助力你系统提升。无论你是初学者&#xff0c;还是…...

PySpark学习笔记5-SparkSQL

sparkSql的数据抽象有两种。 一类是data set适用于java和Scala 一类是data frame适用于java&#xff0c;Scala&#xff0c;python 将r d d转换为data frame #方式一 df spark.createDataFrame(rdd,schema[name,age]) #方式二 schema Structtype(). add(id,integertype(),nu…...

支持 APQP (先期产品质量策划) 的软件系统-汽车电子行业专用研发管理信息化平台

支持 APQP (先期产品质量策划) 的软件系统 在制造业竞争白热化的当下&#xff0c;产品质量已然成为企业立足市场的核心竞争力。APQP&#xff08;先期产品质量策划&#xff09;作为保障产品质量的关键流程&#xff0c;贯穿于产品从概念萌生到最终交付的整个生命周期&#xff0c…...

配置@别名路径,把@/ 解析为 src/

路径解析配置 webpack 安装 craco npm i -D craco/craco 项目根目录下创建文件 craco.config.js &#xff0c;内容如下 const path require(path) module.exports {webpack: {// 配置别名alias: {// 约定&#xff1a; 使用 表示src文件所在路径: path.resolve(__dirname,src)…...

以为是响应式对象丢失导致数据没有回显

背景&#xff1a;之前ruoyi生成的vue2代码&#xff0c; <el-form ref“form”&#xff0c;后面我改成vue3的写法&#xff0c;没有实例化form&#xff0c; 在vue3中是需要定义const form ref(); 导致点击了修改后&#xff0c;页面弹框显示出来&#xff0c;数据没有回显。 一直…...

【汇编语言】直接定址表(二)—— 「代码‘导航员’:直接定址表的功能与应用」

文章目录 前言1. 直接定址表1.1 问题引入&#xff08;一&#xff09;—— 为算法清晰而查表1.2 分析与解决问题1.2.1 两个十六进制表示一个字节1.2.2 得到数值对应的数码字符1.2.2.1 最粗暴的方法——比较1.2.2.2 使用映射关系来解决1.2.2.3 存在的问题及解决 1.3 得到子程序1.…...

05vue3实战-----配置项目代码规范

05vue3实战-----配置项目代码规范 1.集成editorconfig配置2.使用prettier工具2.1安装prettier2.2配置.prettierrc文件&#xff1a;2.3创建.prettierignore忽略文件2.4VSCode需要安装prettier的插件2.5VSCod中的配置2.6测试prettier是否生效 3.使用ESLint检测3.1VSCode需要安装E…...

不含101的数

不含101的数 真题目录: 点击去查看 E 卷 200分题型 题目描述 小明在学习二进制时&#xff0c;发现了一类不含101的数&#xff1a; 将数字用二进制表示&#xff0c;不能出现 101 。 现在给定一个整数区间 [l,r] &#xff0c;请问这个区间包含了多少个不含 101 的数&#xff…...

Linux/C高级(精讲)----shell结构语句、shell数组

shell脚本 功能性语句 test 可测试对象三种&#xff1a;字符串 整数 文件属性 每种测试对象都有若干测试操作符 1&#xff09;字符串的测试&#xff1a; s1 s2 测试两个字符串的内容是否完全一样 s1 ! s2 测试两个字符串的内容是否有差异 -z s1 测试s1 字符串的长度是…...

基于微信小程序的消防隐患在线举报系统设计与实现(LW+源码+讲解)

专注于大学生项目实战开发,讲解,毕业答疑辅导&#xff0c;欢迎高校老师/同行前辈交流合作✌。 技术范围&#xff1a;SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容&#xff1a;…...

java基础2(黑马)

一、变量里的数据在计算机中的存储原理 1.二进制 .二进制&#xff1a;只有0、1&#xff0c; 按照逢二进一的方式表示数据。 十进制数字11转换为&#xff1a;1011 方法&#xff1a;除二取余法 计算机中表示数据的最小单元&#xff0c;一个字节&#xff08;Byte&#xff0c;简…...

计算机中数值表示:原码、反码、补码与移码

1 前言 计算机科学中&#xff0c;数字的表示方式至关重要&#xff0c;因为计算机内部只能识别处理二进制数据。为了在计算机中实现对整数的表示&#xff0c;提出了多种数值编码方式&#xff0c;其中最常用的是原码、反码、补码和移码。 2 原码 2.1 原码的定义 原码(Signed …...

1.8 组合模式(Composite Pattern)

定义 组合模式&#xff08;Composite Pattern&#xff09; 是一种结构型设计模式&#xff0c;它将对象组合成树形结构以表示“部分-整体”的层次结构。组合模式让客户端可以以相同的方式对待单个对象和对象集合。组合模式使得客户可以统一处理树形结构中的单个对象和对象的集合…...

QFileDialog::getOpenFileName(this,“文件对话框“,“.“,“c++ files(*.cpp);;“); 文件对话框显示乱码

在使用 QFileDialog::getOpenFileName 时&#xff0c;如果文件对话框显示乱码&#xff0c;通常是因为编码问题。Qt 默认使用 UTF-8 编码&#xff0c;但如果你的系统或源代码文件的编码不一致&#xff0c;可能会导致乱码。 以下是几种可能的解决方法&#xff1a; 1. 确保源代码…...

【C语言系列】深入理解指针(5)

深入理解指针&#xff08;5&#xff09; 一、sizeof和strlen的对比1.1sizeof1.2strlen1.3sizeof和strlen的对比 二、数组和指针笔试题解析2.1 一维数组2.2 字符数组2.2.1代码1&#xff1a;2.2.2代码2&#xff1a;2.2.3代码3&#xff1a;2.2.4代码4&#xff1a;2.2.5代码5&#…...

为什么使用nohup 和 启动的python脚本,日志没有在nohup.out中

当你使用 nohup 和 & 启动 Python 脚本时&#xff0c;输出通常会被重定向到 nohup.out 文件&#xff0c;但是有几个原因可能导致日志没有出现在这个文件中&#xff1a; Python 程序的输出被重定向了&#xff1a; 如果你的 Python 脚本中使用了 sys.stdout 或 sys.stderr 进…...

MySQL的存储引擎对比(InnoDB和MyISAM)

InnoDB 特点&#xff1a; 事务支持&#xff1a;InnoDB 是 MySQL 默认的事务型存储引擎&#xff0c;支持 ACID&#xff08;原子性、一致性、隔离性、持久性&#xff09;事务。行级锁定&#xff1a;支持行级锁&#xff0c;能够并发执行查询和更新操作&#xff0c;提升多用户环境…...

uniapp访问django目录中的图片和视频,2025[最新]中间件访问方式

新建中间件, middleware.py 匹配,以/cover_image/ 开头的图片 匹配以/episode_video/ 开头的视频 imageSrc: http://192.168.110.148:8000/cover_image/12345/1738760890657_mmexport1738154397386.jpg, videoSrc: http://192.168.110.148:8000/episode_video/12345/compres…...

Python递归复习题

寒假打卡第二十一天&#xff0c;当前mit6.100L进度(16/26) &#xff0c;今天补一下递归复习题。 问题1&#xff1a;编写一个递归程序来计算正和n&#xff08;n-2&#xff09;&#xff08;n-4&#xff09;的整数&#xff08;直到且不包括n-x<0&#xff09; def sum_series(n…...

2025 年前端开发趋势展望,开启新征程

新年伊始&#xff0c;作为一名深耕 Web 前端开发领域的博主&#xff0c;我迫不及待地想和大家分享我对 2025 年前端开发趋势的洞察。过去一年里&#xff0c;前端领域的技术创新和变革令人目不暇接&#xff0c;而新的一年&#xff0c;更是充满无限可能。 框架与工具的持续演进 …...

90,【6】攻防世界 WEB Web_php_unserialize

进入靶场 进入靶场 <?php // 定义一个名为 Demo 的类 class Demo { // 定义一个私有属性 $file&#xff0c;默认值为 index.phpprivate $file index.php;// 构造函数&#xff0c;当创建类的实例时会自动调用// 接收一个参数 $file&#xff0c;用于初始化对象的 $file 属…...

Redis --- 使用GEO实现经纬度距离计算

什么是GEO&#xff1f; Spring Boot 项目中可以通过 Spring Data Redis 来使用 Redis GEO 功能&#xff0c;主要通过 RedisTemplate 和 GeoOperations 接口来操作地理位置数据。 Service public class GeoService {Autowiredprivate RedisTemplate<String, Object> red…...