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

YOLO11解决方案之距离计算探索

概述

Ultralytics提供了一系列的解决方案,利用YOLO11解决现实世界的问题,包括物体计数、模糊处理、热力图、安防系统、速度估计、物体追踪等多个方面的应用。

测量两个物体之间的间距被称为特定空间内的距离计算,YOLO11使用两个边界框的中心点计算距离。

使用距离计算,可以提供计算机视觉任务中比较精确的空间定位,分析视频环境中的对象关系,通过监控移动物体之间的距离,使系统能够检测到潜在的碰撞,为自动驾驶或者交通监控等应用提供更好的空间场景理解能力。

演示代码

Ultralytics提供了演示代码,展示如何使用距离计算解决方案。

import cv2from ultralytics import solutionscap = cv2.VideoCapture("path/to/video.mp4")
assert cap.isOpened(), "Error reading video file"# Video writer
w, h, fps = (int(cap.get(x)) for x in (cv2.CAP_PROP_FRAME_WIDTH, cv2.CAP_PROP_FRAME_HEIGHT, cv2.CAP_PROP_FPS))
video_writer = cv2.VideoWriter("distance_output.avi", cv2.VideoWriter_fourcc(*"mp4v"), fps, (w, h))# Initialize distance calculation object
distancecalculator = solutions.DistanceCalculation(model="yolo11n.pt",  # path to the YOLO11 model file.show=True,  # display the output
)# Process video
while cap.isOpened():success, im0 = cap.read()if not success:print("Video frame is empty or processing is complete.")breakresults = distancecalculator(im0)print(results)  # access the outputvideo_writer.write(results.plot_im)  # write the processed frame.cap.release()
video_writer.release()
cv2.destroyAllWindows()  # destroy all opened windows

DistanceCalculation参数

基本参数

参数类型默认值说明
modelstrNoneUltralytics YOLO 模型文件的路径。

DistanceCalculation支持使用track参数:

参数类型默认值说明
trackerstr'botsort.yaml'指定要使用的跟踪算法, bytetrack.yamlbotsort.yaml.
conffloat0.3设置检测的置信度阈值;数值越低,跟踪的物体越多,但可能会出现误报。
ioufloat0.5设置交叉重叠 (IoU) 阈值,用于过滤重叠检测。
classeslistNone按类别索引筛选结果。例如 classes=[0, 2, 3] 只跟踪指定的类别(class在COCO数据集定义)。
verboseboolTrue控制跟踪结果的显示,提供被跟踪物体的可视化输出。
devicestrNone指定用于推理的设备(例如: cpu, cuda:00). 允许用户选择CPU 、特定GPU 或其他计算设备运行模型。

可视化参数:

参数类型默认值说明
showboolFalse如果 True在一个窗口中显示注释的图像或视频。有助于在开发或测试过程中提供即时视觉反馈。
line_widthNone or intNone指定边界框的线宽。如果 None则根据图像大小自动调整线宽,使图像更加清晰。
show_confboolTrue在标签旁显示每次检测的置信度得分。让人了解模型对每次检测的确定性。
show_labelsboolTrue在可视输出中显示每次检测的标签。让用户立即了解检测到的物体。

工作原理

DistanceCalculation 类的工作原理是跟踪视频帧中的物体,并计算所选边界框中心点之间的欧氏距离。演示程序运行时,鼠标点击断定两个边界框,系统将提取选定边界框的中心点,以像素为单位计算这些中心点之间的欧氏距离,对象之间用连线连接,并在图像上显示距离。

执行时使用 mouse_event_for_distance 方法来处理鼠标交互,允许用户根据需要选择对象和清除选择。 process 方法处理逐帧处理、跟踪物体和计算距离。

查看DistanceCalculation 类中的mouse_event_for_distance的代码:

