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

【计算机视觉】深度解析MediaPipe:谷歌跨平台多媒体机器学习框架实战指南

在这里插入图片描述

深度解析MediaPipe:谷歌跨平台多媒体机器学习框架实战指南

    • 技术架构与设计哲学
      • 核心设计理念
      • 系统架构概览
    • 核心功能与预构建解决方案
      • 1. 人脸检测
      • 2. 手势识别
      • 3. 姿势估计
      • 4. 物体检测与跟踪
    • 实战部署指南
      • 环境配置
        • 基础环境准备
        • 获取源码
      • 构建第一个示例(手部追踪)
        • 桌面端运行
        • Android端部署
      • 自定义计算图开发
    • 关键技术深度解析
      • 1. 高效同步机制
      • 2. GPU加速实现
      • 3. 模型优化技术
    • 常见问题与解决方案
      • 1. GPU兼容性问题
      • 2. 时间戳同步错误
      • 3. Android构建失败
    • 学术研究与技术演进
      • 基础论文
      • 最新进展
    • 性能优化策略
      • 1. 计算图分析工具
      • 2. 关键路径优化
      • 3. 内存优化技巧
    • 应用场景与展望
      • 典型应用场景
      • 未来发展方向

MediaPipe是谷歌开源的一个跨平台多媒体机器学习框架,它能够将各种感知模型(如人脸检测、手势识别、姿势估计等)构建成模块化流水线(pipeline)。本文将从技术架构、核心功能到实际部署,全面剖析这一强大的多媒体处理框架。

技术架构与设计哲学

核心设计理念

MediaPipe的架构设计体现了几个关键原则:

  1. 模块化流水线:将复杂任务分解为可重用的组件(称为"calculator")
  2. 跨平台支持:统一API支持Android、iOS、桌面和Web
  3. 实时性能:优化延迟敏感型应用场景
  4. 端侧部署:专注设备端(on-device)推理,减少云端依赖

系统架构概览

  • 底层:平台特定的硬件加速层(如Android NN API、Metal等)
  • 中间层:核心框架(图执行引擎、同步机制等)
  • 上层:预构建解决方案(如Face Detection、Hand Tracking等)

核心功能与预构建解决方案

1. 人脸检测

基于BlazeFace论文的轻量级模型,可在移动设备上实现实时检测:

  • 检测速度:200+ FPS(Pixel 3手机)
  • 关键点:6个面部标志点(用于锚定)

2. 手势识别

采用两阶段检测+跟踪策略:

  1. Palm Detection:检测手掌边界框
  2. Hand Landmark:21个三维关键点定位

3. 姿势估计

BlazePose模型提供33个全身关键点:

  • 支持三种精度模式(轻量、完整、高精度)
  • 典型延迟:<10ms(GPU加速)

4. 物体检测与跟踪

高效SSD模型配合MTCNN跟踪器:

  • 支持动态切换检测与跟踪模式
  • 特征:自动处理遮挡和离开画面情况

实战部署指南

环境配置

基础环境准备
# 安装Bazel构建工具(Linux示例)
sudo apt install apt-transport-https curl gnupg
curl -fsSL https://bazel.build/bazel-release.pub.gpg | gpg --dearmor > bazel.gpg
sudo mv bazel.gpg /etc/apt/trusted.gpg.d/
echo "deb [arch=amd64] https://storage.googleapis.com/bazel-apt stable jdk1.8" | sudo tee /etc/apt/sources.list.d/bazel.list
sudo apt update && sudo apt install bazel
获取源码
git clone https://github.com/google/mediapipe.git
cd mediapipe

构建第一个示例(手部追踪)

桌面端运行
# 安装OpenCV和FFmpeg
sudo apt install libopencv-core-dev libopencv-highgui-dev libopencv-calib3d-dev libopencv-features2d-dev libopencv-imgproc-dev libopencv-video-dev# 构建并运行
bazel build -c opt --define MEDIAPIPE_DISABLE_GPU=1 mediapipe/examples/desktop/hand_tracking:hand_tracking_cpu# 使用webcam运行
GLOG_logtostderr=1 bazel-bin/mediapipe/examples/desktop/hand_tracking/hand_tracking_cpu \--calculator_graph_config_file=mediapipe/graphs/hand_tracking/hand_tracking_desktop_live.pbtxt
Android端部署
  1. 安装Android Studio和NDK
  2. 配置WORKSPACE文件中的Android SDK/NDK路径
  3. 构建APK:
    bazel build -c opt --config=android_arm64 mediapipe/examples/android/src/java/com/google/mediapipe/apps/handtrackinggpu:handtrackinggpu
    
  4. 安装到设备:
    adb install bazel-bin/mediapipe/examples/android/src/java/com/google/mediapipe/apps/handtrackinggpu/handtrackinggpu.apk
    

