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

无人机实战系列(二)本地摄像头 + Depth-Anything V2

这篇文章介绍了如何在本地运行 Depth-Anything V2,因为我使用的无人机是Tello,其本身仅提供了一个单目视觉相机,在众多单目视觉转 Depth 的方案中我选择了 Depth-Anything V2,这个库的强大在于其基于深度学习模型将单目视觉以较低的代价转换成 RGBD 图像,可以用来无人机避障与SLAM。


Step1. 拉取 Depth-Anything V2 源码与模型下载

官方仓库 提供了两种方式调用Depth-Anything,这里先介绍第一种即直接源码调用,后面会补充他们说的第二种使用 HuggingFacetransformers 库的调用方式。

  • 直接clone仓库:
$ git clone git@github.com:DepthAnything/Depth-Anything-V2.git
  • 安装必要的库:
$ pip install -r requirements.txt
  • 下载官方提供的预训练模型:
    这里建议新建一个文件夹 checkpoints 用来保存模型,这样在运行示例的时候就不需要对源码进行修改:
$ cd Depth-Anything-V2
$ mkdir checkpoints

在官方仓库中的 README.md 文件的 Pre-trained Models 章节提供了三个预训练好的模型,我将其下载后统计了一下实际模型大小:

ModelParamsCheckpointSize
Depth-Anything-V2-Small24.8MDownload99.2 MB
Depth-Anything-V2-Base97.5MDownload390 MB
Depth-Anything-V2-Large335.3MDownload1.34 GB
Depth-Anything-V2-Giant1.3BComing soon

此时你的文件结构应该如下:

(LLM) ~/Desktop/Depth-Anything-V2 $ tree -L 2
.
├── DA-2K.md
├── LICENSE
├── README.md
├── app.py
├── assets
│   ...
├── depth_anything_v2
│   ...
├── metric_depth
│   ...
├── checkpoints    # 上一步创建的存放模型的文件夹
│   ├── depth_anything_v2_vitb.pth    	# 390 MB
│   ├── depth_anything_v2_vitl.pth		# 1.34 GB
│   └── depth_anything_v2_vits.pth		# 99.2 MB
├── requirements.txt
├── run.py
└── run_video.py

Step2. 【可选】准备示例图像与视频

为了能测试效果,我这里提供了一个自己拍摄的餐桌图像 dining-table.jpg与风景区视频 landsacpe.mp4 放在网盘上,这两个文件不涉及任何版权问题,可以随意下载。

链接: https://pan.baidu.com/s/1i3COEYRJgzsCSG4O3doekg?pwd=7dba 提取码: 7dba 

Step3. 运行单个图像示例

将测试数据下载好后就可以运行官方提供的示例 run.py ,这里假设使用的是我提供的图像 dining-table.jpg 并放在当前目录下:

此处还需要根据实际情况修改源码处的一个位置,大概在第19行,这里是让你选择用于计算的模型,其默认是使用最大的即效果最好的模型,如果你只下载了上面的一个模型就需要对下面的代码中的 default='vitl' 进行修改,修改依据就是下方代码中的 model_configs 内容:

parser.add_argument('--encoder', type=str, default='vitl', choices=['vits', 'vitb', 'vitl', 'vitg'])
...
model_configs = {'vits': {'encoder': 'vits', 'features': 64, 'out_channels': [48, 96, 192, 384]},'vitb': {'encoder': 'vitb', 'features': 128, 'out_channels': [96, 192, 384, 768]},'vitl': {'encoder': 'vitl', 'features': 256, 'out_channels': [256, 512, 1024, 1024]},'vitg': {'encoder': 'vitg', 'features': 384, 'out_channels': [1536, 1536, 1536, 1536]}
}

完成修改后就可以运行demo了,会在当前目录下生成一个 vis_depth 文件夹:

$ python run.py --img-path ./dining-table.jpg

在这里插入图片描述


Step4. 运行单个视频示例

与上一步运行单个图像示例一致,同样需要在第19行 处根据自己实际情况修改要加载的模型,然后执行命令:

$  python run_video.py --video-path ./landscape.mp4 

执行后会在当前路径下生成一个vis_video_depth文件夹:
在这里插入图片描述


Step5. 使用opencv调用本地摄像头

成功运行完上面两个demo后我在网盘中也提供了一个 python 脚本 local-camera.py 功能是使用opencv调用本地摄像头实时转换单目图像到深度图上:

【注意】:在我的 MacBook Pro M2 笔记本上运行后会非常卡顿并且有较大的延迟,处理一帧图像大概需要250ms左右,后续我会写一篇文章来展示如何将计算部署到远程GPU Server上并将计算结果回传到本地。

import argparse
import cv2
import matplotlib
import numpy as np
import torch
import timefrom depth_anything_v2.dpt import DepthAnythingV2if __name__ == '__main__':parser = argparse.ArgumentParser(description='Depth Anything V2')parser.add_argument('--input-size', type=int, default=518)parser.add_argument('--encoder', type=str, default='vits', choices=['vits', 'vitb', 'vitl', 'vitg'])parser.add_argument('--pred-only', dest='pred_only', action='store_true', help='only display the prediction')parser.add_argument('--grayscale', dest='grayscale', action='store_true', help='do not apply colorful palette')args = parser.parse_args()DEVICE = 'cuda' if torch.cuda.is_available() else 'mps' if torch.backends.mps.is_available() else 'cpu'model_configs = {'vits': {'encoder': 'vits', 'features': 64, 'out_channels': [48, 96, 192, 384]},'vitb': {'encoder': 'vitb', 'features': 128, 'out_channels': [96, 192, 384, 768]},'vitl': {'encoder': 'vitl', 'features': 256, 'out_channels': [256, 512, 1024, 1024]},'vitg': {'encoder': 'vitg', 'features': 384, 'out_channels': [1536, 1536, 1536, 1536]}}depth_anything = DepthAnythingV2(**model_configs[args.encoder])depth_anything.load_state_dict(torch.load(f'./models/depth_anything_v2_{args.encoder}.pth', map_location='cpu'))depth_anything = depth_anything.to(DEVICE).eval()margin_width = 50cmap = matplotlib.colormaps.get_cmap('Spectral_r')cap = cv2.VideoCapture(0)if not cap.isOpened():print("Error: Could not open camera.")exit()print("Successed: Camera opened.")while True:ret, raw_frame = cap.read()if not ret:print("Error: Failed to capture image.")continuestart_time = time.time()depth = depth_anything.infer_image(raw_frame, args.input_size)depth = (depth - depth.min()) / (depth.max() - depth.min()) * 255.0depth = depth.astype(np.uint8)print(f"Calculate cost time: {time.time() - start_time}")if args.grayscale:depth = np.repeat(depth[..., np.newaxis], 3, axis=-1)else:depth = (cmap(depth)[:, :, :3] * 255)[:, :, ::-1].astype(np.uint8)if args.pred_only:cv2.imshow('Depth Prediction', depth)else:split_region = np.ones((raw_frame.shape[0], margin_width, 3), dtype=np.uint8) * 255 # 分割线combined_frame = cv2.hconcat([raw_frame, split_region, depth])      # 将原始图像和深度图进行拼接cv2.imshow('Raw Frame and Depth Prediction', combined_frame)if cv2.waitKey(1) & 0xFF == ord('q'):breakprint(f"[{args.encoder}] Single frame cost time {time.time() - start_time}")print(f"    origin frame shape={raw_frame.shape}, processed shape={depth.shape}")cap.release()cv2.destroyAllWindows()

运行:

$ python local-camera.py

在这里插入图片描述


总体而言 Depth-Anything V2 在单目项目转深度方面效果是目前开源的几个方案中比较好且稳定的,特别是对于精度要求不高的情况下,虽然没有 RealSence 这种从硬件层面进行转换的快,但其最大的优势在于可以让Tello这种无人机在不进行任何改装的前提下就能够获取深度信息,这可以极大降低无人机单体的硬件成本,你需要的仅仅是一台能够运行模型的3060服务器,这个服务器在未来还可以肩负LLM Agent的功能。