def mouse_event_for_distance(self, event, x, y, flags, param):"""处理鼠标事件,在实时视频流中选择区域计算距离使用左键选择两个方框点击右键取消选择"""if event == cv2.EVENT_LBUTTONDOWN:self.left_mouse_count += 1if self.left_mouse_count <= 2:for box, track_id in zip(self.boxes, self.track_ids):if box[0] < x < box[2] and box[1] < y < box[3] and track_id not in self.selected_boxes:self.selected_boxes[track_id] = boxelif event == cv2.EVENT_RBUTTONDOWN:self.selected_boxes = {}self.left_mouse_count = 0

查看DistanceCalculation 类中的process的代码:

def process(self, im0):"""处理一个视频帧,计算两个选择的边界框之间的距离输出处理过的视频图片(叠加了距离数据)、跟踪物体的数量、像素距离"""self.extract_tracks(im0)  # Extract tracksannotator = SolutionAnnotator(im0, line_width=self.line_width)  # Initialize annotatorpixels_distance = 0# Iterate over bounding boxes, track ids and classes indexfor box, track_id, cls, conf in zip(self.boxes, self.track_ids, self.clss, self.confs):annotator.box_label(box, color=colors(int(cls), True), label=self.adjust_box_label(cls, conf, track_id))# 如果选定的框是被跟踪的,则更新if len(self.selected_boxes) == 2:for trk_id in self.selected_boxes.keys():if trk_id == track_id:self.selected_boxes[track_id] = boxif len(self.selected_boxes) == 2:#计算选择框的中心点坐标self.centroids.extend([[int((box[0] + box[2]) // 2), int((box[1] + box[3]) // 2)] for box in self.selected_boxes.values()])#计算两点间的欧氏距离pixels_distance = math.sqrt((self.centroids[0][0] - self.centroids[1][0]) ** 2 + (self.centroids[0][1] - self.centroids[1][1]) ** 2)annotator.plot_distance_and_line(pixels_distance, self.centroids)self.centroids = []  # Reset centroids for next frameplot_im = annotator.result()self.display_output(plot_im)  # Display output with base class functioncv2.setMouseCallback("Ultralytics Solutions", self.mouse_event_for_distance)# 返回处理过的图像和计算的指标return SolutionResults(plot_im=plot_im, pixels_distance=pixels_distance, total_tracks=len(self.track_ids))

效果展示

这里使用演示代码,在测试视频中,计算两辆车的距离。

在这里插入图片描述

随着车辆运动,其距离在不断变化。

在这里插入图片描述

需要注意的是,本方案的距离计算并不精确,它只是使用了平面数据,缺少物体间的深度信息(不能计算三维位置关系)。

相关文章:

YOLO11解决方案之距离计算探索

概述 Ultralytics提供了一系列的解决方案&#xff0c;利用YOLO11解决现实世界的问题&#xff0c;包括物体计数、模糊处理、热力图、安防系统、速度估计、物体追踪等多个方面的应用。 测量两个物体之间的间距被称为特定空间内的距离计算&#xff0c;YOLO11使用两个边界框的中心…...

OkHttp用法-Java调用http服务

特点&#xff1a;高性能&#xff0c;支持异步请求&#xff0c;连接池优化 官方文档&#xff1a;提供快速入门指南和高级功能&#xff08;如拦截器、连接池&#xff09;的详细说明&#xff0c;GitHub仓库包含丰富示例。 社区资源&#xff1a;中文教程丰富&#xff0c;GitHub高…...

c/c++中程序内存区域的划分

c/c程序内存分配的几个区域&#xff1a; 1.栈区&#xff1a;在执行函数时&#xff0c;函数内局部变量的存储单元都可以在栈上创建&#xff0c;函数执行结束时这些存储单元自动被释放&#xff0c;栈内存分配运算内置于处理器的指令集中&#xff0c;效率很高但是分配的内存容量有…...

‌JMeter聚合报告中的任务数和并发数区别

