Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Advanced Detection Methods

Biological Signal Analysis

Blood Flow Detection (Intel FakeCatcher)

Research: Umur Ciftci et al. (2020) - “FakeCatcher: Detection of Synthetic Portrait Videos”

Intel’s FakeCatcher analyzes photoplethysmography (PPG) signals - subtle color changes in facial pixels caused by blood flow.

Accuracy: 96% in real-time Speed: < 1 second per video

# Conceptual implementation
def detect_blood_flow(video_frames):
    """
    Analyze RGB pixel changes over time
    Real faces show periodic changes from heartbeat
    """
    for frame in video_frames:
        rgb_signals = extract_rgb_channels(frame)
        fft_result = fourier_transform(rgb_signals)
        
        # Human heartbeat: 0.75-4 Hz
        if has_periodic_signal(fft_result, 0.75, 4.0):
            return "REAL"
    return "FAKE"

Citation: Ciftci, U., Demir, I., & Yin, L. (2020). FakeCatcher: Detection of Synthetic Portrait Videos using Biological Signals. IEEE Transactions on Pattern Analysis and Machine Intelligence.

Frequency Domain Analysis

DCT Coefficient Analysis

Research: Frank et al. (2020) - “Leveraging Frequency Analysis for Deep Fake Image Recognition”

Deepfakes leave artifacts in Discrete Cosine Transform (DCT) coefficients.

import numpy as np
from scipy.fftpack import dct

def analyze_dct_coefficients(image):
    """
    Deepfakes show anomalies in high-frequency components
    """
    # Convert to grayscale
    gray = rgb_to_gray(image)
    
    # Apply 2D DCT
    dct_coefficients = dct(dct(gray.T, norm='ortho').T, norm='ortho')
    
    # Analyze high-frequency components
    high_freq = dct_coefficients[32:, 32:]
    anomaly_score = np.std(high_freq)
    
    return anomaly_score > THRESHOLD

Accuracy: 92% on FaceForensics++ dataset

Neural Network Approaches

XceptionNet Architecture

Research: Rossler et al. (2019) - “FaceForensics++: Learning to Detect Manipulated Facial Images”

XceptionNet trained on 1.8M images achieves state-of-the-art detection.

Dataset: FaceForensics++ (1.8M images, 1,000 videos) Accuracy:

  • Same compression: 99.7%
  • Cross-compression: 95.5%
from tensorflow.keras.applications import Xception
from tensorflow.keras.layers import Dense, GlobalAveragePooling2D
from tensorflow.keras.models import Model

def build_deepfake_detector():
    base_model = Xception(weights='imagenet', include_top=False)
    
    x = base_model.output
    x = GlobalAveragePooling2D()(x)
    x = Dense(1024, activation='relu')(x)
    predictions = Dense(1, activation='sigmoid')(x)
    
    model = Model(inputs=base_model.input, outputs=predictions)
    return model

Citation: Rossler, A., et al. (2019). FaceForensics++: Learning to Detect Manipulated Facial Images. IEEE ICCV. DOI: 10.1109/ICCV.2019.00009

Temporal Consistency Analysis

Frame-to-Frame Coherence

Research: Sabir et al. (2019) - “Recurrent Convolutional Strategies for Face Manipulation Detection”

Deepfakes often lack temporal consistency between frames.

def analyze_temporal_consistency(video_frames):
    """
    Check for unnatural transitions between frames
    """
    inconsistencies = []
    
    for i in range(len(video_frames) - 1):
        current = video_frames[i]
        next_frame = video_frames[i + 1]
        
        # Extract facial landmarks
        landmarks_current = detect_landmarks(current)
        landmarks_next = detect_landmarks(next_frame)
        
        # Calculate movement
        movement = calculate_distance(landmarks_current, landmarks_next)
        
        # Detect unnatural jumps
        if movement > NATURAL_THRESHOLD:
            inconsistencies.append(i)
    
    return len(inconsistencies) / len(video_frames)

Audio-Visual Synchronization

Lip-Sync Analysis

Research: Chung & Zisserman (2017) - “Out of Time: Automated Lip Sync in the Wild”

Analyze correlation between audio and visual speech signals.

def detect_lipsync_mismatch(video, audio):
    """
    Real videos show strong audio-visual correlation
    Deepfakes often have misalignment
    """
    # Extract visual features
    lip_movements = extract_lip_movements(video)
    
    # Extract audio features (MFCCs)
    audio_features = extract_mfcc(audio)
    
    # Calculate cross-correlation
    correlation = cross_correlate(lip_movements, audio_features)
    
    # Real videos: correlation > 0.7
    # Deepfakes: correlation < 0.5
    return correlation < 0.5

Accuracy: 89% on manipulated videos

Blockchain Verification

Content Authenticity Initiative (CAI)

Standard: C2PA (Coalition for Content Provenance and Authenticity)

Adobe, Microsoft, BBC, and others developed C2PA standard for content authentication.

import hashlib
import json
from datetime import datetime

class ContentAuthenticator:
    def create_manifest(self, content, metadata):
        """
        Create tamper-evident manifest
        """
        manifest = {
            'content_hash': hashlib.sha256(content).hexdigest(),
            'timestamp': datetime.utcnow().isoformat(),
            'creator': metadata['creator'],
            'device': metadata['device'],
            'location': metadata.get('location'),
            'edits': []
        }
        
        # Sign with private key
        signature = self.sign(json.dumps(manifest))
        manifest['signature'] = signature
        
        return manifest
    
    def verify_chain(self, content, manifest):
        """
        Verify content hasn't been tampered
        """
        current_hash = hashlib.sha256(content).hexdigest()
        return current_hash == manifest['content_hash']

Adoption:

  • Adobe Photoshop (2021+)
  • Nikon cameras (2022+)
  • Canon cameras (2023+)

Ensemble Methods

Multi-Model Voting

Research: Nguyen et al. (2019) - “Multi-task Learning For Detecting and Segmenting Manipulated Facial Images”

Combine multiple detection methods for higher accuracy.

class EnsembleDetector:
    def __init__(self):
        self.models = [
            XceptionDetector(),
            DCTAnalyzer(),
            TemporalAnalyzer(),
            AudioVisualAnalyzer()
        ]
    
    def detect(self, video):
        votes = []
        confidences = []
        
        for model in self.models:
            result, confidence = model.predict(video)
            votes.append(result)
            confidences.append(confidence)
        
        # Weighted voting
        weighted_score = sum(v * c for v, c in zip(votes, confidences))
        weighted_score /= sum(confidences)
        
        return weighted_score > 0.5

Accuracy: 97.3% (ensemble) vs 95.5% (single model)

Detection Accuracy Comparison

MethodAccuracySpeedRobustness
Blood Flow (Intel)96%Real-timeHigh
XceptionNet99.7%FastMedium
DCT Analysis92%FastHigh
Temporal89%SlowMedium
Ensemble97.3%MediumVery High

Research Citations

  1. Ciftci et al. (2020) - FakeCatcher
  2. Rossler et al. (2019) - FaceForensics++, DOI: 10.1109/ICCV.2019.00009
  3. Frank et al. (2020) - Frequency Analysis
  4. Sabir et al. (2019) - Temporal Consistency
  5. Chung & Zisserman (2017) - Lip-Sync Analysis
  6. C2PA Standard - https://c2pa.org

Next: Forensic Analysis →