LeRobot 项目部署运行逻辑(五)——intelrealsense.py/configs.py
在运行 control_robot.py 的时候会启用相机拍摄,lerobot 中封装好了两种相机类型:realsense 和 opencv
realsense 直接使用他们的脚本就可以,但需要在 lerobot/robot_devices/robots/configs.py 中修改相机 serial_number
由于我们设备采用的是 Logitech C922x 相机,所以需要稍微修改一下通讯方式,采用 opencv+usb 的方式读取图像数据
目录
1 相机文件适配
1.1 intelrealsense.py
1.2 configs.py
2 其他细节
1 相机文件适配
1.1 intelrealsense.py
首先,因为相机不同嘛,直接运行肯定会报错,但相机文件具体改哪个呢,那就运行一下看看错误到哪一步:
Traceback (most recent call last):File "/home/robot/Documents/lerobotnew/lerobot/lerobot/common/robot_devices/cameras/intelrealsense.py", line 315, in connectprofile = self.camera.start(config)
RuntimeError: No device connected
Traceback (most recent call last):File "/home/robot/Documents/lerobotnew/lerobot/lerobot/scripts/control_robot.py", line 437, in <module>control_robot()File "/home/robot/Documents/lerobotnew/lerobot/lerobot/configs/parser.py", line 227, in wrapper_innerresponse = fn(cfg, *args, **kwargs)File "/home/robot/Documents/lerobotnew/lerobot/lerobot/scripts/control_robot.py", line 418, in control_robotteleoperate(robot, cfg.control)File "/home/robot/Documents/lerobotnew/lerobot/lerobot/common/robot_devices/utils.py", line 42, in wrapperraise eFile "/home/robot/Documents/lerobotnew/lerobot/lerobot/common/robot_devices/utils.py", line 38, in wrapperreturn func(robot, *args, **kwargs)File "/home/robot/Documents/lerobotnew/lerobot/lerobot/scripts/control_robot.py", line 235, in teleoperatecontrol_loop(File "/home/robot/Documents/lerobotnew/lerobot/lerobot/common/datasets/image_writer.py", line 36, in wrapperraise eFile "/home/robot/Documents/lerobotnew/lerobot/lerobot/common/datasets/image_writer.py", line 29, in wrapperreturn func(*args, **kwargs)File "/home/robot/Documents/lerobotnew/lerobot/lerobot/common/robot_devices/control_utils.py", line 227, in control_looprobot.connect()File "/home/robot/Documents/lerobotnew/lerobot/lerobot/common/robot_devices/robots/manipulator.py", line 290, in connectself.cameras[name].connect()File "/home/robot/Documents/lerobotnew/lerobot/lerobot/common/robot_devices/cameras/intelrealsense.py", line 325, in connectcamera_infos = find_cameras()File "/home/robot/Documents/lerobotnew/lerobot/lerobot/common/robot_devices/cameras/intelrealsense.py", line 67, in find_camerasraise OSError(
OSError: Not a single camera was detected. Try re-plugging, or re-installing librealsense and its python wrapper pyrealsense2, or updating the firmware.
根据报错 OSError: Not a single camera was detected,我们就能定位使用的 realsense 文件位置:lerobot/lerobot/common/robot_devices/cameras/intelrealsense.py
可以看到文件夹中有 intelrealsense.py 和 opencv.py 文件,就是调用不同的类,这就说明已经都帮我们写好了基础脚本
这时候就有两种思路可以将 realsense 专用代码改成通用的 Logitech(或其它 UVC)相机接口:
- 简单粗暴:直接用 OpenCV 的 VideoCapture,把所有跟 pyrealsense2、IntelRealSenseCamera 有关的代码删掉
- 高级一点:复用项目里的 OpenCVCamera 类重新封装
基本原理:OpenCVCameraConfig + 对应的 OpenCVCamera 完全可以拿来当做一个通用的 UVC(比如 Logitech)摄像头接口。核心思路就是把原先对 RealSense 专用的那一套——IntelRealSenseCameraConfig + IntelRealSenseCamera 换成通用的 OpenCV 实现
- 现在有 OpenCVCameraConfig(camera_index, fps, width, height, color_mode, …),和 RealSense 那套同名字段一一对应
- 所有必需的信息(设备索引、帧率、分辨率、RGB/BGR、旋转)都在 OpenCVCameraConfig 里
同时,为了简单粗暴的最简调用,即不更改其他脚本,只修改 intelrealsense.py:
- 重写 IntelRealSenseCamera 类,使其继承并委托给通用的 OpenCVCamera
- 这样的话无论在 utils.py 里如何导入,都能拿到 OpenCV 驱动下的相机: IntelRealSenseCameraConfig.serial_number 被当作索引(如 /dev/videoN)使用
- 其他参数(fps, width, height, color_mode, rotation, mock)都一一映射给 OpenCVCameraConfig
- 直接用原来的配置(把相机 type 保留为 "intelrealsense",并把 serial_number: 0)就能无缝切换到 Logitech 等 UVC 相机了
重写后的 intelrealsense.py 如下:
#!/usr/bin/env python
# Copyright 2024 The HuggingFace Inc. team. All rights reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.'''
This file contains utilities for recording frames from generic UVC cameras (e.g., Logitech) using OpenCV.
'''import argparse
import concurrent.futures
import logging
import shutil
import time
from pathlib import Pathimport numpy as np
from PIL import Imagefrom lerobot.common.robot_devices.cameras.configs import OpenCVCameraConfig
from lerobot.common.robot_devices.cameras.opencv import OpenCVCamera
from lerobot.common.robot_devices.utils import (RobotDeviceAlreadyConnectedError,RobotDeviceNotConnectedError,busy_wait,
)
from lerobot.common.utils.utils import capture_timestamp_utcdef save_image(img_array, camera_index, frame_index, images_dir):try:img = Image.fromarray(img_array)path = images_dir / f"camera_{camera_index}_frame_{frame_index:06d}.png"path.parent.mkdir(parents=True, exist_ok=True)img.save(str(path), quality=100)logging.info(f"Saved image: {path}")except Exception as e:logging.error(f"Failed to save image for camera {camera_index} frame {frame_index}: {e}")def save_images_from_cameras(images_dir: Path,camera_indices: list[int] | None = None,fps=None,width=None,height=None,record_time_s=2,mock=False,
):'''Initializes all the cameras and saves images to the directory.Useful to visually identify the camera associated to a given index.'''if camera_indices is None or len(camera_indices) == 0:camera_indices = [0]cameras = []for idx in camera_indices:print(f"Setting up camera index={idx}")config = OpenCVCameraConfig(camera_index=idx,fps=fps,width=width,height=height,color_mode="rgb",mock=mock,)camera = OpenCVCamera(config)camera.connect()print(f"OpenCVCamera(index={idx}, fps={camera.fps}, width={camera.width}, height={camera.height}, color_mode={camera.color_mode})")cameras.append(camera)images_dir = Path(images_dir)if images_dir.exists():shutil.rmtree(images_dir)images_dir.mkdir(parents=True, exist_ok=True)print(f"Saving images to {images_dir}")frame_index = 0start_time = time.perf_counter()try:with concurrent.futures.ThreadPoolExecutor(max_workers=1) as executor:while True:now = time.perf_counter()for i, camera in enumerate(cameras):image = camera.read() if fps is None else camera.async_read()if image is None:print("No Frame")continueexecutor.submit(save_image,image,camera_indices[i],frame_index,images_dir,)if fps is not None:dt_s = time.perf_counter() - nowbusy_wait(max(0, 1 / fps - dt_s))if time.perf_counter() - start_time > record_time_s:breakprint(f"Frame: {frame_index:04d}\tLatency (ms): {(time.perf_counter() - now) * 1000:.2f}")frame_index += 1finally:print(f"Images have been saved to {images_dir}")for camera in cameras:camera.disconnect()
1.2 configs.py
修改相机配置文件,将 camera_index 参数由序列号改为实际 OpenCV 识别的索引号,因为我是直接改的 IntelRealSenseCameraConfig 类,所以只需要改 serial_number:
cameras: dict[str, CameraConfig] = field(default_factory=lambda: {"cam_low": IntelRealSenseCameraConfig(serial_number=0,fps=30,width=640,height=480,),"cam_left_wrist": IntelRealSenseCameraConfig(serial_number=2,fps=30,width=640,height=480,),"cam_right_wrist": IntelRealSenseCameraConfig(serial_number=4,fps=30,width=640,height=480,),})
以上修改完后,完成相机更换的全部脚本配置
2 其他细节
运行以下命令,可以确定可用相机,它会扫一遍 /dev/video*,并输出哪些是活跃的:
python lerobot/common/robot_devices/cameras/opencv.py
如果运行出现如下报错,是端口选择错误,0-2-4-6端口有相机,是3个外接相机和一个笔记本自带相机,所以要排查掉一个并选择对的端口:
[ WARN:0@0.562] global cap.cpp:215 open VIDEOIO(V4L2): backend is generally available but can't be used to capture by name
Linux detected. Finding available camera indices through scanning '/dev/video*' ports
Camera found at index /dev/video6
Camera found at index /dev/video4
Camera found at index /dev/video2
Camera found at index /dev/video0
所以创建一个简单的 Python 脚本快速测试并可视化 ,命名为camera_test.py:
import cv2def test_camera(port):cap = cv2.VideoCapture(port)if not cap.isOpened():print(f"Camera at {port} could not be opened.")returnprint(f"Displaying camera at {port}. Press 'q' to quit.")while True:ret, frame = cap.read()if not ret:print("Failed to capture frame.")breakcv2.imshow(f'Camera at {port}', frame)if cv2.waitKey(1) & 0xFF == ord('q'):breakcap.release()cv2.destroyAllWindows()if __name__ == "__main__":ports = ["/dev/video0", "/dev/video2", "/dev/video4", "/dev/video6"]for port in ports:test_camera(port)
运行脚本开始测试,会依次打开每个端口对应的相机画面
- 每次打开窗口时,观察显示的画面,记录相应的端口和对应的摄像头
- 按下键盘上的 q 键关闭当前摄像头窗口,自动切换至下一个摄像头进行测试
可以看到图像后逐一排查
如果遇到相机权限问题,则运行:
sudo chmod 666 /dev/video*
相关文章:
LeRobot 项目部署运行逻辑(五)——intelrealsense.py/configs.py
在运行 control_robot.py 的时候会启用相机拍摄,lerobot 中封装好了两种相机类型:realsense 和 opencv realsense 直接使用他们的脚本就可以,但需要在 lerobot/robot_devices/robots/configs.py 中修改相机 serial_number 由于我们设备采用的…...
从0开始学linux韦东山教程第一三章问题小结(1)
本人从0开始学习linux,使用的是韦东山的教程,在跟着课程学习的情况下的所遇到的问题的总结,理论虽枯燥但是是基础。 摘要关键词:VMware、Ubuntu、网络网口 视频链接:【【韦东山】韦东山手把手教你嵌入式Linux快速入门到精通 | Lin…...
解决 MySQL 数据库无法远程连接的问题
在使用 MySQL 数据库时,遇到这样的问题: 本地可以连接 MySQL,但远程机器连接时,总是报错 Host ... is not allowed to connect to this MySQL server。 这通常是因为 MySQL 的用户权限或配置限制了远程访问。 1. 登录 MySQL 数据…...
分享一款开源的图片去重软件 ImageContrastTools,基于Electron和hash算法
最近发现个挺实在的图片查重软件,叫ImageContrastTools。电脑手机都能用,特别适合整理乱七八糟的相册。直接去这里下载就能用: https://github.com/html365/ImageContrastTools 功能说明: 1️⃣ 选个文件夹就能自动扫重复图&…...
软件测试——用例篇(2)
目录 一、基于需求的设计方法 1.1设计账号注册、账号登录的测试用例 1.1.1功能测试 1.1.2界面测试 1.1.3性能测试 1.1.4兼容性测试 1.1.5易用性测试 1.1.6安全测试 一、基于需求的设计方法 根据参考需求文档/产品规格说明书来设计测试用例 测试人员接到需求之后、对需求…...
图像匹配导航定位技术 第 11 章
第 11 章 基 于 改 进 SIFT 的 SAR 与 可 见光 图 像 匹 配 控 制 点 定 位 算 法 HOG 描述子也只是对整幅图像的特征向量进行匹配,但是仍然存在局部匹配误差。而局部不变特征(如 SIFT,Harris 等)是对特征点局部邻域的特征进行描述来构造局部…...
安装jdk步骤
将Linux安装jdk的步骤放入shell脚本中 #!/bin/bash # 阿里云服务器专用 - 全自动安装 OpenJDK 1.8(无交互) # 仅支持 yum 系系统(CentOS/RHEL/Alibaba Cloud Linux)# 检查 root 权限 if [ "$(id -u)" -ne 0 ]; thenech…...
理解 `.sln` 和 `.csproj`:从项目结构到构建发布的一次梳理
理解 .sln 和 .csproj:从项目结构到构建发布的一次梳理 在初学 .NET 项目开发时,很多人都会对 .sln(解决方案)和 .csproj(项目)文件感到疑惑。随着开发经验的积累,我逐渐理解了这些层级的设计意…...
高频算法面试题总结
高频算法面试题总结 排序算法 1. 基础排序算法 快速排序: public void quickSort(int[] arr, int low, int high) {if (low < high) {int pivot = partition(arr, low, high);quickSort(arr, low, pivot - 1);quickSort(arr, pivot + 1, high);} }平均时间复杂度:O(n lo…...
SQL进阶:如何把字段中的键值对转为JSON格式?
JSON 一、问题描述二、ORACLE<一>、键值对拆分(REGEXP_SUBSTR)<二>、转为JSON<三>、不足 三、MYSQL<一>、键值对拆分(RECURSIVE)<二>、转为JSON 一、问题描述 假如某张表的某列是键值对数据,如何把这个键值对转为json格式,数据如下所示 dynast…...
vue3:十二、图形看板- echart图表-柱状图、饼图
一、效果 如图展示增加了饼图和柱状图,并且优化了浏览器窗口大小更改,图表随着改变 二、 饼图 1、新建组件文件 新增组件EchartsExaminePie.vue,用于存储审核饼图的图表 2、写入组件信息 (1)视图层 写入一个div,写入变量chart和图表宽高 <template><div ref…...
nacos-server-2.2.2.tar及使用方式
下载链接 nacos-server-2.2.2.tar包及使用资源-CSDN文库 下载与安装 下载地址:可从 Nacos 官网版本下载页面 或 Nacos GitHub Releases 获取 nacos-server-2.2.2.tar.gz 安装包。 环境准备:Nacos 依赖 Java 环境运行,需确保安装了 64 位 J…...
el-form的label星号位置如何修改
默认情况 修改后 实现代码 .el-form {.el-form-item {.el-form-item__label {padding: 0;&::before {float: none;position: relative;}}} }...
小刚说C语言刷题—1004阶乘问题
1.题目描述 编程求 123⋯n 。 输入 输入一行,只有一个整数 n(1≤n≤10); 输出 输出只有一行(这意味着末尾有一个回车符号),包括 1 个整数。 样例 输入 5 输出 120 2.参考代码(C语言版) #include <stdio…...
Java 集合体系深度解析面试篇
一、Java 集合体系核心架构与高频考点 1. 集合体系架构图(大厂必问) Java集合框架 ├─ Collection(单列集合) │ ├─ List(有序、可重复) │ │ ├─ ArrayList(动态数组,随机…...
websocketd 10秒教程
websocketd 参考地址:joewalnes/websocketd 官网地址:websocketd websocketd简述 websocketd是一个简单的websocket服务Server,运行在命令行方式下,可以通过websocketd和已经有程序进行交互。 现在,可以非常容易地构…...
PCA降维
主成分分析(Principal Component Analysis,PCA)降维是一种广泛使用的无监督机器学习技术,主要用于数据预处理阶段,其目的是在尽量保留数据重要信息的前提下,减少数据的维度。 PCA 的原理 PCA 的核心思想…...
【计算机视觉】OpenCV实战项目: opencv-text-deskew:实时文本图像校正
opencv-text-deskew:基于OpenCV的实时文本图像校正 一、项目概述与技术背景1.1 核心功能与创新点1.2 技术指标对比1.3 技术演进路线 二、环境配置与算法原理2.1 硬件要求2.2 软件部署2.3 核心算法流程 三、核心算法解析3.1 文本区域定位3.2 角度检测优化3.3 仿射变换…...
具身智能时代的机器人导航和操作仿真器综述
系列文章目录 前言 导航和操作是具身智能的核心能力,然而在现实世界中训练具有这些能力的智能体却面临着高成本和时间复杂性。因此,从模拟到现实的转移已成为一种关键方法,但模拟到现实的差距依然存在。本调查通过分析以往调查中忽略的物理模…...
Go语言Stdio传输MCP Server示例【Cline、Roo Code】
Go语言 Stdio 传输 MCP Server 示例 AI 应用开发正处于加速发展阶段,新技术和新方法不断涌现。Model Context Protocol (MCP) 作为一个开放标准,正在改变 AI 应用与数据源和工具集成的方式。 Go-MCP 是一个 MCP 协议的 GO 实现&…...
Xcode16.3配置越狱开发环境
首先先在https://developer.apple.com/xcode/resources/ 这里面登陆Apple账号,然后访问url下载 https://download.developer.apple.com/Developer_Tools/Xcode_16.3/Xcode_16.3.xip 1、安装theos https://theos.dev/docs/installation-macos 会安装到默认位置~/th…...
AWS IoT Core与MSK跨账号集成:突破边界的IoT数据处理方案
随着企业规模的扩大和业务的复杂化,跨账号资源访问成为云架构中的一个常见需求。本文将深入探讨如何实现AWS IoT Core与Amazon MSK(Managed Streaming for Apache Kafka)的跨账号集成,为您的IoT数据处理方案开辟新的可能性。无论您是正在构建多账号架构,还是需要整合不同部门的…...
【Python 列表(List)】
Python 中的列表(List)是最常用、最灵活的有序数据集合,支持动态增删改查操作。以下是列表的核心知识点: 一、基础特性 有序性:元素按插入顺序存储可变性:支持增删改操作允许重复:可存储重复元…...
在另一个省发布抖音作品,IP属地会随之变化吗?
你是否曾有过这样的疑惑:出差旅游时在外地发布了一条抖音视频,评论区突然冒出“IP怎么显示xx省了?”的提问?随着各大社交平台上线“IP属地”功能,用户的地理位置标识成为公开信息,而属地显示的“灵敏性”也…...
在线工具源码_字典查询_汉语词典_成语查询_择吉黄历等255个工具数百万数据 养站神器,安装教程
在线工具源码_字典查询_汉语词典_成语查询_择吉黄历等255个工具数百万数据 养站神器,安装教程 资源宝分享:https://www.httple.net/154301.html 一次性打包涵盖200个常用工具!无论是日常的图片处理、文件格式转换,还是实用的时间…...
D720201 PCIE 转USB HUB
1. 启动时出现了下面错误 [ 4.682595] pcieport 0004:00:00.0: Signaling PME through PCIe PME interrupt [ 4.684939] pci 0004:01:00.0: Signaling PME through PCIe PME interrupt [ 4.691287] pci 0004:01:00.0: enabling device (0000 -> 0002) [ 5.2962…...
QT事件介绍及实现字体放大缩小(滚轮)
使用update是为了回调paintEvent这个事件函数 pic.load是加载一张图片 setfixedsize(pic.siez())是为了把按键的矩形区域变成和pic一样大 painter.drawPixmap(rec(),pic)就是在按键的矩形区域画一个pic emit clicked();是用来发送clicked信号的,当然你也可以在事…...
p2p虚拟服务器
ZeroTier Central ✅ 推荐工具:ZeroTier(免费、稳定、跨平台) ZeroTier 可以帮你把多台设备(无论是否跨网)加入一个虚拟局域网,彼此间可以像在同一个 LAN 中通信,UDP 视频、文件传输、SSH 等都…...
高尔夫基本知识及规则·棒球1号位
高尔夫与棒球的结合看似跨界,但两者在规则、策略和运动哲学上存在有趣的关联性。以下从五个角度进行对比分析,揭示它们的异同与潜在联系: 一、核心目标的对比性结合 高尔夫:以最少击球次数完成18洞(标准杆72杆左右&am…...
数据结构(1)复杂度
一、数据结构概要 1.数据结构 数据结构是计算机存储、组织数据的方式,是数据相互之间存在一种或者多种特定关系的集合。没有一种单一的数据结构可以解决所有问题,因此要学习多种多样的数据结构。如:线性表、图、树等。 2.算法 算法其实就…...
多分类问题softmax传递函数+交叉熵损失
在多分类问题中,Softmax 函数通常与交叉熵损失函数结合使用。 Softmax 函数 Softmax 函数是一种常用的激活函数,主要用于多分类问题中。它将一个实数向量转换为概率分布,使得每个元素的值在 0 到 1 之间,且所有元素的和为 1。 …...
Java如何获取电脑分辨率?
以下是一个 Java 程序示例,用于获取电脑的主屏幕分辨率: import java.awt.*; public class ScreenResolutionExample { public static void main(String[] args) { // 获取默认的屏幕设备 GraphicsDevice device GraphicsEnvironm…...
【NextPilot日志移植】logged_topics.cpp解析
📘 PX4 Logger 模块注册 uORB 主题、实际订阅与数据采集流程 🧭 目的与背景 在 PX4 飞控中,日志记录模块 logger 需要记录多个 uORB 主题的数据(如 IMU、GPS、姿态等)。为了系统统一管理这些记录需求,log…...
CSS vertical-align
这里的小空白就是为了和基线对齐 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" content&quo…...
“工作区”升级为“磁盘”、数据集统计概览优化|ModelWhale 版本更新
本次更新围绕用户在实际项目中对平台的理解和管理体验进行了多项优化。 “工作区”升级为“磁盘”、及其管理优化 平台“工作区”概念正式更名为“磁盘”,突出其存储功能。原有以目录代称的存储区域划分同步更名,其中“work目录”更改为“个人磁盘”&am…...
mac 电脑如何打开剪切板
mac 不像 Windows 拥有官方的剪贴板应用。所以我们需要使用官方商店中的第三方应用实现剪切板管理的功能。 打开苹果电脑上的 App Store,下载 PasteMe 或 Paste 等复制历史记录的管理工具。(PasteMe 为买断制18元,Paste为订阅制,…...
信息系统项目管理师-软考高级(软考高项)2025最新(十二)
个人笔记整理---仅供参考 第十二章项目质量管理 可能考论文??? 12.1管理基础 12.2项目质量管理过程 12.3规划质量管理 12.4管理质量 12.5控制质量...
Java、javax 和 Jakarta有什么区别?
在 Java 开发中,我们经常会看到 java、javax 和 jakarta 这些包名前缀。本文将详细介绍这三个命名空间的含义、发展历程以及它们之间的关系,帮助你更好地理解 Java 生态系统。 一、Java:核心 API 的基础 ✅ 含义: java 是 Java 标准库的核心包名。所有以 java. 开头的类构…...
LeetCode百题刷002摩尔投票法
遇到的问题都有解决的方案,希望我的博客可以为你提供一些帮助 图片源自leetcode 题目:169. 多数元素 - 力扣(LeetCode) 一、排序法 题目要求需要找到多数值(元素个数>n/2)并返回这个值。一般会想到先…...
【推荐笔记工具】思源笔记 - 隐私优先的个人知识管理系统,支持 Markdown 排版、块级引用和双向链接
Typora 使用Typora好多年了,一直非常的喜欢这个简洁的Markdown编辑工具,低版本的免费且好用。 Typora官网地址: https://typora.io/ https://typoraio.cn/ Typora的文档树如下,细看后,总觉得差点意思! 思源笔记 今…...
ACTF2025 - Web writeup
ACTF2025 - Web writeup ACTF upload 进去后是一个登录界面,输入用户名后登录,然后到一个文件上传的界面。 在 /upload?file_path 处,可以实现任意文件读取,文件内容保存在 img 标签中的 base64 值中。 示例请求:…...
使用Java实现HTTP协议服务:从自定义服务器到内置工具
在Web开发领域,HTTP协议是服务器与客户端(如Web浏览器)通信的核心。Java作为一种多功能且强大的编程语言,提供了多种方法来实现HTTP协议服务,满足从学习实验到生产部署的各种需求。本文将深入探讨在Java中实现HTTP服务的三种主要方法:使用ServerSocket构建自定义HTTP服务…...
【星海随笔】信息安全相关标准
重要的国际信息安全标准> 国际标准化组织(ISO) 该组织成立于1947年2月23日,总部位于瑞士日内瓦 国际电工委员会(IEC) 成立于1906年,最初总部设在英国伦敦,但后来于1948年迁至瑞士日内瓦…...
检查当前 Docker 使用的 默认运行时(default runtime)方法
目录 ✅ 方法一:查看 Docker 配置文件(最准确) ✅ 方法二:使用 Docker info 命令 ✅ 方法三:检查特定容器的运行时 说明:常见的 Docker Runtime ✅ 方法一:查看 Docker 配置文件(…...
【论文阅读】基于客户端数据子空间主角度的聚类联邦学习分布相似性高效识别
Efficient distribution similarity identification in clustered federated learning via principal angles between client data subspaces -- 基于客户端数据子空间主角度的聚类联邦学习分布相似性高效识别 论文来源TLDR背景与问题两个子空间之间的主角(Principa…...
MySQL 性能调优:从执行计划到硬件瓶颈
MySQL 性能调优:从执行计划到硬件瓶颈 一、性能调优的宏观视角与核心挑战 在数字化浪潮下,企业数据量呈指数级增长,MySQL 作为主流关系型数据库,面临着巨大的性能压力。某电商平台日均订单量突破千万,高峰期数据库响…...
a-range-picker 格式化 M2 为正确日期格式
直接打印 range-picker value 是一个满足 dayjs 规则的数组: Reactive<1. Array(2)1. 0:Reactive<1. M2>2. 1: M2 {$L: en, $u: undefined, $d: Fri May 02 2025 14:50:00 GMT0800 (中国标准时间), $y: 2025, $M: 4, …}3. length: 24. [[Prototype]]: Ar…...
shopping mall(document)
shopping mall(document) 商城的原型,学习,优化,如何比别人做的更好,更加符合大众的习惯 抄别人会陷入一个怪圈,就是已经习惯了,也懒了,也不带思考了。 许多产品会迫于…...
【软件设计师:软件】20.软件设计概述
一、软件设计基本原则 一、软件设计基本原则 1. 模块 是指执行某一特定任务的数据结构和程序代码。 将模块的接口和功能定义为其外部特性将模块的局部数据和实现该模块的程序代码称为内部特性。在模块设计时,最重要的原则就是实现信息隐蔽和模块独立。 2 . 信息隐蔽 将每…...
ArcScroll: 弧形滑动控件
一. 什么是ArcScroll? ArcScroll是一种基于Scroll控件实现的弧形滑动控件。可以让Scroll内容项沿着一个圆心的轨迹滑动,从而实现内容弧形滑动的效果。如下图: 水平滑动: 垂直滑动: 二. 实现方案 以下,以水平的方向…...