前后端 GIS/遥感项目的标准做法;GeoJSON 与Polygon的关系;mask 与 GeoJSON 的关系;GeoJSON结构;docker开发与生产环境的区分;docker正式环境部署代码;Docker内部apt-get问题;

1.前后端 GIS/遥感项目的标准做法
把模型输出的 mask(像素级掩码)转成 Polygon → 再封装成 GeoJSON → 返回前端。
GeoJSON 是一个用 JSON 描述地理图形的标准格式,易传输、易展示,但不适合大规模高性能渲染。
模型返回掩码的维度显示:
masks.shape()
▶ 这是典型的 N × H × W 格式
每个掩码已经是 二维 (H, W),不需要 squeeze 任何维度。
✅ masks.shape = (12, 441, 759)
这代表:
12:有 12 个掩码(N = 12,代表图像中有12个目标)
441:高度 H
759:宽度 W
这里的 441(高度 H)和 759(宽度 W)就是你输入图片的真实像素尺寸。
不过需要注意一个关键点:
有些模型会对图片做缩放/填充(resize或pad),所以 H、W 有时不一定等于原图大小,而是“模型处理后的大小”。

2.mask 与 GeoJSON 的关系
从 mask 转 polygon → GeoJSON 时,需要确保:
👉 mask 的 H,W 对应的是原图坐标
否则前端显示时位置会不对。
如果模型 resize 过图片,你需要把 polygon 反变换回原图尺寸(我可以给你代码)。

🎯 重点:GeoJSON 不是给“地块”专用的
GeoJSON 只是一个「地理格式」,和你的对象类型并没有直接关系。
你把 mask 转 polygon 时,它本质是一个二维平面坐标(像素坐标系)。
你可以选择加坐标系,让 GeoJSON 真正成为地理坐标。
也可以把它当成普通 polygon——前端照样能渲染,只是坐标不是经纬度。

3.GeoJSON 与Polygon的关系
你可以理解为:
Polygon 是“纯几何图形”
只是点:
[[x1, y1], [x2, y2], ...]
GeoJSON 是“带身份证的图形”
不仅是点

4.GeoJSON结构

FeatureCollection
└── features[]
    └── Feature
        ├── properties
        └── geometry
            ├── type = Polygon
            └── coordinates
                └── [  [ [x,y], [x,y], ... ]  ]

FeatureCollection = 整个结果集
Feature = 一个 mask 的轮廓
properties = 用来存放非空间属性id{类别(果实、叶片、病害)、面积、平均颜色、mask 置信度、预测类别}
geometry = 这个 mask 的多边形边界
coordinates = 多边形所有点的顺序坐标

如果后面做成农田 SaaS:
大量地块
大范围卫星图
大规模面状数据

5.docker开发与生产环境的区分

场景 推荐方式
开发阶段频繁改代码 用挂载卷 -v
临时修 bug 不想重建镜像 用 docker cp
发布正式版本 重建镜像

✅ 结论:最舒服的做法就是开发和生产分离
制作镜像前一定要更新requirements.txt
开发环境:
📌 挂载代码(volumes)+ 自动 reload
生产环境:
📌 只复制代码到镜像(COPY)+ 重建镜像
不用挂载,本地代码复制到容器
docker cp ./main.py sam3_app:/app/main.py
把整个 api 目录复制进容器
docker cp ./api <容器名>:/app/api

6.docker正式环境部署代码
生产环境(正式上线)绝对不应该加 -it。
docker run --name sam3 -d --gpus all --restart=always -p 8002:8002 sam3:v1

参数 作用 是否推荐
-d 后台运行 ✔ 正式环境必须
--gpus all 使用全部 GPU ✔ 必要
--restart=always 容器异常退出自动重启 ✔ 正式环境强烈推荐
-p 8002:8002 映射端口 ✔ 必要
--name sam3 容器名称

🧱 可选:挂载日志(方便排查错误)
-v /var/log/sam3:/app/logs

本地 OS 自带 libgl1,但 docker 镜像(slim 或 python 镜像)里 不带 GUI 相关库。
在你的 Dockerfile 里加上:

RUN apt-get update && apt-get install -y libgl1

7.Docker内部opencv-python问题;

注释掉# opencv-python4.11.0.86
安装对应版本的opencv-python-headless
4.11.0.86
RUN pip install opencv-python-headless==4.11.0.86
opencv-python-headless 是 OpenCV 官方提供的一个 Python 包,
它和 opencv-python 功能几乎相同,但去掉了 GUI 相关的依赖。
它特别适合 服务器、Docker 容器、远程环境,不需要显示界面即可处理图像和视频。

posted @ 2026-01-23 11:58  asphyxiasea  阅读(2)  评论(0)    收藏  举报