| | |
| | | # Object Detection |
| | | # 地物目标检测 |
| | | |
| | | - 输入:无人机照片或视频帧。 |
| | | - 输出:目标框、类别、置信度和位置。 |
| | | - 首个 Demo:10–30 张图片的预训练模型推理与 JSON 导出。 |
| | | ## 目标 |
| | | |
| | | 先做一个可在本机 CPU 运行的预训练模型 Demo:输入无人机照片,输出带目标框、类别和置信度的标注图片,以及结构化 JSON。第二阶段再支持正射 GeoTIFF 切片,并把像素坐标转换为经纬度后输出 GeoJSON,便于接入现有 Cesium 地图和算法管理模块。 |
| | | |
| | | 本能力使用 [opengeos/geoai](https://github.com/opengeos/geoai) 发布的 `geoai-py` 作为 GeoAI 工作流层。它负责把地理影像处理、AI 推理、地理结果和可视化串起来;PyTorch、Rasterio、GeoPandas 等仍是它和本 Demo 的底层运行依赖。 |
| | | |
| | | ## 当前范围 |
| | | |
| | | 首版优先识别人员、车辆。`geoai-py` 自带的 NWPU-VHR10 预训练模型面向航空影像,并提供统一的 `vehicle` 类,但不包含人员和树木;因此当前采用“切片 YOLO 检人员 + GeoAI NWPU 检车辆”的分支方案。树木通常需要专门的树冠/单木数据集和模型微调。 |
| | | |
| | | ## 需要你准备的内容 |
| | | |
| | | 1. **目标清单**:请先确定最关心的 3–5 类目标,例如人员、车辆、挖掘机、船只、建筑物。 |
| | | 2. **样例图片**:准备 10–30 张无人机 JPG/PNG,尽量包含不同高度、角度、天气和目标大小。不要使用涉密或未经授权的照片。 |
| | | 3. **正射样例(第二阶段)**:准备 1–2 份 GeoTIFF,并记录坐标系、分辨率和拍摄时间。 |
| | | 4. **输出接入约定**:确认结果需要保存为 JSON/GeoJSON,还是还要生成 Cesium 可加载的 GeoJSON/KML。 |
| | | 5. **验收样例**:从图片中挑选 5 张作为固定验收集,不参与后续调参。 |
| | | |
| | | ## 目录约定 |
| | | |
| | | ```text |
| | | 01-object-detection/ |
| | | |-- README.md |
| | | |-- requirements.txt |
| | | |-- src/ # 推理和结果转换代码 |
| | | |-- scripts/ # 一键运行脚本 |
| | | |-- tests/ # 单元测试 |
| | | shared/ |
| | | |-- data/raw/01-object-detection/ # 原始图片,只存本地 |
| | | |-- data/processed/01-object-detection/ # 切片或预处理结果 |
| | | |-- models/01-object-detection/ # 模型权重,不提交 Git |
| | | `-- outputs/01-object-detection/ # 标注图、JSON、GeoJSON |
| | | ``` |
| | | |
| | | ## 环境与硬件 |
| | | |
| | | - 使用 Python 3.12 专用环境:`.venvs/01-object-detection`。 |
| | | - 当前电脑是 AMD RX 590 GME 8GB,不具备 NVIDIA CUDA;首版使用 CPU 推理。 |
| | | - 64GB 内存足够运行 10–30 张图片的 Demo。大尺寸正射影像需要切片,不能一次性全部载入内存。 |
| | | - 模型权重和 Python 包必须记录版本与许可证,产品使用前检查是否允许商用。 |
| | | - `geoai-py` 项目本身为 MIT 许可证;它依赖的模型权重、数据集和第三方库仍需分别核查许可证。`ultralytics` 等可选底层组件的许可证不能由 GeoAI 的 MIT 许可证自动覆盖。 |
| | | |
| | | ## 预期输入输出 |
| | | |
| | | 输入:JPG/PNG 图片,或第二阶段的 GeoTIFF。 |
| | | |
| | | 输出: |
| | | |
| | | - `annotated/`:画出检测框和标签的图片; |
| | | - `detections.json`:图片名、类别、置信度、像素框坐标; |
| | | - `detections.geojson`:正射影像场景下的地理框或中心点; |
| | | - `run_metadata.json`:模型版本、阈值、运行时间、设备(CPU/DirectML)。 |
| | | |
| | | ## 首版验收标准 |
| | | |
| | | - 能通过命令行处理单张图片和一个图片目录; |
| | | - 输出图片能看到检测框、类别和置信度; |
| | | - JSON 字段固定且可被前端读取; |
| | | - 对固定 5 张验收图片,结果可重复生成; |
| | | - 无 GPU 时能正常运行,并对超大图片给出清晰错误提示或自动缩放; |
| | | - 运行日志包含模型、置信度阈值、输入数量、输出路径和耗时。 |
| | | |
| | | ## 预计开发顺序 |
| | | |
| | | 1. 创建专用环境并安装 PyTorch、torchvision、Ultralytics; |
| | | 2. 下载并登记一个允许研究/商用核查的预训练权重; |
| | | 3. 完成单图推理; |
| | | 4. 完成目录批处理、标注图和 JSON 导出; |
| | | 5. 用你的无人机图片验证并调整阈值; |
| | | 6. 增加 GeoTIFF 切片和 GeoJSON 坐标转换; |
| | | 7. 最后再做 FastAPI 接口和现有前端接入。 |
| | | |
| | | ## 当前 Demo 运行命令 |
| | | |
| | | 在项目根目录执行人员/通用车辆切片基线: |
| | | |
| | | ```powershell |
| | | .\.venvs\01-object-detection\Scripts\python.exe .\capabilities\01-object-detection\run_detection.py |
| | | ``` |
| | | |
| | | 默认使用 CPU、`yolo11n.pt`、1024 像素切片、20% 重叠和置信度阈值 0.20。 |
| | | 结果写入 `shared/outputs/01-object-detection/`。 |
| | | |
| | | 执行 GeoAI NWPU-VHR10 航拍车辆检测: |
| | | |
| | | ```powershell |
| | | .\.venvs\01-object-detection\Scripts\python.exe .\capabilities\01-object-detection\run_geoai_vehicle_detection.py |
| | | ``` |
| | | |
| | | 该脚本默认使用 CPU、512 像素滑窗、128 像素重叠和置信度阈值 0.30,结果写入 |
| | | `shared/outputs/01-object-detection/geoai-vehicles/`。首次运行会自动下载约 98 MB |
| | | 的模型权重。 |
| | | |
| | | ## 当前验证结论 |
| | | |
| | | - `DJI_20260810092727_0001_V_10.jpeg`:通用 YOLO 检出 2–3 辆车;GeoAI NWPU 检出 33 个车辆候选,CPU 推理约 90 秒,明显改善俯视小车辆漏检。 |
| | | - `DJI_20260713102047_0001_V_19.jpeg`:切片 YOLO 检出多个人员,但两种模型均未检出右上角红色汽车;该近景车顶外观仍需要更匹配的航拍数据或本项目样本微调。 |
| | | - NWPU 会产生少量其他航拍类别误检,正式 Demo 只保留 `vehicle`;脚本还会过滤被高置信度整车框大部分包含的重复局部框。 |
| | | - 树木不属于当前两个模型的有效类别,必须单独建设树冠检测/分割分支。 |