【airsim】computer_vision 源码阅读

api文档https://github.com/Microsoft/AirSim/blob/main/docs/image_apis.md#computer-vision-mode

capture_ir_segmentation

AirSim\PythonClient\computer_vision\capture_ir_segmentation.py
在重新分配分段 ID 后运行。它跟踪感兴趣的物体并记录多旋翼飞行器的红外图像和场景图像。它使用计算机视觉模式。
project_3d_point_to_screen用于将三维点投影到屏幕上的二维像素坐标。它接受以下参数:

subjectXYZ:待投影的三维点的坐标(X、Y、Z)。
camXYZ:相机的位置坐标(X、Y、Z)。
camQuaternion:相机的四元数表示的旋转。
camProjMatrix4x4:相机的投影矩阵。
imageWidthHeight:图像的宽度和高度。

函数的主要步骤如下:

将相机位置转换为列向量。
将相机的四元数旋转转换为偏航角、俯仰角和滚转角。
根据相机的俯仰角、滚转角和偏航角创建旋转矩阵。
将待投影的三维点坐标转换到相机的局部坐标系中。
通过矩阵乘法将坐标点旋转到相机的坐标系中。
重新创建相机的透视投影
将坐标点转换为像素值,并根据图像的宽度和高度进行归一化。
最后,函数返回投影点在屏幕上的二维像素坐标。

get_image请求图像

main用于跟随AirSim环境中的物体并记录图像

def main(client,objectList,pitch=numpy.radians(270), #image straight downroll=0,yaw=0,z=-122,writeIR=True,writeScene=False,irFolder='',sceneFolder=''):

其中

client:与AirSim的连接,例如client = MultirotorClient()用于无人机。
objectList:AirSim环境中要跟随的物体的标签列表。
pitch:俯仰角(弧度),在计算机视觉模式下表示相机角度。
roll:滚转角(弧度)。
yaw:偏航角(弧度)。
z:高度(米),根据NED坐标系,应为负值以在地面上方。
writeIR:如果为True,将写入红外图像。
writeScene:如果为True,将写入场景图像。
irFolder:红外图像的文件夹路径。
sceneFolder:场景图像的文件夹路径。

函数的主要步骤如下:

遍历物体列表。
获取物体的初始姿态。
在一定时间内循环捕获图像。
调用get_image函数获取图像,传入相机位置和姿态参数。
将彩色场景图像转换为BGR格式以便写入。
如果writeIR为True,则将红外图像写入指定文件夹。
如果writeScene为True,则将场景图像写入指定文件夹。
更新计数器和经过的时间。
获取物体的当前姿态。
使用project_3d_point_to_screen函数将物体的三维坐标投影到图像上,并打印出像素坐标。

create_ir_segmentation_map.py

重新映射红外放射指数。使用温度、发射率和相机响应信息来估计环境中物体的预期热数字计数,然后在 AirSim 中重新分配分段 ID 以匹配这些数字计数。应在开始捕获热红外数据之前运行它。否则,红外图像中的数字计数将不正确。相机响应、温度和发射率数据均包含非洲环境的数据。

cv_mode

移动相机并捕获图像的Python 代码示例

姿势设定

要使用 API 在环境中移动,可以使用simSetVehiclePoseAPI。该 API 获取位置和方向,并将其设置在前置中央摄像头所在的隐形车辆上。所有其余摄像机都保持相对位置移动。如果您不想更改位置(或方向),则只需将位置(或方向)的分量设置为浮点 nan 值。允许simGetVehiclePose检索当前姿势。您还可以使用simGetGroundTruthKinematics来获取运动的运动学量。许多其他非车辆特定 API 也可用,例如分段 API、碰撞 API 和相机 API。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/606088.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

qtday1(2024/1/8)

#include "mywidget.h"MyWidget::MyWidget(QWidget *parent): QMainWindow(parent) {//设置界面固定大小this->resize(1728,972);this->setFixedSize(1728,972);this->setWindowIcon(QIcon("C:\\Users\\78507\\Desktop\\pic\\qq1.png"));this->…

高级RAG(五):TruLens 评估-扩大和加速LLM应用程序评估

之前我们介绍了,RAGAs评估,今天我们再来介绍另外一款RAG的评估工具:TruLens , trulens是TruEra公司的一款开源软件工具,它可帮助您使用反馈功函数客观地评估基于 LLM 的应用程序的质量和有效性。反馈函数有助于以编程方式评估输入、输出和中间…

vue3 内置组件

文章目录 前言一、过渡效果相关的组件1、Transition2、TransitionGroup 二、状态缓存组件(KeepAlive)三、传送组件(Teleport )四、异步依赖处理组件(Suspense) 前言 在vue3中 其提供了5个内置组件 Transiti…

antv/x6_2.0学习使用(四、边)

一、添加边 节点和边都有共同的基类 Cell,除了从 Cell 继承属性外,还支持以下选项。 属性名类型默认值描述sourceTerminalData-源节点或起始点targetTerminalData-目标节点或目标点verticesPoint.PointLike[]-路径点routerRouterData-路由connectorCon…

猫咪吃哪种猫粮好?主食冻干猫粮哪种性价比高

由于猫咪是肉食动物,对蛋白质的需求很高,如果摄入的蛋白质不足,就会影响猫咪的成长。而冻干猫粮本身因为制作工艺的原因,能保留原有的营养成分和营养元素,所以冻干猫粮蛋白含量比较高,营养又高,…

Python3 集合

集合(set)是一个无序的不重复元素序列。 集合中的元素不会重复,并且可以进行交集、并集、差集等常见的集合操作。 可以使用大括号 { } 创建集合,元素之间用逗号 , 分隔, 或者也可以使用 set() 函数创建集合。 创建格…

第二十七周:文献阅读笔记

第二十七周:文献阅读笔记 摘要AbstractDenseNet 网络1. 文献摘要2. 引言3. ResNets4. Dense Block5. Pooling layers6. Implementation Details7. Experiments8. Feature Reuse9. 代码实现 总结 摘要 DenseNet(密集连接网络)是一种深度学习神…

技术总监写的十个方法,让我精通了lambda表达式

技术总监写的十个方法,让我精通了lambda表达式 Collection 转化为 Map使用样例代码展示 Map格式转换转换 Map 的 Value测试样例代码展示 集合类型转化Collection 和 List、Set 的转化测试样例 List、Set 类型之间的转换测试样例 前公司的技术总监写了工具类&#xf…

工智能基础知识总结--词嵌入之FastText

什么是FastText FastText是Facebook于2016年开源的一个词向量计算和文本分类工具,它提出了子词嵌入的方法,试图在词嵌入向量中引入构词信息。一般情况下,使用fastText进行文本分类的同时也会产生词的embedding,即embedding是fastText分类的产物。 FastText流程 FastText的架…

计算机组成原理简答题

目录 1、指令和数据在计算机内部以几进制存储,又是如何区分的呢? 2、计算机内部为什么要使用二进制? 3、简单描述计算机系统的层次结构 4、DRAM为什么要进行刷新,如何刷新的? 5、简述不同操作码的指令格式&#xf…

常用Java代码-Java中的多线程编程(Multi-threading)

多线程编程是Java中的一个重要概念,它允许程序在同一时刻执行多个任务,提高程序的执行效率和响应性。在Java中,多线程编程通过创建多个线程并利用线程来执行任务实现。 Java提供了Thread类和Runnable接口来实现多线程编程。Thread类是Java中…

FileStream文件管理

文件管理 FileStream:是一个用于读写文件的一个类。它提供了基于流的方式操作文件,可以进行读取、写入、查找和关闭等操作。 第一个参数:path(路径) 相对路径:相对于当前项目的bin目录下的Debug和Realse来…

EMD+包络谱故障诊断

EMD是一种信号处理方法,用于将信号分解成多个本征模态函数(Intrinsic Mode Functions,IMF),每个IMF代表信号中的一个固有振动模式。VMD在处理非平稳信号和非线性信号方面具有较好的性能。 包络谱峭度是一种用于描述信号包络频谱形状的特征。它通过对信号包络谱的谱线斜率…

[嵌入式AI从0开始到入土]10_yolov5在昇腾上应用

[嵌入式AI从0开始到入土]嵌入式AI系列教程 注:等我摸完鱼再把链接补上 可以关注我的B站号工具人呵呵的个人空间,后期会考虑出视频教程,务必催更,以防我变身鸽王。 第一章 昇腾Altas 200 DK上手 第二章 下载昇腾案例并运行 第三章…

Android 车联网——多屏多用户(十五)

前面几篇文章介绍了多用户和多屏相关的 Manager 和 Service。上一篇文章最后虽然车内乘员都根据配置有自己的对应屏幕,但默认情况下,所有车内乘员依然使用的是当前主用户(司机用户),这一篇我们继续放下看一下用户的创建与分配。 一、用户创建分配 1、创建用户 对于创建用…

【AI视野·今日NLP 自然语言处理论文速览 第七十一期】Fri, 5 Jan 2024

AI视野今日CS.NLP 自然语言处理论文速览 Fri, 5 Jan 2024 Totally 28 papers 👉上期速览✈更多精彩请移步主页 Daily Computation and Language Papers LLaMA Pro: Progressive LLaMA with Block Expansion Authors Chengyue Wu, Yukang Gan, Yixiao Ge, Zeyu Lu, …

JavaScript实现的复杂功能:自动生成带水印的图片

#程序员的崩溃瞬间 在本文中,我们将讨论一个JavaScript实现的复杂功能,该功能可以自动为图片添加水印。这个功能在许多场景中都非常有用,例如,如果你想保护你的图片版权,或者你想在你的网站上显示自定义的水印。 一、…

java导出word套打

这篇文档手把手教你完成导出word套打&#xff0c;有这个demo&#xff0c;其他word套打导出都通用。 1、主要依赖 <!--hutool--><dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.3.0</ve…

IPv6路由协议---IPv6动态路由(RIPng)

IPv6动态路由协议 动态路由协议有自己的路由算法,能够自动适应网络拓扑的变化,适用于具有一定数量三层设备的网络。缺点是配置对用户要求比较高,对系统的要求高于静态路由,并将占用一定的网络资源和系统资源。 路由表和FIB表 路由器转发数据包的关键是路由表和FIB表,每…

CreateDIBSection失败的问题记录

错误记录 [ERROR] (:0, ): QPixmap::fromWinHICON(), failed to GetIconInfo() (操作成功完成。) [ERROR] (:0, ): QPixmap::fromWinHICON(), failed to GetIconInfo() (参数错误。) [ERROR] (:0, ): QPixmap::fromWinHICON(), failed to GetIconInfo() (参数错误。) [ERROR] …