Skip to content

refactor(pixel-grid): migrate reconstructor to Python #613

Description

@huyanxius

Parent

#489

Context

#491 与 PR #495 采用 Rust 实现显式网格重建器。Review 已确认这部分只有约
500 行核心逻辑,算法本身不要求 Rust;继续保留 Rust 会额外引入工具链、PyO3、
跨平台构建和双语言维护成本。因此按导师意见等价迁移到服务端 Python。

本 Issue 替代 #491 中的 Rust 交付方向,后续新 PR 替代 #495

Outcome

提供一个基于 NumPy/Pillow 的向量化 Python 网格重建器,在算法和 RGBA 输出不变
的前提下,保持现有显式网格契约与可接受的服务端性能。

Scope

  • windup_app.server.pixel_perfect 下实现独立 Python 重建模块。
  • 保持 PNG/JPEG bytes + cols + rows + colors → 1x PNG 契约。
  • 原样保留 60,000 点确定性采样、固定种子 k-means++、15 轮 Lloyd 更新、两阶段结构投票、原色恢复与 alpha 多数票。
  • 保留当前透明像素 RGB 的参与规则;任何行为修复另开 Issue,不混入语言迁移。
  • 保留输入大小、图片像素、网格参数和 128 MiB 工作集边界;工作集估算包含 Python 色表与向量缓冲。
  • 使用 NumPy 向量化与同色点去重,不引入逐像素 Python 双重循环。
  • 用相同 fixture 对比当前 Rust 版本的输出、耗时和峰值内存。

Acceptance criteria

  • 现有 Rust 重建器的行为测试得到等价覆盖。
  • 规则网格输出尺寸严格为 cols × rows,透明度多数票保持一致。
  • 密集网格不会产生超出输入颜色范围的坏点。
  • 1024×1024 固定压测图与历史真实样图的 RGBA 输出逐像素等于 Rust 基线。
  • 同机预热后 7 次运行的 1024×1024 中位耗时不超过 Rust 基线的 1.7 倍。
  • Python 进程峰值 RSS 不超过 128 MiB,并记录处理增量。
  • 定向测试、Ruff、import-linter、锁文件检查和 git diff --check 通过。
  • 通过独立子代理验收后再创建 PR。

Exclusions

  • 不修改网格检测器。
  • 不接入默认生成管线。
  • 不包含前端、数据库、对象存储或媒体资产写入。
  • 不修复或重定义透明像素 RGB 行为。
  • 不处理隐含像素小于 3px 的自动识别。
  • feat(pixel-perfect): expose standalone native tool API #496 的 PyO3/API 调整在本 PR 完成后单独 rebase 处理。

Related

Refs #491
Refs #495
Refs #496

Metadata

Metadata

Assignees

No one assigned

    Labels

    MiniSpec小改动的精简规格enhancementNew feature or request

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions