张芷铭的个人博客

小波多尺度分析可检测视频速度操作痕迹,通过不同频带系数的周期性特征和能量分布异常识别篡改视频。

小波分解层级含义

层级频率特征视频对应
Level 1-2高频细节帧间微小变化、物体运动
Level 3-4中频成分场景切换、镜头变化
Level 5+低频趋势长期模式、周期性操作痕迹

核心原理:速度操作会在 D3-D5 频带引入周期性干扰,表现为系数能量分布异常和统计特性变化。

系数物理意义

系数含义速度检测中的作用
D(细节系数)高频快速变化干扰信号、帧变化
A(近似系数)低频缓慢变化场景整体趋势
D3-D5低频细节关键检测目标:速度操作周期性特征

特征提取流程

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
import pywt
import numpy as np
from scipy import stats

def extract_video_features(video_path):
    # 提取帧大小序列 (EFS)
    efs, _ = extract_efs_ffprobe(video_path)

    # 自适应小波分解
    max_level = pywt.dwt_max_level(len(efs), pywt.Wavelet('db4').dec_len)
    level = min(5, max_level)
    coeffs = pywt.wavedec(efs, 'db4', level=level) if level > 0 else []

    features = []
    if coeffs:
        # 各层能量特征
        for i in range(1, len(coeffs)):
            energy = np.sum(coeffs[i]**2) / len(coeffs[i])
            features.append(energy)

        # 中间层频谱特征(周期性)
        mid_coeff = coeffs[len(coeffs)//2]
        fft = np.abs(np.fft.rfft(mid_coeff)[1:])
        features.extend([np.max(fft), np.mean(fft), np.std(fft)])

        # 高层统计特征
        high_coeffs = np.concatenate(coeffs[-2:])
        features.extend([np.mean(high_coeffs), np.std(high_coeffs),
                         stats.skew(high_coeffs)])

    # 序列全局特征
    features.extend([np.mean(efs), np.std(efs), stats.kurtosis(efs), len(efs)])

    return np.array(features)

分类系统架构

graph LR
A[原始视频] --> B[帧大小序列EFS]
B --> C[小波多尺度分解]
C --> D[特征提取]
D --> E[集成分类器]
E --> F[速度操作检测]

集成分类器

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
from sklearn.ensemble import RandomForestClassifier
from sklearn.svm import SVC
from xgboost import XGBClassifier

class SpeedManipulationDetector:
    def __init__(self):
        self.models = {
            'rf': RandomForestClassifier(n_estimators=100),
            'svm': SVC(probability=True, kernel='rbf'),
            'xgb': XGBClassifier(n_estimators=150)
        }
        self.weights = [0.4, 0.3, 0.3]

    def predict(self, features):
        probs = [m.predict_proba([features])[0] for m in self.models.values()]
        final = sum(w * p for w, p in zip(self.weights, probs))
        return 1 if final[1] > 0.6 else 0

优化策略

  1. 自适应分解深度:短视频用 3 层,长视频用 5 层
  2. 关键特征增强:对 D3-D5 层进行功率谱密度分析
  3. 迁移学习:冻结基础层,微调顶层适配新数据

检测原理总结

特征层级检测目标
低级(D1-D2)快速变化模式、轻微操作
中级(D3-D4)周期性加速/减速规律
高级(D5+)大幅速度修改、整体模式

Comments