相关文章:

无人机实战系列(二)本地摄像头 + Depth-Anything V2

这篇文章介绍了如何在本地运行 Depth-Anything V2,因为我使用的无人机是Tello,其本身仅提供了一个单目视觉相机,在众多单目视觉转 Depth 的方案中我选择了 Depth-Anything V2,这个库的强大在于其基于深度学习模型将单目视觉以较低…...

[杂学笔记]工厂模式、多态、内存空间区域划分、cp指令破坏软连接问题、UDP如何实现可靠传输、滑动窗口的原理、进程与线程、线程之间的通信

目录 1.工厂模式 2.多态 3.内存空间区域划分 4.cp指令破坏软连接问题 5.UDP实现可靠传输 6.滑动窗口的原理 7.进程与线程 8.线程之间的通信 1.工厂模式 工厂模式是一种创建对象的设计模式。它提供了一种创建对象的方式,将对象的创建和使用分离,通…...

【IEEE出版,往届会后3个月EI检索 | 西华大学主办 | 中英文期刊、SCI期刊推荐】第四届能源、电力与电气国际学术会议(ICEPET 2025)

第四届能源、电力与电气国际学术会议(ICEPET 2025)由西华大学主办,西华大学能源与动力工程学院、西华大学电气与电子信息学院、西华大学航空航天学院、流体及动力机械教育部重点实验室、流体机械及工程四川省重点实验室、四川省水电能源动力装…...

【AI+智造】DeepSeek价值重构:当采购与物控遇上数字化转型的化学反应

作者:Odoo技术开发/资深信息化负责人 日期:2025年2月24日 引言:从事企业信息化工作16年,我见证过无数企业从手工台账到ERP系统的跨越。但真正让采购和物控部门脱胎换骨的,是融合了Deepseek AI的Odoo数字化解决方案——…...

1.适配器模式

概述 适配器模式:将一个类的接口转换成客户希望的另一个接口,使得原本不兼容的类可以一起工作。 适配器模式在业务场景中非常有用,尤其是在系统集成、接口兼容性处理以及代码复用等场景。以下是一个实际的业务场景示例: 业务场景…...

选择排序(详解)c++

选择排序(Selection Sort)是⼀种特别直观的排序算法。每次找出未排序序列中最⼩的元素,然后放进有序序列的后⾯ 算法思想: 每次找出未排序序列中最小的元素,然后放进有序序列的后面 在数组中完成选择排序 落实到代码的时候就两步:找最小交换 …...

[java基础-JVM篇]1_JVM自动内存管理

JVM内存管理涉及但不限于类加载、对象分配、垃圾回收等,本篇主要记录运行时数据区域与对象相关内容。 内容主要来源《深入理解Java虚拟机:JVM高级特性与最佳实践》与官方文档,理解与表述错漏之处恳请各位大佬指正。 目录 运行时数据区域 栈 栈…...

python-leetcode 42.验证二叉搜索树

题目: 给定二叉树的根节点root,判断是否是一个有效二叉搜索树 有效二叉搜索树: 1.节点的左子树只包含小于当前节点的树 2.节点的右子树只包含大于当前节点的树 3.所有左子树和右子树自身必须也是二叉搜索树 方法一:递归 如果该二叉树的…...

Unity Shader 学习13:屏幕后处理 - 使用高斯模糊的Bloom辉光效果

目录 一、基本的后处理流程 - 以将画面转化为灰度图为例 1. C#调用shader 2. Shader实现效果 二、Bloom辉光效果 1. 主要变量 2. Shader效果 (1)提取较亮区域 - pass1 (2)高斯模糊 - pass2&3 (3&#xff…...

【Bluedroid】AVRCP 连接源码分析(三)

接着上一篇【Bluedroid】AVRCP 连接源码分析(一)-CSDN博客,继续AVRCP连接的源码分析。 AVRC_OpenBrowse /packages/modules/Bluetooth/system/stack/avrc/avrc_api.cc /******************************************************************************** Function …...

图数据库Neo4j面试内容整理-约束(Constraint)

约束(Constraint) 是数据库中用于确保数据一致性和完整性的一种机制。它限制了数据的某些方面,确保特定条件得到满足。在 Neo4j 中,约束主要用于确保图数据的一致性,防止插入不符合规则的数据。约束通常与索引一起使用,但它们的功能和目的有所不同。 1. Neo4j 中的约束类…...

QUdpSocket的readyRead信号只触发一次

问题 QUdpSocket的readyRead信号只触发一次。 原因 on_readyRead槽函数里必须读出现有数据后&#xff0c;才能触发新的事件。 解决办法 在on_readyRead槽函数里取出数据。 void MainWindow::on_readyRead() {qDebug() << "on_readyRead in";while (m_udp…...

使用Windbg调试目标进程排查C++软件异常的一般步骤与要点分享

目录 1、概述 2、将Windbg附加到已经启动起来的目标进程上&#xff0c;或者用Windbg启动目标程序 2.1、将Windbg附加到已经启动起来的目标进程上 2.2、用Windbg启动目标程序 2.3、Windbg关联到目标进程上会中断下来&#xff0c;输入g命令将该中断跳过去 3、分析实例说明 …...

深度解析:大模型在多显卡服务器下的通信机制与分布式训练——以DeepSeek、Ollama和vLLM为例

一、引言&#xff1a;大模型与多显卡的必然结合 随着大模型参数规模突破千亿级&#xff08;如GPT-4、DeepSeek&#xff09;&#xff0c;单显卡的显存容量与算力已无法满足需求。多显卡并行计算成为训练与推理的核心技术&#xff0c;其核心挑战在于高效通信与负载均衡。本文以国…...

爬虫基础入门之爬取豆瓣电影Top250-Re正则的使用

网址:豆瓣电影 Top 250 本案例所需要的模块 requests (用于发送HTTP请求)re (用于字符串匹配和操作) 确定需要爬取的数据 &#xff1a; 电影的名称电影的年份电影的评分电影评论人数 一. 发送请求 模拟浏览器向服务器发送请求 准备工作 -分析页面: F12 or 右击点击检查 查看…...

【R安装包报错】在conda环境下用R语言命令安装R包报错

报错如下&#xff1a; gnu/include/c/11.2.0/ctime:80:11: error: ‘timespec_get’ has not been declared in ‘::’ 80 | using ::timespec_get; | ^~~~~~~~~~~~ 修改 报错原因&#xff1a;如果使用的是conda安装的g&#xff0c;可能与系统库不兼容。尝试 切换到系统默认编…...

基于STM32单片机设计的宠物喂食监控系统

1. 项目开发背景 随着宠物数量的增加&#xff0c;尤其是人们对宠物的养护需求日益增多&#xff0c;传统的人工喂养和管理方式难以满足现代养宠生活的需求。人们越来越希望通过智能化手段提高宠物养护的质量和效率&#xff0c;特别是对于宠物喂食、饮水、温湿度控制等方面的智能…...

Minio分布式多节点多驱动器集群部署

Minio分布式多节点多驱动器集群部署 Minio分布式多节点多驱动器集群部署节点规划先决条件开放防火墙端口设置主机名更新域名映射文件时间同步存储要求内存要求 增加虚拟机磁盘(所有机器都要执行)部署分布式 MinIO测试上传与预览测试高可用MinIO 配置限制模拟单节点磁盘故障模拟…...

Web前端开发——HTML基础

本系列博客声明&#xff0c;根据本人所学书籍和网上的一些资料共同磨合&#xff0c;写下web前端系列的博客 HTML基础 一、HTML基本概述[^1]二、HTML大体认知1.HTML基本结构2.HTML 语法格式 三、THML常用标记[^2]1.文本标记&#xff08;1&#xff09;标题&#xff08;2&#xf…...

《计算机视觉》——图像拼接

图像拼接 图像拼接是将多幅有重叠区域的图像合并成一幅全景或更大视角图像的技术&#xff0c;以下为你详细介绍&#xff1a; 原理&#xff1a;图像拼接的核心原理是基于图像之间的特征匹配。首先&#xff0c;从每幅图像中提取独特的特征点&#xff0c;如角点、边缘点等&#x…...

zookeeper从入门到精通

一、入门基础 1.1 什么是 ZooKeeper ZooKeeper 是一个开源的分布式协调服务&#xff0c;由雅虎创建&#xff0c;后成为 Apache 的顶级项目。它为分布式应用提供了高效、可靠的协调服务&#xff0c;例如统一命名服务、配置管理、分布式锁、集群管理等。ZooKeeper 的数据模型类…...

2.2 添加注释

版权声明&#xff1a;本文为博主原创文章&#xff0c;转载请在显著位置标明本文出处以及作者网名&#xff0c;未经作者允许不得用于商业目的。 注释是为了方便理解代码含义而添加的简短的解释性说明。在编译时&#xff0c;编辑器不会将注释加入最终生成的文件中&#xff0c;不…...

具有快慢思考的语言调节机器人操作

24年1月来自华东师范大学、美的集团和上海大学的论文“Language-Conditioned Robotic Manipulation with Fast and Slow Thinking”。 语言调节机器人操作&#xff0c;旨在将自然语言指令转化为可执行动作&#xff0c;从简单的“拾取和放置”到需要意图识别和视觉推理的任务。…...

美颜相机1.0

项目开发步骤 1 界面开发 美颜相机界面构成&#xff1a; 标题 尺寸 关闭方式 位置 可视化 2 创建主函数调用界面方法 3 添加两个面板 一个是按钮面板一个是图片面板 用JPanel 4 添加按钮到按钮面吧【注意&#xff1a;此时要用初始化按钮面板的方法initBtnPanel 并且将按钮添…...

Css3重点知识讲解

选择器 优先级&#xff1a; id 选择器 > 类选择器 > 标签选择器 类选择器&#xff1a; .myClass {color: blue; }id 选择器&#xff08;全局唯一&#xff09;&#xff1a; #myId {color: green; }标签选择器&#xff1a; p {color: red; }层次选择器&#xff1a; /…...

[Web 安全] Web 安全攻防 - 学习手册

关联专栏&#xff1a;[内网安全] 内网渗透 - 学习手册-CSDN博客 0x01&#xff1a;Web 安全攻防 —— 信息收集篇 Web 信息收集 — 手动收集域名信息 Web 信息收集 — 手动收集 IP 信息 Web 信息收集 — 端口服务信息收集 Web 信息收集 — 自动化信息收集 — ShuiZe 水泽 We…...

nextjs的记录一些小东西

1. 格式化时间&#xff1a;使用date-fns库 npm install date-fns 在组建中创建date.js import { parseISO, format } from date-fnsexport default function Date({ dateString }) {const date parseISO(dateString)return <time dateTime{dateString}>{format(date,…...

故障诊断 | PID搜索算法优化CatBoost故障诊断(MatlabPython)

目录 效果一览文章概述故障诊断 | PID搜索算法优化CatBoost故障诊断(Matlab&Python)PID搜索算法优化CatBoost故障诊断PID搜索算法优化CatBoost故障诊断一、引言1.1、研究背景与意义1.2、研究现状1.3、研究目的与内容二、CatBoost算法概述2.1、CatBoost算法原理2.2、CatBo…...

探索关键领域的AI工具:机器学习、深度学习、计算机视觉与自然语言处理

引言 在人工智能(AI)迅猛发展的今天&#xff0c;机器学习(ML)、深度学习(DL)、计算机视觉(CV)和自然语言处理(NLP)已经成为解决复杂问题的关键技术。无论是自动驾驶车辆的视觉识别&#xff0c;还是智能助手的对话理解&#xff0c;这些技术都在改变着世界。本文将介绍在各个领域…...

使用 DeepSeek 生成流程图、甘特图与思维导图:结合 Typora 和 XMind 的高效工作流

在现代工作与学习中&#xff0c;可视化工具如流程图、甘特图和思维导图能够极大地提升信息整理与表达的效率。本文将详细介绍如何使用 DeepSeek 生成 Mermaid 文本&#xff0c;结合 Typora 快速生成流程图和甘特图&#xff0c;并通过 Markdown 格式生成思维导图&#xff0c;最终…...

11、集合框架

一、简介 Java集合框架位于java.util包中 Collection是Set和List的父类&#xff0c;Collections是工具类&#xff0c;提供了对集合进行排序、遍历等多种算法的实现。 ArrayList: 有序(放进去顺序和拿出来顺序一致)&#xff0c;可重复 HashSet: 无序(放进去顺序和拿出来顺序不…...

从入门到精通Rust:资源库整理

今天给大家分享一些优质的Rust语言学习资源&#xff0c;适合不同水平的学习者。前三个官方资源是我Rust语言的启蒙老师&#xff0c;非常平易近人。 官方资源 The Rust Programming Language (The Book) 链接: https://doc.rust-lang.org/book/ 简介: 官方权威指南&#xff0c…...

Spring Boot 项目启动命令大全:参数详解与高阶用法

Spring Boot 项目启动命令大全&#xff1a;参数详解与高阶用法 一、基础启动命令 默认启动命令 java -jar xxx.jar适用场景&#xff1a;开发环境快速启动&#xff0c;使用默认配置&#xff08;端口 8080&#xff0c;内存由 JVM 自动分配&#xff09;。 指定 JVM 内存参数 java…...

c++day4

作业 #include <iostream> #include <cstring> #include <cstdlib> #include <unistd.h> #include <sstream> #include <vector> #include <memory>using namespace std; class S{ private:int a;int b; public:S(i…...

应对LLM应用中的AI幻觉,如何通过Token对数概率预测LLM的可靠性

应对LLM应用中的AI幻觉 如何通过Token对数概率预测LLM的可靠性 内容&#xff1a; 1. 相关机器学习&#xff08;ML&#xff09;概念回顾&#xff08;精准度/召回率&#xff0c;LLM直觉&#xff09; 2. 使用序列对数概率度量作为LLM信心 3. 通过案例研究结果过滤低质量LLM输出…...

Openwrt路由器操作系统

一、什么是 OpenWrt&#xff1f; OpenWrt 是一个基于 Linux 的开源操作系统&#xff0c;主要设计用于嵌入式设备&#xff0c;尤其是路由器。与其说是传统的路由器固件&#xff0c;不如说它是一个路由器操作系统。 传统的路由器固件通常由路由器厂商开发&#xff0c;功能相对固…...

基于SpringBoot的“流浪动物救助系统”的设计与实现(源码+数据库+文档+PPT)

基于SpringBoot的“流浪动物救助系统”的设计与实现&#xff08;源码数据库文档PPT) 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;SpringBoot 工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 系统展示 系统功能结构图 局部E-R图 系统首页界面 系统…...

Ansible 学习笔记

这里写自定义目录标题 基本架构文件结构安装查看版本 Ansible 配置相关文件主机清单写法 基本架构 Ansible 是基于Python实现的&#xff0c;默认使用22端口&#xff0c; 文件结构 安装 查看用什么语言写的用一下命令 查看版本 Ansible 配置相关文件 主机清单写法...

(六)趣学设计模式 之 代理模式!

目录 一、啥是代理模式&#xff1f;二、为什么要用代理模式&#xff1f;三、代理模式的实现方式1. 静态代理2. JDK动态代理3. CGLIB动态代理 四、三种代理的对比五、代理模式的优缺点六、代理模式的应用场景七、总结 &#x1f31f;我的其他文章也讲解的比较有趣&#x1f601;&a…...

【CSS】HTML元素布局基础总结

HTML默认布局和元素显示 CSS 元素显示 { HTML 默认布局&#xff1a; 流式布局 { 从左到右&#xff0c;从上到下 随页面宽度变化动态排列元素 文档流&#xff1a;整个 H T M L 文档的流式布局 HTML 元素分为 { 块级元素 &#xff1a;默认占满一行 行内元素 &#xff1a;在行内最…...

【JavaScript】什么是JavaScript?以及常见的概念

作为 JavaScript 初学者&#xff0c;想要更好地理解这门语言&#xff0c;需要从核心概念、实践练习和项目实战三个方面入手。下面是详细的学习路线和方法&#xff0c;帮助你系统性地掌握 JavaScript。 一、理解 JavaScript 的核心概念 JavaScript 是一门动态、弱类型的编程语言…...

为什么要将PDF转换为CSV?CSV是Excel吗?

在企业和数据管理的日常工作中&#xff0c;PDF文件和CSV文件承担着各自的任务。PDF通常用于传输和展示静态的文档&#xff0c;而CSV因其简洁、易操作的特性&#xff0c;广泛应用于数据存储和交换。如果需要从PDF中提取、分析或处理数据&#xff0c;转换为CSV格式可能是一个高效…...

P1038 [NOIP 2003 提高组] 神经网络

题目描述 在兰兰的模型中&#xff0c;神经网络就是一张有向图&#xff0c;图中的节点称为神经元&#xff0c;而且两个神经元之间至多有一条边相连&#xff0c;下图是一个神经元的例子&#xff1a; 神经元&#xff08;编号为 i&#xff09; 图中&#xff0c;X1​∼X3​ 是信息…...

TypeScript 类型断言的适用场景及代码示例

类型断言的适用场景及代码示例 适用场景 类型断言就像是你很确定某个东西是什么&#xff0c;然后直接告诉 TypeScript 编译器“相信我&#xff0c;它就是这个类型”。以下是几种常见的适用场景&#xff1a; 从 any 类型恢复具体类型&#xff1a;当你使用 any 类型时&#xf…...

Docker 容器

Docker 是一种开源的容器化平台&#xff0c;可以让开发人员将应用程序及其依赖项打包到一个可移植的容器中&#xff0c;然后部署到任何支持 Docker 的环境中。Docker 的基本概念包括以下几点&#xff1a; 1. **容器(Container)**&#xff1a;容器是一个独立、轻量级的运行环境…...

Spark(3)vi的基本使用

一.打开与创建文件 二.三种模式 三. 光标操作 四.复制粘贴 一.打开与创建文件 它是linux的内置命令&#xff0c;所以还是以命令的方式来运行。 命令的格式是&#xff1a;Vi /路径/文件名。要注意如下两种情况&#xff1a; 1.如果这个文件不存在&#xff0c;此时就是新建文…...

element-ui的组件使用

1. 安装 Element UI&#xff08;在文件夹最上面输入cmd进入dos窗口&#xff0c;然后输入安装指令 npm install element-ui --save&#xff09; 2.在main.js文件全局引入(main.js文件负责 全局注册 )&#xff0c;在该文件注册的所有组件在其他文件都能直接调用&#xff0c;一般…...

Starlink卫星动力学系统仿真建模第九讲-滑模(SMC)控制算法原理简介及卫星控制应用

滑模控制&#xff08;Sliding Mode Control&#xff09;算法详解 一、基本原理 滑模控制&#xff08;Sliding Mode Control, SMC&#xff09;是一种变结构控制方法&#xff0c;通过设计一个滑模面&#xff08;Sliding Surface&#xff09;&#xff0c;迫使系统状态在有限时间内…...

《深度剖析Linux 系统 Shell 核心用法与原理_666》

1. 管道符的用法 查找当前目录下所有txt文件并统计行数 # 使用管道符将ls命令的结果传递给wc命令进行行数统计 ls *.txt | wc -l 在/etc目录下查找包含"network"的文件并统计数量 # 使用find命令查找文件&#xff0c;并通过grep查找包含特定字符串的文件&#xf…...

51单片机学习之旅——定时器

打开软件 1与其它等于其它&#xff0c;0与其它等于0 1或其它等于1&#xff0c;0或其它等于其它 TMODTMOD&0xF0;//0xF01111 0000进行与操作&#xff0c;高四位保持&#xff0c;低四位清零&#xff0c;高四位定时器1&#xff0c;低四位定时器0 TMODTMOD|0x01;//0x010000 0…...