File size: 2,721 Bytes
178f61f
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
import cv2
import numpy as np
import os
import sys
from pathlib import Path

# Add project root to path
project_root = str(Path(__file__).parent.parent.parent)
if project_root not in sys.path:
    sys.path.append(project_root)

from src.utils.preprocess import GazePreprocessor

def debug_filters(img_path, output_dir='data/verification/denoise_test'):
    os.makedirs(output_dir, exist_ok=True)
    
    # Load original image
    frame = cv2.imread(img_path)
    if frame is None:
        print(f"Error: Could not load image at {img_path}")
        return

    preprocessor = GazePreprocessor()
    landmarks = preprocessor.get_landmarks(frame)
    
    if landmarks is None:
        print("No landmarks detected.")
        return

    # 1. Test Raw Normalization (No additional filters - simulate old state)
    # We bypass the current preprocess.py by doing a manual warp for comparison
    def raw_normalize(eye_side='left'):
        h, w, _ = frame.shape
        indices = preprocessor.LEFT_CORNERS if eye_side == 'left' else preprocessor.RIGHT_CORNERS
        p1 = np.array([landmarks[indices[0]].x * w, landmarks[indices[0]].y * h])
        p2 = np.array([landmarks[indices[1]].x * w, landmarks[indices[1]].y * h])
        center = (p1 + p2) / 2
        dx, dy = p2 - p1
        angle = np.degrees(np.arctan2(dy, dx))
        dist = np.linalg.norm(p2 - p1)
        scale = (64 * 0.7) / (dist + 1e-6)
        M = cv2.getRotationMatrix2D(tuple(center), angle, scale)
        M[0, 2] += (64 / 2) - center[0]
        M[1, 2] += (32 / 2) - center[1]
        raw = cv2.warpAffine(frame, M, (64, 32), flags=cv2.INTER_LINEAR)
        return cv2.cvtColor(raw, cv2.COLOR_BGR2GRAY)

    # 2. Get Processed result (Current code with Bilateral + CLAHE)
    processed_eye, _ = preprocessor.normalize_eye(frame, landmarks, 'left')

    # Save for comparison
    raw_eye = raw_normalize('left')
    
    # Magnify for inspection (16x16 zoom)
    raw_zoom = cv2.resize(raw_eye, (256, 128), interpolation=cv2.INTER_NEAREST)
    proc_zoom = cv2.resize(processed_eye, (256, 128), interpolation=cv2.INTER_NEAREST)

    cv2.imwrite(os.path.join(output_dir, '0_raw_eye.png'), raw_eye)
    cv2.imwrite(os.path.join(output_dir, '1_processed_eye.png'), processed_eye)
    cv2.imwrite(os.path.join(output_dir, '2_raw_zoom.png'), raw_zoom)
    cv2.imwrite(os.path.join(output_dir, '3_processed_zoom.png'), proc_zoom)

    print(f"Denoising debug images saved to {output_dir}")

if __name__ == "__main__":
    # Sử dụng ảnh test Gaze360 có sẵn
    test_img = 'data/verification/test_gaze.jpg'
    if os.path.exists(test_img):
        debug_filters(test_img)
    else:
        print(f"Please provide a valid test image at {test_img}")