NSDT工具推荐: Three.js AI纹理开发包 - YOLO合成数据生成器 - GLTF/GLB在线编辑 - 3D模型格式在线转换 - 可编程3D场景编辑器 - REVIT导出3D模型插件 - 3D模型语义搜索引擎 - AI模型在线查看 - Three.js虚拟轴心开发包 - 3D模型在线减面 - STL模型在线切割 - 3D道路快速建模
你可以使用计算机视觉模型从卫星和无人机图像中提取有关感兴趣对象的信息,但机器学习模型只会告诉你对象在图像中的位置,而不是它在地球上的位置。
要获取对象的 GPS 位置,你需要将模型的输出与其他一些信息结合起来。 此过程称为地理配准(georeferencing)。
在这篇文章中,我们将展示如何训练计算机视觉模型以从上方检测太阳能电池板,并将其输出与 DJI Mavic Air 2 的视频和飞行日志相结合,以在地图上绘制预测并向你展示如何使用计算机 无人机的视野。
1、检测航拍图像中的对象
选项 1:查找预训练模型
Roboflow Universe 拥有最大的航拍图像数据集和预训练模型集合,它们为航拍计算机视觉用例提供支持,例如防止输油管道意外中断、对风力涡轮机进行编目和估算特斯拉工厂产量。
如果你正在寻找一个常见的对象,你可能可以在 Universe 上找到一个模型。 即使它不适合你的用例,也可以将其用作训练更好的自定义模型的起点。
选项 2:训练自定义模型
如果在 Roboflow Universe 上找不到可检测感兴趣的对象的预训练模型,可以使用YOLO等其他常用的模型。
2、如何在无人机上使用计算机视觉
接下来你可能想知道如何将无人机图像用于计算机视觉。 那么,我们需要做三件事:
- 了解如何将我们的图像坐标转换为地球上的位置,这个过程称为地理配准。
- 弄清楚如何从 DJI 无人机获取飞行数据。
- 使用计算机视觉推理来获取地图绘图、对象计数、对象测量、对象距离等输出。
3、什么是地理配准?
地理配准是将图像中包含的信息与其在地球表面上的位置和方向相关联的过程。 通常,我们在处理图像和视频时使用的坐标系是以像素为单位测量的,但是当我们处理地球上存在的物体的图像时,我们想知道它们在 GPS 坐标中的位置。
通过将地理空间元数据与图像相结合,在这两个空间参照系之间进行转换的过程称为地理配准。
4、获取检测到的物体的 GPS 坐标
你的计算机视觉模型会在图像和视频中找到物体,但对于航拍图像,我们通常更关心它们在地球上的位置。
在本教程的其余部分,我们将使用经过训练的模型来检测航拍图像中的太阳能电池板和使用 DJI Mavic Air 2 拍摄的视频。
5、获取并解析大疆无人机飞行日志
Internet 上的大多数资源建议使用 DJI 的 SRT 元数据文件,使用视频字幕从你的无人机视频中提取和使用飞行遥测,但不幸的是,这些文件不包含准确地理配准点所需的罗盘航向。
相反,我找到的关于如何从 DJI 无人机获取数据的最佳解决方案是通过使用这些说明链接你的 DJI 帐户,从 Airdata 提取完整的飞行日志数据。 这给出了一个 CSV 文件,其中包含飞行期间每 100 毫秒记录的遥测数据。
请注意,飞行日志记录了整个飞行过程中的条目,而不仅仅是在录制视频期间。 为了将视频与相关日志条目同步,我们过滤到 isVideo 为 1 的条目。目前代码使用第一个这样的连续块,因此如果你在飞行期间拍摄了多个视频,可能需要在加载之前拆分你的飞行日志。
6、将像素坐标转换为纬度和经度
为了将我们的像素坐标转换为 GPS 坐标,我们将利用从无人机飞行日志中提取的数据和一些三角函数。
我们需要从飞行日志中获取的三个关键信息是:
- 无人机的 GPS 坐标
- 罗盘航向/方位
- 地面以上高度
我们还需要知道拍摄视频时无人机相机的视野(对于 Mavic Air 2,结果是 60 度)。
使用高度和视野 (fov),我们可以通过获取 altitude * tan(fov)
来获得视频角点之间的距离,并且我们可以根据视频的纵横比 atan(videoHeight/videoWidth)
获得方位角和角点之间的偏移量 。
通过使用这些值,我们可以使用 turf.js 的 rhumbDestination
方法来计算角点的 GPS 位置(对于每个角点,从无人机的 GPS 位置开始,这是我们视频的中心点,然后在方向上移动距离 方位角 + 偏移量)并在地图上绘制视频。 我们可以使用相同的方法通过计算其相对于视频中心的距离和角度,将视频中的任何点转换为 GPS 位置。
注意:为了使此数学运算有效,必须在云台笔直向下 (90°) 的情况下拍摄视频。 通过在你所在区域允许的最高高度飞行来最大化无人机可以看到的区域,通常会获得最佳效果。
执行这些计算的源代码在 Github 上的 renderMap.js 中可用。
7、验证我们的计算
虽然不是绝对必要的(我们可以只导出我们发现的太阳能电池板的 CSV 或 JSON 文件),但我们将通过在地图上绘制飞行路径、视频和检测到的太阳能电池板来验证我们的计算是否正确。
为了渲染地图,我们使用 mapboxgl,一种基于 WebGL 的地图 API。 它支持将我们的飞行路径绘制为 GeoJSON 多边形并覆盖我们的视频。 它还支持在特定位置添加标记。
从技术上讲,这就是我们对机器学习模型的预测进行地理配准所需要做的全部工作,但是我们可以调整一些设置并添加一些额外的功能来改进我们的应用程序。
8、调整对象检测置信度
默认情况下,我们的计算机视觉模型将在 50% 的置信度时返回预测。 低置信度阈值会导致许多假阳性预测。
由于我们将处理许多视频帧,因此我们的模型将有很多机会识别我们感兴趣的对象,这意味着我们可以等到模型找到它非常确定的对象后再记录预测。
这个演示使用了 90% 的置信度阈值,但仔细观察它遗漏了一些太阳能电池板的输出,所以在未来的版本中它可能有助于稍微降低它(或者,理想情况下,改进我的模型,使其变得更有信心和适应变化 在照明、角度和环境中)。
我们可以在 main.js 的模型设置中调整此参数。
9、结合重复对象检测预测
由于我们的模型对许多视频帧进行预测,因此我们一定会多次预测同一块太阳能电池板。 由于预测的 x/y 位置的准确性、无人机的 GPS 位置以及遥测数据只有 100 毫秒的分辨率(但我们的无人机以 24 毫秒拍摄视频, 每秒 30 或 60 帧)。
为了解决这个问题,我们可以将预计彼此非常接近的太阳能电池板组合成地图上的单个标记。 通过将预测平均在一起,我们受益于许多视频帧提供的额外数据。
可以在renderMap.js开始处调整 MIN_SEPARATION_OF_DETECTIONS_IN_METERS
变量。
10、忽略杂散物体检测预测
即使在调整了置信度阈值之后,每隔一段时间,模型仍可能会犯错误并检测到实际上并不存在的对象。 这称为“误报”预测。
为了缓解这种情况,你可以添加一些代码来延迟在地图上显示标记,直到在至少两个独立的视频帧上检测到它。
此阈值可使用 renderMap.js 中的 MIN_DETECTIONS_TO_MAKE_VISIBLE
变量进行调整。
原文链接:Using Computer Vision with Drones for Georeferencing
BimAnt翻译整理,转载请标明出处