‌JMeter聚合报告中的任务数和并发数有本质的区别。‌ 任务数&#xff08;样本数&#xff09; 任务数或样本数是指在性能测试中发出的请求数量。例如&#xff0c;如果模拟20个用户&#xff0c;每个用户发送100次请求&#xff0c;那么总的任务数或样本数就是2000次请求‌ 并发…...

70、微服务保姆教程(十三)Docker容器详细讲义

一、关于Docker 1.1为什么要用docker? 随着开发的项目越来越复杂,软件越来越多,服务器越来越多,我们在开发和部署的时候会遇到很多问题,比如: 1.不同的应用程序可能会有不同的应用环境,比如Java开发的网站和php开发的网站依赖的软件就不一样,如果把他们依赖的软件都…...

2025年5月-信息系统项目管理师高级-软考高项-成本计算题

成本计算题挣值分析、成本计算题如何学?1、PV&#xff0c;EV&#xff0c;AC需要理解&#xff0c;根据题目给出的一些个条件需要求得这些值;2、CV&#xff0c;SV&#xff0c;CPI&#xff0c;SPI公式必须记住&#xff0c;需要根据求得的值判断项目的进度和成本的执行情况&#x…...

【BotSharp详细介绍——一步步实现MCP+LLM的聊天问答实例】

BotSharp详细介绍——一步步实现MCPLLM的聊天问答实例 一、MCP原理介绍二、创建BotSharp的项目&#xff0c;实现LLM推理机器人1、新建一个 解决方案&#xff0c;结构如下&#xff1a;2、先看下 MyWeatherPlugin3、创建MyWeatherMcpAPI 三、创建 MCP Server1、添加引用2、添加工…...

[Linux性能优化] 线程卡顿优化。Linux加入USB(HID)热插拔线程占用CPU优化。Linux中CPU使用率过高优化

文章目录 [Linux性能优化] 线程卡顿优化。一、问题定位&#xff1a;CPU 资源分析二、线程卡顿现场复现线程优化前图片线程优化后图片 [Linux性能优化] 线程卡顿优化。 一、问题定位&#xff1a;CPU 资源分析 线程卡顿通常与 CPU 资源竞争、线程调度异常相关&#xff0c;第一步…...

鸿蒙OSUniApp 开发的文件上传与下载功能#三方框架 #Uniapp

使用 UniApp 开发的文件上传与下载功能 前言 在移动应用开发中&#xff0c;文件上传与下载是非常常见且重要的功能需求。无论是上传用户头像、提交表单附件&#xff0c;还是下载资源文件、缓存图片&#xff0c;这些需求几乎存在于每一个成熟的应用中。UniApp 作为一个跨平台开…...

【MySQL】基础知识

MySQL(一)基础知识 MySQL 一、结构 1.客户端 2.服务器 分布式系统 二、存储 1.空间 1.1内存 1.1.1速度 1.1.2稳定性 1.1.3大小 1.1.4使用 1.2硬盘 1.2.1速度 1.2.2稳定性 1.2.3大小 1.2.4【Java学习】反射-CSDN博客 2.体系 表-数据库-服务器 3.特点 3.1…...

产品销量数据爬虫通用模板

最近遇到各行各业的需要爬取销售数据&#xff0c;每次写一个教程相对麻烦&#xff0c;所以思前考后我还是觉得写一个通用模板更适合。所以模板需要足够的灵活性&#xff0c;让用户能够自定义选择器。比如&#xff0c;产品标题、价格、销量的CSS选择器可能因网站而异&#xff0c…...

一文讲透 Vue3 + Three.js 材质属性之皮革篇【扫盲篇】

文章目录 前言一、Three.js材质系统基础1.1 为什么选择PBR材质&#xff1f;1.2 关键参数解析 二、不同类型皮革的材质配置2.1 牛皮材质实现2.2 羊皮材质实现2.3 仿皮材质实现 三、高级贴图技术3.1 贴图制作流程3.2 组合贴图实战 四、性能优化策略4.1 贴图压缩技术4.2 材质共享4…...