自定义计算图开发

典型的MediaPipe计算图定义(.pbtxt):

# 示例:简单视频直通管道
input_stream: "input_video"
output_stream: "output_video"node {calculator: "PassThroughCalculator"input_stream: "input_video"output_stream: "output_video"
}

自定义Calculator实现骨架:

#include "mediapipe/framework/calculator_framework.h"namespace mediapipe {class MyCustomCalculator : public CalculatorBase {public:static absl::Status GetContract(CalculatorContract* cc) {// 定义输入输出流cc->Inputs().Index(0).SetAny();cc->Outputs().Index(0).SetSameAs(&cc->Inputs().Index(0));return absl::OkStatus();}absl::Status Open(CalculatorContext* cc) override {// 初始化代码return absl::OkStatus();}absl::Status Process(CalculatorContext* cc) override {// 处理逻辑Packet input = cc->Inputs().Index(0).Value();cc->Outputs().Index(0).AddPacket(input);return absl::OkStatus();}
};REGISTER_CALCULATOR(MyCustomCalculator);}  // namespace mediapipe

关键技术深度解析

1. 高效同步机制

MediaPipe采用基于时间戳的同步策略:

  • 每个数据包携带时间戳
  • 计算节点可以定义输入策略:
    cc->SetInputStreamHandler("ImmediateInputStreamHandler");
    
  • 支持多种同步模式(严格排序、最近邻匹配等)

2. GPU加速实现

典型的OpenGL ES计算节点配置:

node {calculator: "GpuBufferToImageFrameCalculator"input_stream: "input_video"output_stream: "output_video"node_options: {[type.googleapis.com/mediapipe.GpuBufferToImageFrameCalculatorOptions] {flip_vertically: true}}
}

3. 模型优化技术

MediaPipe模型普遍采用以下优化:

  • 量化感知训练:8位整数量化
  • 剪枝与蒸馏:减少参数数量
  • 专用操作符:深度可分离卷积等

常见问题与解决方案

1. GPU兼容性问题

现象Failed to compile shaderGL_INVALID_OPERATION

解决方案

  • 检查设备OpenGL ES版本(要求≥3.1)
  • 回退到CPU模式:
    bazel build --define MEDIAPIPE_DISABLE_GPU=1 ...
    
  • 更新显卡驱动

2. 时间戳同步错误

现象Timestamp mismatch警告

解决方法

  • 检查计算图的时间戳传播策略
  • 添加同步节点:
    node {calculator: "SyncInputStreamHandler"input_stream: "video"input_stream: "audio"output_stream: "synced_video"
    }
    

3. Android构建失败

现象NDK not configuredAPI level mismatch

解决步骤

  1. 确认WORKSPACE配置:
    android_ndk_repository(name = "androidndk",path = "/path/to/ndk",api_level = 29)
    
  2. 检查构建命令:
    bazel build --config=android_arm64 ...
    

学术研究与技术演进

基础论文

  1. BlazeFace

    • Bazarevsky V, et al. “BlazeFace: Sub-millisecond Neural Face Detection on Mobile GPUs.” CVPR Workshop 2019
  2. MediaPipe Hands

    • Zhang F, et al. “MediaPipe Hands: On-device Real-time Hand Tracking.” CV4ARVR Workshop 2020
  3. BlazePose

    • Bazarevsky V, et al. “BlazePose: On-device Real-time Body Pose Tracking.” arXiv:2006.10204

最新进展

  1. 3D对象检测:融合IMU数据的空间感知
  2. 多模态融合:结合语音与手势的交互系统
  3. 自监督学习:减少对标注数据的依赖

性能优化策略

1. 计算图分析工具

# 生成性能分析报告
bazel build -c opt --define MEDIAPIPE_PROFILER=1 ...

报告包含:

  • 每个节点的执行时间
  • 内存使用情况
  • 线程利用率

2. 关键路径优化

识别瓶颈节点后:

  • 启用GPU加速:
    node_options: {[type.googleapis.com/mediapipe.GpuCalculatorOptions] {use_advanced_gpu_api: true}
    }
    
  • 调整批处理大小
  • 简化模型结构

