1. 摘要
用 TRAE SOLO 独立完成了一款身份证照片水印保护 App「证印」,实现了隐形水印(DCT+QIM+BCH)+ 可见水印双模式。核心亮点:从零实现 BCH(31,16,3) 纠错编码、Arnold 置乱、完整 Flutter 工程化,并修复了 6 个关键算法 bug,最终 PSNR≥49dB、SSIM≥0.999,JPEG QF≥70 完全鲁棒。
2. 背景
我是一名业余开发者,经常需要处理身份证、合同等敏感证件的脱敏分享。市面上的很多水印工具要么只有可见水印(容易被裁剪),要么需要联网上传(隐私风险)。我希望做一款纯离线、双模式、高鲁棒的水印工具,但算法实现复杂度很高,尤其是 BCH 纠错编码和 DCT 频域嵌入。
3. 实践过程
任务拆解
- 核心算法验证(Python)
- Flutter 工程搭建
- Dart 算法移植
- Web 部署预览
关键操作
Step 1: 算法验证与 Bug 修复
先用 Python 实现并验证水印算法,发现了 6 个关键 bug:
| Bug | 修复前 | 修复后 |
|---|---|---|
| BCH poly_div | GF(2^5) 乘法 | 简单 XOR(系数在 {0,1}) |
| BCH syndrome | α^(j*i) | α^((n-1-j)*i) |
| BCH Chien search | val 初始化为 0 | val=1(σ_0=1) |
| Arnold 逆变换 | new[(i*inv)%n]=old[i] | new[i]=old[(i*inv)%n] |
| QIM 嵌入 | 偏移嵌入 | 奇偶量化点对齐 |
| PGZ 矩阵 | S[i+j] | S[i+v-1-j] |
验证结果: PSNR 49.77dB,SSIM 0.9999,双模式水印 100% 可提取。
Step 2: Flutter 工程化
- 使用
flutter_bloc+get_it做状态管理和依赖注入 - 图像处理用
image包(纯 Dart,支持 Web) - 解决 Web 兼容问题:条件导入处理
dart:io,flutter_secure_storageWeb 配置
Step 3: Web 部署
构建 Web 版本,切换 HTML renderer 解决 CanvasKit 加载问题,本地验证通过。
4. 成果展示
App 界面
5. 效果与总结
提效成果
- 算法验证 + 工程实现 + Web 部署,全程约 3 小时
- 独立完成原本需要 2-5 天的复杂算法移植工作
SOLO 的价值
- 算法 Debug 助手:帮我定位 BCH 编解码的数学错误,快速验证修复方案
- 跨平台移植:Python → Dart 的语法转换、条件导入处理
- 工程化建议:Flutter 项目结构、依赖注入最佳实践
可复用方法
- 复杂算法先用 Python 验证,再移植到目标平台
- Web 兼容性用条件导入 +
kIsWeb运行时检查 - 算法类项目务必做单元测试(PSNR/SSIM/鲁棒性量化指标)
核心洞察:AI 不是替代开发者写代码,而是把需求变成产品的时间压缩到最低,让人专注于架构设计和产品体验。