mysql读写分离

一、读写分离原理 客户端连接代理层&#xff0c;代理层&#xff08;中间件&#xff09;来实现读操作给从服务器&#xff0c;写操作给主服务器。 二、示例 mycat实现读写分离 读写分离在主从复制的基础上 1客户机1代理1主2从1、网络主 192.168.10.101从1 192.168.10.102从2 …...

Java集合框架

集合 概念&#xff1a;对象的容器&#xff0c;定义了对多个对象进行操作的常用方法。可实现数组的功能 和数组的区别 数组长度固定&#xff0c;集合长度不固定 数组可以存储基本类型和引用类型&#xff0c;集合只能存储引用类型 位置&#xff1a;java.util.* Collection体…...

salesforce如何导出所有字段

在 Salesforce 中&#xff0c;导出所有字段信息&#xff08;包括字段名、API 名、字段类型、是否可报表、是否可搜索等&#xff09;通常不是一个“一键完成”的操作&#xff0c;但可以通过几种方法实现。以下是常用的几种方法&#xff1a; ✅ 方法一&#xff1a;使用 Salesforc…...

一招解决Tailwindcss4.x与其他库样式冲突问题

当项目中引入tailwindcss&#xff0c;并与其他UI库混用时&#xff0c;可能会出现样式冲突问题&#xff0c;因为tailwindcss重置了一些基础样式&#xff0c;例如&#xff1a;引入tailwindcss后&#xff0c;原生button按钮没有了默认的样式。 在老版本中解决这个问题&#xff0c…...

[Harmony]封装一个可视化的数据持久化工具

1.添加权限 在module.json5文件中添加权限 // 声明应用需要请求的权限列表 "requestPermissions": [{"name": "ohos.permission.DISTRIBUTED_DATASYNC", // 权限名称&#xff1a;分布式数据同步权限"reason": "$string:distrib…...

关于AI人工智能的知识图谱简介

人工智能是计算机科学的一个重要领域&#xff0c;旨在理解和构建智能行为。人工智能可以被划分为多个子领域或分支&#xff0c;包括机器学习、深度学习、自然语言处理&#xff08;Natural Language Processing&#xff0c;NLP&#xff09;、计算机视觉&#xff08;Computer Vis…...

uniapp,小程序中实现文本“展开/收起“功能的最佳实践

文章目录 示例需求分析实现思路代码实现1. HTML结构2. 数据管理3. 展开/收起逻辑4. CSS样式 优化技巧1. 性能优化2. 防止事件冒泡3. 列表更新处理 实际效果总结 在移动端应用开发中&#xff0c;文本内容的"展开/收起"功能是提升用户体验的常见设计。当列表项中包含大…...

RabbitMQ 消息模式实战:从简单队列到复杂路由(一)

RabbitMQ 初相识 在当今分布式系统大行其道的技术领域中&#xff0c;消息队列作为实现系统间异步通信、解耦以及流量削峰的关键组件&#xff0c;发挥着不可或缺的作用。而 RabbitMQ&#xff0c;无疑是消息队列领域中一颗耀眼的明星。自 2007 年诞生以来&#xff0c;RabbitMQ 凭…...

阿里云ECS部署Dify

一&#xff1a;在ECS上面安装Docker 关防火墙 sudo systemctl stop firewalld 检查防火墙状态 systemctl status firewalld sudo yum install -y yum-utils device-mapper-persistent-data lvm2 设置阿里镜像源&#xff0c;安装并启动docker [base] nameCentOS-$releas…...

Missashe考研日记—Day37-Day43

Missashe考研日记—Day37-Day43 写在面前 本系列博客用于记录博主一周的学习进度&#xff0c;具体知识总结在目前已有的笔记中&#xff1a; 1.高数强化学习笔记2.计网复习笔记 本周五到周日有其他安排&#xff0c;所以今天就把这一周的先更新了。 专业课408 这周学了计网的…...

