1. 引言
aiearth-core 是 AI Earth 平台推出的 Python 核心开发包,面向遥感影像处理、地理空间分析和 AI 模型应用场景,提供统一、简洁的编程接口。它把复杂的遥感数据获取、预处理、模型推理和结果可视化封装成易于调用的 API,帮助开发者快速构建遥感应用。
本文将从功能特性、安装配置、核心语法与参数、9 个实际应用案例以及常见错误与注意事项五个方面,系统介绍 aiearth-core 的使用方法。
2. 功能概述
aiearth-core 的核心功能可以归纳为以下几类:
- 数据获取:支持从 AI Earth 平台拉取多源遥感影像数据,包括光学影像、SAR 影像、气象数据等。
- 影像预处理:提供辐射定标、大气校正、几何校正、云掩膜等常用预处理能力。
- 地理空间分析:内置波段运算、指数计算(如 NDVI、NDWI)、影像裁剪、镶嵌、重投影等空间分析工具。
- AI 模型推理:封装平台预训练模型,支持地物分类、目标检测、变化检测、语义分割等任务。
- 结果可视化:提供便捷的影像展示与导出接口,支持生成 RGB 合成图、专题图等。
3. 安装与配置
3.1 环境要求
aiearth-core 基于 Python 3.7 及以上版本开发,建议使用 Python 3.8 或更高版本。依赖的核心库包括 numpy、opencv-python、shapely、pyproj 等,安装时会自动处理。
3.2 安装命令
推荐使用 pip 进行安装:
pip install aiearth-core如果需要安装最新开发版本,可以从 GitHub 仓库安装:
pip install git+https://github.com/aiearth/aiearth-core.git3.3 初始化配置
使用前需要配置 AI Earth 平台的访问凭证。推荐通过环境变量方式配置:
export AIEARTH_ACCESS_KEY_ID=your_access_key_id export AIEARTH_ACCESS_KEY_SECRET=your_access_key_secret也可以在代码中显式初始化:
import aie aie.Initialize( access_key_id="your_access_key_id", access_key_secret="your_access_key_secret" )4. 核心语法与参数
4.1 数据加载
通过aie.Image加载单景影像,通过aie.ImageCollection加载影像集合:
import aie 加载单景影像 image = aie.Image("S2A_20230101_123456") 加载影像集合 collection = aie.ImageCollection("S2_SR") .filterDate("2023-01-01", "2023-01-31") .filterBounds(aie.Geometry.Point([116.4, 39.9]))4.2 波段选择与运算
使用select选择波段,使用expression进行波段运算:
# 选择波段 rgb = image.select(["B4", "B3", "B2"]) 计算 NDVI ndvi = image.expression( "(B8 - B4) / (B8 + B4)", {"B8": image.select("B8"), "B4": image.select("B4")} )4.3 裁剪与镶嵌
# 按几何裁剪 geometry = aie.Geometry.Polygon([[[116.3, 39.8], [116.5, 39.8], [116.5, 40.0], [116.3, 40.0]]]) clipped = image.clip(geometry) 镶嵌多景影像 mosaic = collection.mosaic()4.4 模型推理
调用平台预训练模型进行推理:
# 地物分类 result = aie.Model("land_cover_classification").predict(image) 目标检测 detections = aie.Model("object_detection").predict(image)4.5 结果导出
# 导出到本地 task = aie.Export.image_to_drive( image=ndvi, description="ndvi_result", folder="aiearth_output", region=geometry, scale=10 ) task.start()5. 9 个实际应用案例
5.1 案例一:NDVI 植被指数计算
计算 Sentinel-2 影像的 NDVI,用于植被覆盖监测:
import aie aie.Initialize() 加载影像 image = aie.Image("S2A_20230615_123456") 计算 NDVI ndvi = image.expression( "(B8 - B4) / (B8 + B4)", {"B8": image.select("B8"), "B4": image.select("B4")} ) 可视化参数 vis_params = {"min": -1, "max": 1, "palette": ["blue", "white", "green"]} 导出结果 task = aie.Export.image_to_asset( image=ndvi, description="ndvi_export", asset_id="user/ndvi_result", scale=10 ) task.start()5.2 案例二:水体提取(NDWI)
利用 NDWI 指数提取水体范围:
import aie aie.Initialize() image = aie.Image("S2A_20230420_789012") 计算 NDWI ndwi = image.expression( "(B3 - B8) / (B3 + B8)", {"B3": image.select("B3"), "B8": image.select("B8")} ) 阈值分割提取水体 water = ndwi.gt(0.1) 统计水体面积 area = water.multiply(aie.Image.pixelArea()).reduceRegion( reducer=aie.Reducer.sum(), geometry=image.geometry(), scale=10 ) print("水体面积(平方米):", area.getInfo())5.3 案例三:土地利用分类
使用平台预训练模型进行土地利用分类:
import aie aie.Initialize() image = aie.Image("S2A_20230510_345678") 调用地物分类模型 model = aie.Model("land_cover_classification") result = model.predict(image) 可视化分类结果 vis_params = { "min": 0, "max": 8, "palette": ["red", "green", "blue", "yellow", "cyan", "magenta", "orange", "purple"] } 导出分类结果 task = aie.Export.image_to_asset( image=result, description="land_cover_result", asset_id="user/land_cover", scale=10 ) task.start()5.4 案例四:时序 NDVI 变化监测
基于多期影像分析植被长势变化:
import aie aie.Initialize() 加载 2023 年 4-9 月影像集合 collection = aie.ImageCollection("S2_SR") .filterDate("2023-04-01", "2023-09-30") .filterBounds(aie.Geometry.Point([116.4, 39.9])) 计算每月 NDVI 并合成 def compute_ndvi(image): ndvi = image.expression( "(B8 - B4) / (B8 + B4)", {"B8": image.select("B8"), "B4": image.select("B4")} ) return ndvi.rename("NDVI") ndvi_collection = collection.map(compute_ndvi) 按月合成最大值 monthly_max = ndvi_collection.reduce( reducer=aie.Reducer.max(), group_by="month" ) 计算生长季 NDVI 最大值 growing_season_max = monthly_max.max() print("生长季 NDVI 最大值:", growing_season_max.getInfo())5.5 案例五:影像镶嵌与裁剪
将多景影像镶嵌后按行政区裁剪:
import aie aie.Initialize() 加载多景影像 collection = aie.ImageCollection("S2_SR") .filterDate("2023-06-01", "2023-06-30") .filterBounds(aie.Geometry.Polygon([[[116.0, 39.5], [117.0, 39.5], [117.0, 40.5], [116.0, 40.5]]])) 镶嵌 mosaic = collection.mosaic() 按行政区边界裁剪 admin_boundary = aie.FeatureCollection("user/admin_boundary") clipped = mosaic.clipToCollection(admin_boundary) 导出 task = aie.Export.image_to_asset( image=clipped, description="mosaic_clipped", asset_id="user/mosaic_result", scale=10 ) task.start()5.6 案例六:夜间灯光数据分析
分析夜间灯光数据,辅助城市发展研究:
import aie aie.Initialize() 加载夜间灯光影像 nightlight = aie.Image("NPP_VIIRS_202301") 提取城市核心区(高亮区域) urban_core = nightlight.select("Nightlight").gt(30) 统计城市核心区面积 area = urban_core.multiply(aie.Image.pixelArea()).reduceRegion( reducer=aie.Reducer.sum(), geometry=nightlight.geometry(), scale=500 ) print("城市核心区面积(平方公里):", area.getInfo() / 1e6)5.7 案例七:SAR 影像洪水监测
利用 Sentinel-1 SAR 影像识别洪水淹没范围:
import aie aie.Initialize() 加载洪水前后 SAR 影像 before = aie.Image("S1_20230701") after = aie.Image("S1_20230715") 计算后向散射差异 diff = after.select("VV").subtract(before.select("VV")) 阈值提取洪水区域(后向散射显著下降区域) flood = diff.lt(-3) 可视化 vis_params = {"min": 0, "max": 1, "palette": ["white", "blue"]} 导出洪水范围 task = aie.Export.image_to_asset( image=flood, description="flood_map", asset_id="user/flood_result", scale=10 ) task.start()5.8 案例八:目标检测(船舶识别)
使用目标检测模型识别港口船舶:
import aie aie.Initialize() 加载高分辨率影像 image = aie.Image("GF2_20230801_123456") 调用船舶检测模型 model = aie.Model("ship_detection") detections = model.predict(image) 获取检测结果(返回 GeoJSON 格式) features = detections.getInfo() print("检测到船舶数量:", len(features["features"])) 遍历检测结果 for feature in features["features"]: coords = feature["geometry"]["coordinates"] confidence = feature["properties"]["confidence"] print(f"船舶位置: {coords}, 置信度: {confidence:.2f}")5.9 案例九:变化检测(城市扩张)
对比两期影像识别城市扩张区域:
import aie aie.Initialize() 加载两期影像 image_2020 = aie.Image("S2A_20200601_111111") image_2023 = aie.Image("S2A_20230601_222222") 调用变化检测模型 model = aie.Model("change_detection") change_map = model.predict(image_2020, image_2023) 提取扩张区域(类别 1 表示新增建设用地) expansion = change_map.eq(1) 统计扩张面积 area = expansion.multiply(aie.Image.pixelArea()).reduceRegion( reducer=aie.Reducer.sum(), geometry=image_2023.geometry(), scale=10 ) print("城市扩张面积(平方米):", area.getInfo())6. 常见错误与使用注意事项
6.1 常见错误
| 错误类型 | 错误信息示例 | 解决方法 |
|---|---|---|
| 初始化失败 | AccessKey 无效或未配置 | 检查环境变量或 Initialize 参数是否正确 |
| 影像 ID 错误 | Image not found | 确认影像 ID 是否存在,检查平台数据目录 |
| 波段名称错误 | Band B5 does not exist | 使用 select 前先通过 image.bandNames() 确认波段 |
| 几何边界越界 | Geometry exceeds valid range | 检查经纬度范围是否在有效区间内 |
| 内存溢出 | MemoryError | 缩小处理范围或降低分辨率,分批处理 |
| 导出任务失败 | Export task failed | 检查 asset_id 权限、存储空间和网络连接 |
6.2 使用注意事项
- 凭证安全:AccessKey 属于敏感信息,不要硬编码在代码中,建议使用环境变量或密钥管理服务。
- 数据范围:处理前先确认影像覆盖范围与目标区域一致,避免因边界不匹配导致结果异常。
- 波段选择:不同传感器波段编号不同,使用前务必确认影像的波段名称,避免张冠李戴。
- 分辨率匹配:多源数据叠加分析时,注意统一分辨率,必要时使用 resample 方法重采样。
- 异步任务:导出等耗时操作采用异步机制,任务提交后需轮询状态或使用回调函数获取完成通知。
- 配额限制:平台对并发任务和数据量有配额限制,大批量处理时注意控制任务数量,避免触发限流。
- 版本兼容:升级 aiearth-core 前查看更新日志,部分 API 可能存在不兼容变更。
7. 总结
aiearth-core 为遥感开发者提供了从数据获取、预处理、分析到模型推理的一站式解决方案。通过本文介绍的 9 个案例,可以快速上手常见的遥感应用场景。在实际使用中,建议结合官方文档和平台数据目录,灵活组合各类 API,构建适合自身业务需求的遥感应用。
《AI提示工程必知必会》为读者提供了丰富的AI提示工程知识与实战技能,主要包括各类提示词的应用,如问答式、指令式、状态类、建议式、安全类和感谢类提示词,以及如何通过实战演练掌握提示词的使用技巧;使用提示词进行文本摘要、改写重述、语法纠错、机器翻译等语言处理任务,以及在数据挖掘、程序开发等领域的应用;AI在绘画创作上的应用,百度文心一言和阿里通义大模型这两大智能平台的特性与功能,以及市场调研中提示词的实战应用。通过阅读《AI提示工程必知必会》,读者可掌握如何有效利用AI提示工程提升工作效率,创新工作流程,并在职场中脱颖而出。