YONKO-SID/indelible
GitHub: YONKO-SID/indelible
基于 DWT+QIM 数字隐写与 AI 内容识别的版权保护平台,提供水印嵌入、盗版监测、区块链存证与 DMCA 维权自动化的一体化方案。
Stars: 1 | Forks: 2
# INDELIBLE
**取证即服务 (FaaS) — 抗压缩数字水印与 AI 盗版检测**
INDELIBLE 使用经典的信号处理技术 (DWT + QIM) 将经过密码学签名的不可见水印嵌入到图像和视频中。当出现盗版副本时,平台会提取水印、验证 HMAC 签名、通过唯一的 `INDL-XXXX-XXXX-XXXX` 指纹识别原始创作者,并使用 Gemini 2.5 Flash 自动生成 DMCA 下架通知。
## 工作原理
```
1. PROTECT ──▶ User uploads media → High-Redundancy DWT-LL embeds signed payload → Anchored to Polygon Blockchain → PNG returned
2. WATCHDOG ──▶ Background daemon scans web → pHash matches BK-Tree? → DWT extracts proof → Push alert
3. ENFORCE ──▶ Gemini drafted DMCA notice → Enterprise legal response triggered
4. MANUAL ──▶ Direct upload of suspect copy → Fast cryptographic verification
```
### 核心 Pipeline
```
Image → YCrCb (extract Y) → Haar DWT → LL subband → Massive Redundancy QIM (delta=80)
→ Inverse DWT → Clip to uint8 → Save as PNG + Blockchain TX hash
```
payload 为:`CreatorFingerprint (padded) | UTC Timestamp | HMAC-SHA256 (truncated)`,经过 Reed-Solomon 编码 (nsym=128) 以实现卓越的纠错能力。
## 架构
```
┌──────────────┐ ┌──────────────┐ ┌──────────────┐
│ Flutter │────▶│ FastAPI │────▶│ Python DSP │
│ Dashboard │◀────│ Alerts API │◀────│ + BK-Tree │
└──────────────┘ └──────────────┘ └──────────────┘
│ ▲ ▲
▼ │ │
Firebase Auth Monitoring Daemon pHash Filter Index
(Automated Scraper) (pybktree Search)
```
## 技术栈
| 层级 | 技术 | 用途 |
|-------|-----------|---------|
| 前端 | Flutter + Dart | 跨平台 UI |
| 状态 | Riverpod | 响应式状态管理 |
| 认证 | Firebase Auth | 邮箱 + Google Sign-In |
| API | FastAPI + Uvicorn | HTTP endpoint,文件服务 |
| DSP | OpenCV, PyWavelets, NumPy | DWT、DCT、QIM 水印嵌入 |
| 加密 | hmac, hashlib, reedsolo | HMAC-SHA256 + Reed-Solomon ECC |
| AI | google-genai (Gemini 2.5 Flash) | 多模态盗版检测 |
| 视频 | FFmpeg (subprocess) | 帧 extraction 与拼接 |
| 爬取 | httpx, BeautifulSoup4 | Web 内容爬取 |
| 索引 | imagehash, pybktree | pHash 相似度搜索 (BK-Tree) |
## 项目结构
```
indelible/
├── backend/
│ ├── core/
│ │ ├── watermark.py # DWT+QIM embed/extract engine
│ │ ├── payload.py # HMAC + Reed-Solomon crypto
│ │ ├── ai_engine.py # Gemini 2.5 piracy classifier
│ │ ├── scraper.py # Web scraper with fallback
│ │ ├── video_processor.py # FFmpeg frame extraction
│ │ └── bktree_index.py # Perceptual hash indexing
│ ├── main.py # FastAPI server & endpoints
│ ├── outputs/ # Protected files served here
│ ├── creator_registry.json # Fingerprint ↔ UID mapping
│ └── .env # GEMINI_API_KEY (not committed)
├── lib/
│ ├── main.dart
│ └── src/
│ ├── config/themes/app_colors.dart
│ ├── screens/
│ │ ├── sections/
│ │ │ ├── top_app_bar.dart
│ │ │ ├── hero_section.dart
│ │ │ ├── quick_actions.dart # File upload + API calls
│ │ │ ├── stats_grid.dart
│ │ │ ├── recent_assets_list.dart
│ │ │ └── recent_activity_list.dart
│ │ ├── intro_screens/ # Animated GPU onboarding screens
│ │ ├── layouts/
│ │ │ └── dashboard_layout.dart # Sliding Matrix4 sidebar shell
│ │ ├── login_screen.dart
│ │ └── home_screen.dart
│ └── services/auth_service.dart
├── LEARNING_GUIDE.md # Deep technical reference (read this!)
├── ROADMAP.md # Phase breakdown & status
└── PROJECT_STATUS.md # Current completion tracker
```
## 快速开始
### 前置条件
- Flutter SDK 3.9+
- Python 3.10+
- PATH 中包含 FFmpeg
- 启用了 Auth 的 Firebase 项目
### 后端
```
cd backend
python -m venv .venv
.venv\Scripts\activate # Windows
pip install -r requirements.txt
# 使用你的 Gemini key 创建 .env
echo GEMINI_API_KEY=your_key_here > .env
# 启动服务器
python -m uvicorn main:app --reload
```
### 前端
```
flutter pub get
flutter run -d chrome
```
### 生产环境部署 (Docker & Railway)
后端依赖大量的系统库 (`ffmpeg`, `libgl1`),必须使用 **Docker** 进行部署。
1. 提交 `backend/Dockerfile` 和 `backend/requirements.txt`。
2. 前往 **Railway.app**,创建一个新项目,并选择 "Deploy from GitHub repo"。
3. 在服务的 **Settings → Build → Root Directory** 下,输入 `/backend`。
4. Railway 将自动构建容器并提供一个永久的 HTTPS 域名。
5. 在 Flutter 中使用您新的 Railway URL 更新 `lib/src/services/api_service.dart`。
## API Endpoint
| 方法 | Endpoint | Body | 返回值 |
|--------|----------|------|---------|
| POST | `/protect` | `file` (multipart) + `user_uid` (form) | `creator_fingerprint`, `download_url`, `pHash_indexed` |
| GET | `/alerts/{user_uid}` | — | 实时盗版检测结果与 DMCA 草案 |
| POST | `/verify` | `file` (multipart) | `status` (match_found/no_match), `proof_report` |
| POST | `/scan-piracy` | `url` (form) | `ai_analysis`, `legal_notice_draft` |
| GET | `/download/{filename}` | — | 二进制文件下载 |
## 核心算法
- **DWT (Haar)** — 将图像分解为频率子带;我们利用 **LL 子带**以获得最大的稳定性。
- **大规模冗余 QIM (delta=100)** — 通过量化*每一个* LL 系数来嵌入比特,从而能够通过多数投票从噪声中恢复数据。
- **HMAC-SHA256** — 使用密钥生成不可伪造的签名(为了压缩而截断为 16 字节)。
- **Reed-Solomon (nsym=128)** — 纠正提取出的 payload 中多达 64 个字节的错误(约 32% 的纠错阈值)。
- **鲁棒的缩放与网格搜索验证** — 尝试从 0.80 到 1.00 的缩放因子和平移偏移量,以处理裁剪和调整大小后的扩展,并带有快速失败的锚点比特预检。
- **区块链锚定** — 在 Polygon 网络上提供不可篡改的“数学监管链”。
- **SHA-256 指纹生成** — 从 Firebase UID 派生出确定性的 `INDL-XXXX-XXXX-XXXX`。
## 许可证
黑客松项目 — 仅供教育使用。未经安全审计,不具备生产环境可用性。
## 致谢
- QIM:Chen & Wornell,"Quantization Index Modulation for Digital Watermarking"
- Reed-Solomon:Tomer Filiba 开发的 `reedsolo` 库
- AI:Google Gemini 2.5 Flash 多模态 API
标签:人工智能, 区块链, 图像处理, 数字取证, 数字水印, 用户模式Hook绕过, 自动化脚本