DB-GPT扩展自定义app配置说明

简介 文章主要介绍了如何扩展一个自定义app插件&#xff0c;这里先看下生成效果&#xff0c;生成的内容其实还是有问题的&#xff0c;后续博主会调整提示词看看能不能优化生成效果 修改代码 代码详情 # chat_di是从chat_normal复制过来的&#xff0c;这里只改了提示词 from d…...

2025年11月软考各科目难度及适合人群分析

2025上半年软考考试报名已结束&#xff0c;不少小伙伴已经在咨询下半年的考试科目了&#xff0c;今天就给大家推荐几个好考的科目。 一、2025下半年软考考试科目 2025下半年软考考试时间为11月8日至11日。 根据计考办发布的《关于2025年度计算机技术与软件专业技术资格&…...

vue异步导入

vue的异步导入 大家开发vue的时候或多或少路由的异步导入 component: () >import(“/views/A_centerControl/intelligent-control/access-user-group”),当然这是路由页面&#xff0c;那么组件也是可以异步导入的 使用方式 组件的异步导入非常简单&#xff0c;主要是一个…...

[IMX] 03.时钟树 - Clock Tree

目录 1.PLL 时钟源 2.Clock Tree 时钟树 3.ARM 内核时钟 3.1.频率设置 - CCM_ANALOG_PLL_ARMn 3.2.时钟分频 - CCM_CACRR 3.3.时钟源选择 - CCM_CCSR 3.4.修改 ARM 内核时钟 4.PFD 时钟 4.1.PLL2_PFD 频率 - CCM_ANALOG_PFD_528n 4.2.PLL3_PFD 频率 - CCM_ANALOG_PFD…...

低功耗实现方法思路总结

1.硬件选型最重要&#xff0c;比如stm 8l &#xff0c;MSP430&#xff0c;瑞萨rl78,lpc11等 2.开发仿真务必使用高精度万用表如fluke 3.在整体规划层面&#xff0c;避免引脚未配置的浮空状态 a)在设计开发层面&#xff0c;对于使用的信号&#xff0c;使用上下拉电阻或者推挽…...

广州SMT贴片技术优势与工艺解析

内容概要 作为电子制造领域的关键技术&#xff0c;广州SMT贴片工艺凭借其高精度与高效性&#xff0c;已成为现代电子装配的核心支撑。本文通过系统性梳理表面贴装技术&#xff08;SMT&#xff09;的全流程&#xff0c;重点聚焦广州地区在该领域的独特技术优势。内容涵盖从焊膏…...

乡村地区无人机医药配送路径规划与优化仿真

本代码意在通过对无人机路径规划和载具选择进一步帮助乡村振兴&#xff0c;提高农村卫生条件&#xff0c;让患者足不出户就可享受到医疗服务&#xff0c;旨在完善乡村基础设施建设&#xff0c;积极响应国家“十四五”规划的号召。 先选择适合在该地区配送医药物资环境下的载具材…...

AWS Elastic Beanstalk部署极简Spring工程(EB CLI失败版)

弃用 这里我没有走通EB CLI方式部署。 问题 最近又加入了AWS项目组&#xff0c;又要再次在AWS云上面部署Spring服务&#xff0c;我这里使用的使用AWS中国云。需要使用AWS Elastic Beanstalk部署一个极简Spring工程。 EB CLI安装 安装EB CLI之前需要先在本地安装好Git&…...

[训练和优化] 3. 模型优化

&#x1f44b; 你好&#xff01;这里有实用干货与深度分享✨✨ 若有帮助&#xff0c;欢迎&#xff1a;​ &#x1f44d; 点赞 | ⭐ 收藏 | &#x1f4ac; 评论 | ➕ 关注 &#xff0c;解锁更多精彩&#xff01;​ &#x1f4c1; 收藏专栏即可第一时间获取最新推送&#x1f514;…...

