atrijopal/sports-guardian

GitHub: atrijopal/sports-guardian

面向体育赛事直播的多层版权保护平台,集成视频指纹识别、实时盗版威胁情报和不可见数字水印溯源三大模块,实现从盗版检测到泄露追溯的端到端保护。

Stars: 0 | Forks: 0

# Sports Guardian **多层体育媒体数字资产保护平台。** 视频指纹识别 · 实时盗版情报 · 隐形水印 专为 Google Hackathon 2025 打造。 ## 功能介绍 Sports Guardian 是一个三模块系统,可端到端地保护体育赛事直播版权: | 模块 | 作用 | |---|---| | **信号拦截 (Signal Intercept)** (M1) | 识别可疑片段是否来自受保护的直播源,能够抵御镜像、重编码、静音、变速、台标叠加和裁剪等处理 | | **作战室 (War Room)** (M2) | 实时盗版情报仪表盘 —— 监控 SSL 证书透明度日志,对盗版运营者进行聚类分析,追踪 YouTube 频道,并运行 AI 威胁简报 | | **溯源 (Source Attribution)** (M3) | 在视频流中嵌入不可见的按观众区分的水印,以便将泄露的录像精确追溯到具体的订阅用户 | ## 在线演示 已作为单一服务部署在 Railway 上。所有三个模块均可通过同一个 URL 访问: | 路径 | 模块 | |---|---| | `/` | Guardian Hub —— 统一仪表盘 | | `/m1/` | Signal Intercept —— 视频指纹识别 | | `/m2/` | War Room —— 威胁情报 | | `/m3/` | Source Attribution —— 水印处理 | ## 架构 ``` Railway (single service) ┌──────────────────────────────────┐ Browser ──────▶ │ main.py (:$PORT) │ │ ├── / → Hub UI │ │ ├── /m1/* → M1 (internal :8001)│ │ ├── /m2/* → M2 (internal :8002)│ │ ├── /m3/* → M3 (internal :8003)│ │ └── /ws/live → M2 WebSocket │ └──────────────────────────────────┘ ``` `main.py` 是唯一的入口点。它将 M1、M2 和 M3 作为后台子进程启动,并将所有流量反向代理给它们。 ## 模块 1 —— Signal Intercept (视频指纹识别) 通过三层流水线识别盗版片段,可抵御以下处理: - 镜像 / 水平翻转 - 不同比特率的重编码 - 静音或替换音频 - 变速 (±20%) - 上下黑边裁剪、台标叠加、亮度变化 **第 1 层 —— 视觉 pHash:** 通过 FFmpeg 提取视频帧,对每一帧进行标准化处理 (去除上下黑边 → 中心裁剪 → 灰度化 → 台标遮挡 → 直方图均衡化),计算 64 位 pHash。镜像规范化会存储 `hash(frame)` 和 `hash(flipped_frame)` 中较小的一个。 **第 2 层 —— 音频 Chromaprint:** 提取 44.1 kHz 单声道音频,通过 `fpcalc -raw` 运行,然后使用滑动窗口 XOR 距离匹配在原始指纹中定位可疑片段。如果视频被静音则返回 0.0。 **第 4 层 —— 匹配 DNA:** 提取 1-Hz 视觉和音频能量信号,使用 `scipy` 检测峰值,将其编码为带有量化间隔的 DNA 字符串。通过 `rapidfuzz` 进行模糊子串匹配。具备抗变速特性。 **融合机制:** ``` overall = 0.45 × L1 + 0.35 × L2 + 0.20 × L4 match = overall ≥ 0.55 AND agreeing_layers ≥ 2 ``` ## 模块 2 —— War Room (威胁情报) **数据摄取:** CertStream 实时监控全球 SSL 证书透明度日志。每份新证书都会根据关键词列表、廉价 TLD 列表和品牌相似度检查进行评分。Apify 爬虫负责从 Twitter、Reddit 和 Telegram 收集数据。 **三层域名评分:** 1. 关键词评分、TLD 惩罚、品牌模糊匹配 2. 对标记域名进行 AI 分类 3. Google Safe Browsing API 确认 **威胁图谱:** 节点(域名、YouTube 频道、Telegram、Twitter、Reddit)通过边相互连接。使用 Union-Find 算法对运营者进行聚类。 **AI 情报:** 由 Gemini 驱动的威胁简报每 30 分钟更新一次,生成针对每个节点的运营者画像,并进行 YouTube 盗版频道追踪。 ## 模块 3 —— Source Attribution (水印处理) 将 64 位会话 ID 不可见地嵌入到视频中。能够抵御重编码、压缩和屏幕录制。 **第 1 层 —— 扩频视觉:** 每隔 5 帧在 32×32 像素块中生成伪随机噪声模式。每帧使用基于 HMAC-SHA256 密钥的随机数生成器 (RNG)。 **第 2 层 —— BPSK 音频:** 水印位以二进制相移键控 (BPSK) 方式编码在 19 kHz 载波上,每 10 秒重复一次。 **第 3 层 —— DCT 系数调制:** 8×8 DCT 块,采用强制中频系数奇偶校验编码。 这三层均使用 Reed-Solomon 纠错码(10 个符号,每层可容忍 5 个字节的错误)。上传可疑片段 → 各层进行投票 → 解析会话 ID → 确定对应的观众身份。 ## 技术栈 | 层级 | 技术 | |---|---| | Web 框架 | FastAPI + Uvicorn | | 视频处理 | FFmpeg, fpcalc (Chromaprint) | | 视觉哈希 | imagehash (pHash), OpenCV | | 音频分析 | librosa, soundfile, scipy | | 模糊匹配 | rapidfuzz | | 纠错码 | reedsolo (Reed-Solomon) | | 威胁图谱 | 自定义 GraphStore (dict + JSON) | | 运营者聚类 | Union-Find | | 证书监控 | certstream-python | | AI 情报 | Gemini API · Ollama llama3.1:8b (备用) | | 安全浏览 | Google Safe Browsing API v4 | | YouTube 情报 | YouTube Data API v3 | | 前端 | 原生 JS, vis-network, Chakra Petch + Azeret Mono | | 实时通信 | WebSocket (FastAPI) | ## 部署到 Railway [![Deploy on Railway](https://railway.com/button.svg)](https://railway.com) 1. Fork 本仓库 2. 创建一个新的 Railway 项目 → **Deploy from GitHub repo** → 选择此仓库 3. 将根目录留空 —— Railway 会自动检测 `nixpacks.toml` 4. 添加环境变量(参见下文的配置说明) 5. **Generate Domain** → 你的应用即可上线 Railway 会通过 Nixpacks 自动安装 FFmpeg 和 Chromaprint。所有三个模块将作为单一服务运行。 ## 本地运行 **前置条件:** Python 3.11+,FFmpeg,以及路径 (PATH) 中包含 fpcalc ``` # 安装 dependencies pip install -r requirements.txt # 启动所有内容 uvicorn main:app --reload # 打开 http://localhost:8000 ``` ## 配置说明 在 Railway(或本地 `.env` 文件)中添加 API 密钥作为环境变量: | 变量 | 使用者 | 用途 | |---|---|---| | `GEMINI_API_KEY` | M1, M2 | AI 分析 + 威胁简报 | | `YOUTUBE_API_KEY` | M1, M2 | YouTube 扫描 + 盗版追踪 | | `SAFE_BROWSING_API_KEY` | M2 | Google Safe Browsing | 在本地使用时,请在每个模块的 `config.py` 中设置它们;在部署时,请将其设置为 Railway 的环境变量。 ## 项目结构 ``` sports-guardian/ ├── main.py # Single entry point — launches all modules ├── requirements.txt # Combined dependencies ├── nixpacks.toml # Railway build config (ffmpeg + chromaprint) ├── module1-fingerprinting/ │ ├── app.py # FastAPI routes │ ├── config.py # Thresholds + API keys │ ├── storage.py # JSON fingerprint DB │ └── fingerprint/ │ ├── layer1_visual.py │ ├── layer2_audio.py │ ├── layer4_dna.py │ └── fusion.py ├── module2-threat-intel/ │ ├── app.py # FastAPI + WebSocket + background tasks │ ├── config.py # Scoring weights + API keys │ ├── graph_store.py # Threat graph │ ├── scoring.py # Threat scores + clustering │ ├── google_services.py # Safe Browsing, YouTube, Gemini │ └── collectors/ # CertStream, Apify scrapers ├── module3-watermarking/ │ ├── app.py # FastAPI routes │ ├── config.py # Watermark parameters │ ├── session_registry.py # Viewer session tracking │ └── watermark/ # Embed + extract pipeline └── hub/ └── static/index.html # Guardian unified dashboard ```
标签:AI分析, Chromaprint, DNA匹配, DRM, Google Hackathon, Google Safe Browsing, pHash, Python, Railway, SSL证书监控, WebSocket, 体育媒体保护, 依赖分析, 全媒体保护, 后端开发, 威胁情报, 实时处理, 密码管理, 开发者工具, 情报看板, 感知哈希, 数字水印, 数字版权管理, 无后门, 源属性, 溯源追踪, 盗版检测, 网络安全, 视频指纹, 视频版权保护, 证书透明度日志, 逆向工具, 隐形水印, 隐私保护, 黑客松