3. 内存优化技巧

  • 重用内存缓冲区:
    cc->Outputs().Index(0).Add(new_buffer, cc->InputTimestamp());
    
  • 及时释放资源:
    cc->Outputs().Index(0).Close();
    

应用场景与展望

典型应用场景

  1. 增强现实:实时面部特效
  2. 健身指导:动作纠正与计数
  3. 无障碍交互:手势控制界面
  4. 智能监控:行为分析

未来发展方向

  1. 更轻量级模型:面向低端设备优化
  2. 多模态协同:视觉+语音+传感器融合
  3. 自适应计算:动态调整计算精度
  4. 联邦学习支持:隐私保护下的模型进化

MediaPipe作为谷歌在设备端AI领域的重要布局,将持续推动移动端和边缘计算场景下多媒体处理技术的发展。通过其模块化设计和跨平台能力,开发者可以快速构建复杂的多媒体处理流水线,而无需深入底层优化细节。随着AI应用的普及,MediaPipe这类高效框架的价值将愈发凸显。

相关文章:

【计算机视觉】深度解析MediaPipe:谷歌跨平台多媒体机器学习框架实战指南

深度解析MediaPipe&#xff1a;谷歌跨平台多媒体机器学习框架实战指南 技术架构与设计哲学核心设计理念系统架构概览 核心功能与预构建解决方案1. 人脸检测2. 手势识别3. 姿势估计4. 物体检测与跟踪 实战部署指南环境配置基础环境准备获取源码 构建第一个示例&#xff08;手部追…...

血管造影正常≠心脏没事!无创技术破解心肌缺血漏诊困局

提到冠心病检查&#xff0c;很多人会纠结&#xff1a;到底哪项检查能更全面地反映病情、精准得出结论&#xff1f; 从准确性来说&#xff0c;冠脉 CT 与冠脉造影是临床常用手段。二者虽然能够清晰显示血管大冠脉是否存在狭窄或斑块&#xff0c;但二者本质上有相同的 “局限性”…...

ClickHouse副本集群

每个节点安装clickhouse服务安装 zookeeper每个节点修改 /etc/clickhouse-server/config.xml 863行左右 <remote_servers><default><shard><replica><host>18.1.13.30</host><port>9000</port></replica><replica&g…...

Go 语言中的 `os.Truncate` 函数详解

os.Truncate 是 Go 标准库中用于修改文件大小的函数。下面我将全面解析这个函数的功能、用法和注意事项。 函数签名 func Truncate(name string, size int64) error核心功能 os.Truncate 用于&#xff1a; 将指定文件截断或扩展到指定大小处理符号链接时会操作链接指向的实…...

java 加入本地lib jar处理方案

在 Java 项目中&#xff0c;如果想将本地的 .jar 文件加入到 Maven 构建流程中&#xff0c;有以下几种常见方式可以选择&#xff1a; ✅ 推荐方式&#xff1a;将本地 JAR 安装到本地 Maven 仓库 这是最佳实践。通过 mvn install:install-file 命令把JAR 包安装到本地仓库&…...

【Git】之【Get】TortoiseGit不显示状态图标

参考&#xff1a;Windows中解决TortoiseGit 不显示状态图标的问题 实测可行。 打开注册表 计算机\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\ShellIconOverlayIdentifiers路径 确保TortoiseGit文件夹在前几个&#xff0c;可以重命名将其他无关…...

[Linux网络_68] 转发 | 路由(Hop by Hop) | IP的分片和组装

目录 1.再谈网络转发 2.路由 举个例子 3.分片和组装 IP 层 [Linux#67][IP] 报头详解 | 网络划分 | CIDR无类别 | DHCP动态分配 | NAT转发 | 路由器 1.再谈网络转发 我们在上一篇文章中知道了路由器的功能有&#xff1a; 转发DHCP | 组建局域网NAT 组建局域网功能表现&…...

Sce2DriveX: 用于场景-到-驾驶学习的通用 MLLM 框架——论文阅读

《Sce2DriveX: A Generalized MLLM Framework for Scene-to-Drive Learning》2025年2月发表&#xff0c;来自中科院软件所和中科院大学的论文。 端到端自动驾驶直接将原始传感器输入映射到低级车辆控制&#xff0c;是Embodied AI的重要组成部分。尽管在将多模态大语言模型&…...

论文笔记-多智能体任务分配:动态智能空间中的拍卖与抢占机制

《IET Cyber-Systems and Robotics》出版中国电信研究院 Wei Li、Zhenhua Liu 团队与山东大学 Jianhang Shang 和 Guoliang Liu 团队的研究成果&#xff0c;文章题为“Multiagent Task Allocation for Dynamic Intelligent Space: Auction and Preemption With Ontology Knowle…...

数据库day-08

一、实验名称和性质 删除修改数据 验证 设计 二、实验目的 1&#xff0e;掌握数据操作-- 删除、修改&#xff1b; 三、实验的软硬件环境要求 硬件环境要求&#xff1a; PC机&#xff08;单机&#xff09; 使用的软件名称、版本号以及模块&#xff1a; Windows 10&#x…...

.NET 平台详解

什么是 .NET&#xff1f; .NET 是一个由微软开发的跨平台、开源的开发者平台&#xff0c;用于构建多种类型的应用程序。它提供了一致的编程模型和丰富的类库&#xff0c;支持多种编程语言&#xff08;如 C#、F#、Visual Basic&#xff09;。 .NET 的核心组成 运行时环境 CLR …...

高效 Transformer 的综述

20年9月来自谷歌研究的论文“Efficient Transformers: A Survey”。 文章主要针对一类X-former模型&#xff0c;例如Reformer, Linformer, Performer, Longformer为例&#xff0c;这些对原版Transformer做了改进&#xff0c;提高了其计算和内存的效率。 self-attention是Tran…...

java每日精进 4.29【框架之自动记录日志并插入如数据库流程分析】

1.日志记录注解&#xff08;LogRecord&#xff09; Repeatable(LogRecords.class) Target({ElementType.METHOD, ElementType.TYPE}) Retention(RetentionPolicy.RUNTIME) Inherited Documented public interface LogRecord {String success();String fail() default "&q…...

HarmonyOS NEXT 诗词元服务项目开发上架全流程实战(二、元服务与应用APP签名打包步骤详解)

在HarmonyOS应用开发过程中&#xff0c;发布应用到应用市场是一个重要的环节。没经历过的童鞋&#xff0c;首次对HarmonyOS的应用签名打包上架可能感觉繁琐。需要各种秘钥证书生成和申请&#xff0c;混在一起分不清。其实搞清楚后也就那会事&#xff0c;各个文件都有它存在的作…...

java的多线程

文章目录 创建线程什么是线程&#xff1f;什么是多线程&#xff1f;如何在程序中创建出多条线程&#xff1f;方式一&#xff1a;继承Thread类方式二&#xff1a;实现Runnable接口方式三&#xff1a;实现Callable接口 三种创建方式的对比 线程的常用方法Thread提供的常用方法Thr…...

CSS--图片链接水平居中展示的方法

原文网址&#xff1a;CSS--图片链接居中展示的方法-CSDN博客 简介 本文介绍CSS图片链接水平居中展示的方法。 图片链接 问题复现 源码 <html xml:lang"cn" lang"cn"><head><meta http-equiv"Content-Type" content"te…...

【计算机视觉】目标检测:深度解析YOLOv5:下一代实时目标检测框架实战指南

深度解析YOLOv5&#xff1a;下一代实时目标检测框架实战指南 技术演进与架构设计YOLO系列发展脉络YOLOv5核心架构1. 骨干网络&#xff08;Backbone&#xff09;2. 特征融合&#xff08;Neck&#xff09;3. 检测头&#xff08;Head&#xff09; 环境配置与快速开始硬件要求建议详…...

CentOS NFS共享目录

最近遇到一个问题&#xff0c;一台CentOS7应用服务器上的服务需要访问另外一台CentOS7应用服务器上的文件&#xff0c;然后传输文件给第三方。想到windows系统之间有文件共享的功能&#xff0c;Linux系统之间是否也有类似的文件共享功能呢&#xff1f; NFS NFS代表Network Fil…...

「国产嵌入式仿真平台:高精度虚实融合如何终结Proteus时代?」——从教学实验到低空经济,揭秘新一代AI赋能的产业级教学工具

引言&#xff1a;从Proteus到国产平台的范式革新 在高校嵌入式实验教学中&#xff0c;仿真工具的选择直接影响学生的工程能力培养与创新思维发展。长期以来&#xff0c;Proteus作为经典工具占据主导地位&#xff0c;但其设计理念已难以满足现代复杂系统教学与国产化技术需求。…...

[随笔] 升级uniapp旧项目的vue、pinia、vite、dcloudio依赖包等

汇总 # 升级uniapp项目dcloudio整体依赖&#xff0c;建议执行多次 # 会顺带自动更新/升级vue的版本 npx dcloudio/uvmlatest alpha# 检查 pinia 的最新版本 npm view pinia version# 更新项目 pinia 到最新版本 npm update pinia# 更新项目 pinia 到特定的版本 # 首先&#xf…...

C++学习:六个月从基础到就业——异常处理:机制与最佳实践

C学习&#xff1a;六个月从基础到就业——异常处理&#xff1a;机制与最佳实践 本文是我C学习之旅系列的第三十八篇技术文章&#xff0c;也是第二阶段"C进阶特性"的最后一篇&#xff0c;主要介绍C中的异常处理机制及其最佳实践。查看完整系列目录了解更多内容。 引言…...

【MongoDB篇】MongoDB的数据库操作!

目录 引言第一节&#xff1a;数据库的“诞生”——如何创建数据库&#xff1f;&#x1f914;第二节&#xff1a;数据库的“查阅”——看看我的数据库们&#xff01;&#x1f575;️‍♀️第三节&#xff1a;数据库的“切换”——我在哪个房间干活&#xff1f;➡️&#x1f6aa;…...

react-新建项目复用node_modules

每次新建定制时&#xff0c;前端都需要npm i来安装依赖&#xff0c;耗时长 失败多。 可以把这个bat文件放到新建分支的前端目录下&#xff0c;修改后双击bat文件运行&#xff0c;如果不需要添加修改依赖&#xff0c;无需运行npm i node_modules.bat里面的内容如下&#xff1a;…...

unity Orbbec Femto Bolt接入unity流程记录 AzureKinectExamples 插件 使用记录

奥比中光的深度相机Orbbec Femto Bolt是Microsoft的Azure Kinect DK的升级版&#xff0c;根据官网的文档配置环境遇到了一些问题&#xff0c;记录一下。 注意&#xff1a; 官网文档链接&#xff1a;Femto Bolt文档 1、首先连接相机到电脑USB3.0&#xff0c;接通电源&#xf…...

信息科技伦理与道德3-4:面临挑战

1 人机结合 1.1 人机结合的挑战 如何处理好人与机器的决策的关系&#xff1f;智能决策的不透明、不可解释性…出了问题该谁负责&#xff1f; 案例1&#xff1a;设想救护车调度系统造成混乱 某城市使用一个机器学习平台来进行城市里医院的救护车调度工作。起初&#xff0c;这个…...

对比测评:为什么AI编程工具需要 Rules 能力?

通义灵码 Project Rules 在开始体验通义灵码 Project Rules 之前&#xff0c;我们先来简单了解一下什么是通义灵码 Project Rules&#xff1f; 大家都知道&#xff0c;在使用 AI 代码助手的时候&#xff0c;有时候生成的代码不是自己想要的&#xff0c;或者说生成的代码采纳后…...

git学习之git常用命令

1. 初始化仓库 git init初始化一个新的 Git 仓库。 2. 克隆远程仓库 git clone <repository-url>从远程服务器克隆一个已有仓库到本地。 3. 配置用户名和邮箱 git config --global user.name "Your Name" git config --global user.email "youexampl…...

The Open Group 参加雷丁博物馆的数字革命展览

The Open Group 参加了雷丁博物馆的数字革命展览&#xff0c;庆祝雷丁市转型为数字中心60周年。 展览于3月18日&#xff08;星期二&#xff09;向公众开放&#xff0c;将持续至2025年12月24日。展览旨在纪念雷丁市令人惊叹的科技之旅&#xff0c;从1964年数字设备公司&#xff…...

Linux[配置vim]

Linux[配置vim] 我这里的环境是xshell8的虚拟机,Ubuntu 配置好了以后功能嘎嘎多 以下是为 Ubuntu 配置功能增强版 Vim 的详细步骤&#xff0c;包含代码高亮、插件管理、自动补全、文件导航等常用功能&#xff1a; 1. 安装最新版 Vim sudo apt update sudo apt install vim-g…...

【数据结构】图论存储结构深度解析:邻接多重表如何实现无向图O(1)删边?邻接矩阵/链表/十字链对比

邻接多重表 导读一、有向图的存储结构二、邻接多重表三、存储结构四、算法评价4.1 时间复杂度4.2 空间复杂度 五、四种存储方式的总结5.1 空间复杂度5.2 找相邻边5.3 删除边或结点5.4 适用于5.5 表示方式 六、图的基本操作结语 导读 大家好&#xff0c;很高兴又和大家见面啦&a…...

【AlphaFold2】Feature extraction:提取特征,为模型输入做准备|Datapipeline讲解

博主简介&#xff1a;努力学习的22级计算机科学与技术本科生一枚&#x1f338;博主主页&#xff1a; Yaoyao2024往期回顾&#xff1a;【深度学习】多头注意力机制的实现|pytorch每日一言&#x1f33c;: 学习成绩只是表象&#xff0c;而学习能力才是伴随一身的结果&#x1f33a;…...

Android 实现一个隐私弹窗

效果图如下&#xff1a; 1. 设置同意、退出、点击用户协议、点击隐私协议的函数参数 2. 《用户协议》、《隐私政策》设置成可点击的&#xff0c;且颜色要区分出来 res/layout/dialog_privacy_policy.xml 文件 <?xml version"1.0" encoding"utf-8"?&…...

第三方软件测试报告如何凭借独立公正与专业权威发挥关键作用?

在软件项目里&#xff0c;第三方软件测试报告起着极为关键的作用。第三方有着中立客观的立场。第三方具备专业能力。凭借这些&#xff0c;第三方能为软件质量评估提供可靠依据。下面要从不同方面介绍第三方软件测试报告。 独立公正性 第三方测试机构与软件开发方、使用方不存…...

QT控件 参考Qt的PIMPL设计模式实现使用QWidget控件绘制3D饼状图表和3D柱状图表,使用QChartView绘制圆柱体图表

整体绘制效果就是:Qt 实现3维饼状图 中的内容, 只不过我借鉴了Qt的PIMPL模式重新封装了整个实现过程 实现效果展示 目录导读 实现效果展示前言绘制3D饼状图表PIMPL模式设计类具体实现计算圆弧中心判断点是否在某个扇区中在私有类中绘制绘制3D柱状图表PIMPL模式设计类具体实现绘…...

Android Q允许低内存启用系统弹窗

如果SYSTEM_ALERT_WINDOW权限可用&#xff0c;则返回true。 *从Q开始&#xff0c;在低ram手机上禁用SYSTEM_ALERT_WINDOW。 vendor/mediatek/proprietary/packages/apps/MtkSettings/src/com/android/settings/Utils.java public static boolean isSystemAlertWindowEnabled(Co…...

Leetcode 3532. Path Existence Queries in a Graph I

Leetcode 3532. Path Existence Queries in a Graph I 1. 解题思路2. 代码实现 题目链接&#xff1a;3532. Path Existence Queries in a Graph I 1. 解题思路 这一题算是一个比较典型的DSU的题目&#xff0c;我们就是不断地根据前后节点的距离将其进行聚类&#xff0c;然后…...

AI Agent Protocols:现状、挑战与未来展望

一、引言 在当今人工智能飞速发展的时代&#xff0c;大语言模型&#xff08;LLMs&#xff09;的进步使得LLM智能体在各个行业得到了广泛的应用&#xff0c;如客户服务、内容生成、数据分析和医疗保健等领域。 然而&#xff0c;随着越来越多的LLM智能体被部署&#xff0c;一个…...

自动化立库/AGV物流仿真详细步骤

以下是一种可以在预算和周期内实现自动化立库及AGV 方案仿真分析的方法&#xff1a; 一、工具选择 软件工具FlexSim&#xff1a;这是一款流行的离散事件仿真软件。它具有直观的图形用户界面&#xff0c;通过简单的拖拽操作就可以构建自动化立库和 AGV 的模型。其内置的丰富的…...

【题解-Acwing】872. 最大公约数

题目:872. 最大公约数 题目描述 给定 n 对正整数 ai,bi,请你求出每对数的最大公约数。 输入 第一行包含整数 n。 接下来 n 行,每行包含一个整数对 ai,bi。 输出 输出共 n 行,每行输出一个整数对的最大公约数。 数据范围 1 ≤ n ≤ 105, 1 ≤ai, bi ≤ 2109 时空限…...

62.微服务保姆教程 (五) Seata--微服务分布式事务组件

Seata–微服务分布式事务组件 一、什么是分布式事务 1.什么是事务 事务指的是一个操作单元,在这个操作单元中的所有操作最终要保持一致的行为,要么所有操作都成功,要么所有的操作都被撤销。 2.本地事务 本地事务是指基于关系型数据库的事务,也称为传统事务。大多数场景…...

【算法练习】归并排序和归并分治

文章目录 1.归并排序1.1 递归版本1.2 非递归版本 2.归并分治2.1 计算数组的小和2.2 计算翻转对 1.归并排序 归并排序的核心步骤是&#xff1a; 拆分&#xff1a;将无序数组不断对半拆分成小块&#xff0c;直到每个小块只剩一个元素&#xff08;自然有序&#xff09;。 合并&a…...

从SOA到微服务:架构演进之路与实践示例

一、架构演进背景 在软件开发领域&#xff0c;架构风格随着业务需求和技术发展不断演进。从早期的单体架构&#xff0c;到面向服务架构(SOA)&#xff0c;再到如今的微服务架构&#xff0c;每一次变革都是为了解决当时面临的核心问题。 二、SOA架构解析 2.1 SOA核心概念 SOA&…...

vue+cesium线流动纹理

index.vue页面 <!--线流动纹理实现--> <template><div id"mapContainerFirst"></div> </template> <script lang"ts" setup> import { init as initPolylineTrailLinkMaterialProperty } from ./PolylineTrailLinkM…...

深度学习·经典模型·SwinTransformer

SwinTransformer 主要创新点&#xff1a;移动窗口&#xff0c;基于窗口的注意力计算 Patch Embedding 下采样打包为Pacth&#xff1a;可以直接使用Conv2d 也可以先打包后使用embedding映射。 Patch Merging 类似池化的操作,压缩图片大小&#xff0c;同时通道数增多&#xff…...

在开发板上如何处理curl: (60) SSL certificate problem

目录 引言 问题解析 解决方法 跳过证书验证 采用证书认证 结语 引言 最近一直推荐学生们在课程实验中使用curl及其libcurl。curl 是一个强大的命令行工具&#xff0c;用于在命令行中进行数据传输。它支持多种协议&#xff0c;如 HTTP、HTTPS、FTP、FTPS、SCP、SFTP 等。…...

Ansible 铸就 Linux 安全之盾(Ansible Builds Linux Security Shield)

Ansible 铸就 Linux 安全之盾&#xff1a;自动化基线检查与防护 在当今网络安全形势日益严峻的背景下&#xff0c;Linux 系统作为服务器和关键基础设施的核心&#xff0c;其安全防护显得尤为重要。Ansible 作为一款强大的自动化运维工具&#xff0c;能够帮助我们高效、可靠地实…...

字符串(格式化字符串字面值)进行输出

在 Python 中&#xff0c;print(fnew_obs:{new_obs}) 这种形式是使用 f 字符串&#xff08;格式化字符串字面值&#xff09; 进行输出&#xff0c;它可以打印 任何可转换为字符串的数据类型&#xff0c;并且支持在字符串中嵌入表达式。以下是详细说明&#xff1a; 1. 基本功能…...

微服务架构详解:从概念到实践

目录 前言1. 微服务架构概述1.1 什么是微服务&#xff1f;1.2 微服务的核心思想 2. 微服务的优势2.1 可扩展性2.2 高灵活性2.3 容错性和可靠性2.4 高效开发与部署 3. 微服务的挑战3.1 系统复杂性增加3.2 分布式事务和数据一致性3.3 部署和运维的复杂性 4. 微服务的实施与实践4.…...

激光驱鸟:以科技重构生态防护边界

技术原理 激光驱鸟装置的核心机制基于鸟类视觉系统特性。其发射的绿色激光束&#xff08;波长通常为532纳米&#xff09;处于鸟类视网膜敏感光谱范围内&#xff0c;当激光束在特定角度扫描时&#xff0c;会形成动态光斑干扰。鸟类视网膜中视锥细胞对绿色光的高敏感度使其产生应…...

【Python魔法方法(特殊方法)】

在 Python 中&#xff0c;许多运算符都可以进行重载&#xff0c;以下是一些常见运算符及其对应的魔法方法&#xff08;特殊方法&#xff09;&#xff1a; 算术运算符 加法 &#xff1a;__add__ 用于定义对象相加的行为。例如&#xff0c;当你对两个自定义类的实例使用 运算符…...