element-ui的el-cascader增加全选按钮实现(附源码)

最近遇到了在级联选择器上添加全选框的需求 &#xff0c;但是项目使用的是Vue2 Element UI的架构&#xff0c;而我们都知道Element UI提供的级联选择器el-cascader是不支持全选框的&#xff0c;而我又没有在网上找到适合我项目的实现&#xff0c;索性自己实现一个组件&#xf…...

OpenCV人脸识别EigenFace算法、案例解析

文章目录 前言一、EigenFace 核心原理二、Python 实战&#xff1a;手把手搭建 EigenFace 识别系统1. 环境准备2. 代码实现与步骤详解3. 加载数据集函数4. 训练EigenFace模型函数5. 预测函数6.主程序部分7. 可视化结果8. 代码分步解读 三、优化技巧四、总结 前言 在人脸识别领域…...

Python模块化编程

Python模块化编程 记得我刚学Python那会儿&#xff0c;特别喜欢把所有代码都写在一个文件里。直到有一天&#xff0c;我的项目膨胀到了2000多行代码&#xff0c;每次修改都要翻半天…这才痛定思痛&#xff0c;开始研究模块化编程。今天就跟大家聊聊这个让代码变得优雅的魔法。…...

Java对象的GC回收年龄的研究

目录 1、介绍 2、内存结构 2.1、普通对象 2.2、数组对象 2.3、数组长度作用 2.4、为什么 age 用 4 位&#xff1f; 3、对象头组成 3.1、Mark Word&#xff08;标记字段&#xff09; 3.2、Class Pointer&#xff08;类指针&#xff09; 4、GC 发生的位置 4.1、新生代…...

IT系统的基础设施:流量治理、服务治理、资源治理,还有数据治理。

文章目录 引言I IT系统的基础设施流量治理、服务治理、资源治理,还有数据治理。开发语言的选择数据治理(监控系统):整体运维的数据其他II 基础知识的重要性第一,知道原理第二,当遇到一些比较难解的问题时,基础知识就会派上用场。例子III 快速学会一门编程语言把语言照着…...

SpringBoot应用启动过程

Spring 应用抽象 Springboot 是一个用来快速创建 Spring 应用的微服务框架&#xff0c;启动引导器是org.springframework.boot.SpringApplication 这个类&#xff0c;每个 SpringApplication 实例就表示一个 Spring 应用的启动类&#xff1b;Spring 应用生命周期包括创建、启动…...

傻子学编程之——Java并发编程的问题与挑战

傻子学编程之——Java并发编程的问题与挑战 Java并发编程能让程序跑得更快&#xff0c;但也像走钢丝一样充满风险。本文用最直白的语言和代码示例&#xff0c;带你直面并发编程的四大「致命陷阱」&#xff0c;并给出解决方案。 一、资源竞争&#xff1a;多个线程打架怎么办&am…...

groovy 如何遍历 postgresql 所有的用户表 ?

在 Groovy 中遍历 PostgreSQL 所有用户表&#xff0c;你可以使用 JDBC 连接数据库并执行 SQL 查询。以下是一个完整的示例&#xff1a; Groovy 代码示例 import groovy.sql.Sqldef config [url: jdbc:postgresql://localhost:5432/your_database,user: your_username,passwo…...

CPU cache基本原理

CPU cache基本原理 存储器层次结构存储器层次结构中的缓存高速缓存存储器直接映射高速缓存组相联高速缓存全相联高速缓存 多核 CPU 下缓存问题内存的读写操作流程数据一致性与并发控制 高速缓存&#xff08;cache&#xff09;是一个小而快速地存储设备&#xff0c;它作为存储在…...

【Java学习笔记】【第一阶段项目实践】零钱通(面向过程版本)

