本项目旨在解决传统气象云图分析依赖人工判读、无法实现高频自动化监测的问题。气象部门、农业保险公司
、环境监测机构需要持续追踪云层覆盖变化,但人工从 FY-4A 或 ZoomEarth
等卫星数据源逐张判读云图效率极低,且无法做到 24 小时无人值守。
立项原因:传统气象云图分析依赖人工判读 FY-4A/ZoomEarth 等卫星数据,效率低且无法实现高频自动化。在
光伏电站功率预测、农业保险定损、航空航海气象保障等场景中,需要以小时级频率自动量化云量并输出结构
化数据
业务背景:精准农业保险需依据卫星云图判断受灾区域云层覆盖情况来定损;光伏电站需实时云量数据预测发
电功率以参与电力市场调度;气象科研人员需长期积累云量时序数据做气候模型训练。本项目填补了"开源、轻
量、可定时自动化"的云图监测工具空白。
1. 云图获取模块(downloader.py):支持 Mock 模式和真实卫星 API 双模式切换。Mock 模式用 OpenCV
生成红蓝半图+白云带的合成图像用于开发调试;真实模式通过 requests 从 ZoomEarth/FY-4A
等公开接口下载云图,内置指数退避重试(2^n 秒)和 HTTP 4xx/5xx 分类处理,非 4xx 错误自动重试最多 3
次。
2. NBRR 云量计算模块(nbrr.py):核心算法 |B−R|/(B+R) ≤ 0.05 判云。对 RGB
图像逐像素计算归一化红蓝比值,白色/灰色像素(云)NBRR ≈ 0 归为云,红色(陆地)≈ -1、蓝色(海洋)≈
1 排除。含完整的边界处理:除零保护、全黑损坏检测、最小尺寸校验、float32 精度保证。
3. 数据输出模块(writer.py):pandas + openpyxl 实现 Excel 原子追加写入(temp-file → rename
防止中途崩溃丢数据),CSV 流式追加(UTF-8 BOM 编码),cloud_pct 写入前校验(NaN/Inf/越界拒绝)。
4. 定时调度:schedule 库 + SIGTERM 优雅关闭,支持 Windows
计划任务一键安装(install_scheduled_task.bat)。
5. 自动化测试体系:31 个 pytest 用例(NBRR 16 个、Writer 11 个、E2E 4 个),pytest-cov
覆盖率报告(nbrr.py 100%、writer.py 91%),--test 自检模式(临时目录安全验证,不污染生产数据)。
- 完整项目架构设计:5 层数据流架构(获取 → 下载 → 计算 → 输出 → 测试)
- 全部代码实现:config.py(12 项 .env 驱动配置 + 运行时校验)、downloader.py(Mock/真实双模式 +重试引擎)、nbrr.py(NBRR 算法 + 6 种边界保护)、writer.py(openpyxl 原子写入 + CSV流式追加)、cloud_monitor.py(3 模式 CLI 入口 + schedule 调度 + SIGTERM 关闭 + 自检模式)
- 31 个 pytest 测试用例(0.76s 全绿)
- Windows 自动化部署脚本(计划任务安装、一键测试)
技术栈与架构亮点:
- Mock 优先策略:所有外部依赖(卫星 API)可 Mock,MOCK_MODE=true 默认零外部依赖即可跑通全流程
- 原子写入防数据丢失:Excel 写入采用 tempfile.mkstemp + shutil.move 原子 rename
模式,崩溃不丢历史数据
- O(1) Excel 追加:摒弃 pandas concat(O(n²) 内存),改用 openpyxl ws.append() 逐行追加
- 调度漂移防护:schedule.idle_seconds() 替代 time.sleep(1) 忙等
- 配置健壮性:所有 os.getenv() 带类型转换 try/except + 范围校验,非法值打 warning 回退默认
声明:本文仅代表作者观点,不代表本站立场。如果侵犯到您的合法权益,请联系我们删除侵权资源!如果遇到资源链接失效,请您通过评论或工单的方式通知管理员。未经允许,不得转载,本站所有资源文章禁止商业使用运营!

下载安装【程序员客栈】APP
实时对接需求、及时收发消息、丰富的开放项目需求、随时随地查看项目状态
评论