零钱通&#xff08;面向过程版本&#xff09; 需求分析 1. 需要实现的功能 (1) 收益入账 (2) 消费 (3 )查看明细 (4 )退出系统 2. 代码优化部分 (1) 对用户输入 4 退出时&#xff0c;给出提示 “你确定要退出吗&#xff1f;y/n”&#xff0c;必须输入正确的 y/n&#xff0c…...

Cursor无法使用C/C++调试的解决办法

背景 这几天在二开ffmpeg&#xff0c;发现用cursor无法使用cppdbg进行调试&#xff0c;只能上机gdb&#xff0c;比较麻烦。 配置文件 // launch.json {// Use IntelliSense to learn about possible attributes.// Hover to view descriptions of existing attributes.// Fo…...

VSTO(C#)Excel开发进阶2:操作图片 改变大小 滚动到可视区

初级代码游戏的专栏介绍与文章目录-CSDN博客 我的github:codetoys,所有代码都将会位于ctfc库中。已经放入库中我会指出在库中的位置。 这些代码大部分以Linux为目标但部分代码是纯C++的,可以在任何平台上使用。 源码指引:github源码指引_初级代码游戏的博客-CSDN博客 入…...

嵌入式自学第二十二天(5.15)

顺序表和链表 优缺点 存储方式&#xff1a; 顺序表是一段连续的存储单元 链表是逻辑结构连续物理结构&#xff08;在内存中的表现形式&#xff09;不连续 时间性能&#xff0c; 查找顺序表O(1)&#xff1a;下标直接查找 链表 O(n)&#xff1a;从头指针往后遍历才能找到 插入和…...

高云FPGA-新增输出管脚约束

module led (input sys_clk, // clk inputinput sys_rst_n, // reset inputoutput reg [5:0] led, // 6 LEDS pinoutput reg gpio // 1 GPIO pin 25 ); 在原来的代码基础上新增加一个gpio输出&#xff0c;绑定到25管脚上 打开工程文件夹中的cts文件…...

Nginx 返回 504 状态码表示 网关超时(Gateway Timeout)原因排查

Nginx 返回 504 状态码表示 网关超时&#xff08;Gateway Timeout&#xff09;&#xff0c;这意味着 Nginx 作为反向代理服务器&#xff0c;在等待上游服务器&#xff08;如后端应用服务器、数据库服务器等&#xff09;响应时&#xff0c;超过了预设的时间限制&#xff0c;最终…...

单片机 | 基于STM32的智能马桶设计

基于STM32的智能马桶设计结合了传感器技术、嵌入式控制及物联网功能,旨在提升用户体验并实现健康监测。以下是其设计原理、功能模块及代码框架的详细解析: 一、系统架构与核心功能 智能马桶的系统架构通常分为主控模块、传感器模块、执行器模块、通信模块及用户交互模块,主…...

2900. 最长相邻不相等子序列 I

2900. 最长相邻不相等子序列 I class Solution:def getLongestSubsequence(self, words: List[str], groups: List[int]) -> List[str]:n len(groups) # 获取 groups 列表的长度ans [] # 初始化一个空列表&#xff0c;用于存储结果for i, g in enumerate(groups): # 遍…...

欧姆龙 CJ/CP 系列 PLC 串口转网口模块:工业通信升级的智能之选

在工业自动化领域&#xff0c;欧姆龙 CJ/CP 系列 PLC 凭借高可靠性和灵活扩展性&#xff0c;广泛应用于汽车制造、食品加工、能源化工等关键行业。然而&#xff0c;传统串口通信的局限性&#xff08;如距离受限、协议兼容性差、难以实现远程监控&#xff09;却成为企业智能化升…...

BGP选路实验

一.需求 1.使用PreVal策略&#xff0c;确保R4通过R2到达192.168.10.0/24 2.使用As_Path策略&#xff0c;确保R4通过R3到达192.168.11.0/24 3.配置MED策略&#xff0c;确保R4通过R3到达192.168.12.0/24 4.使用Local Preference策略&#xff0c;确保R1通过R2到达192.168.1.0/2…...