| from unittest.mock import patch
|
|
|
| import numpy as np
|
| import pandas as pd
|
|
|
| import signature_verification.constants as cons
|
| from signature_verification.evaluate import (
|
| compute_accuracy_roc,
|
| gen_data,
|
| process_test_metadata,
|
| )
|
|
|
|
|
| def test_process_test_metadata(tmpdir):
|
|
|
| path = tmpdir.join("fake_test_data.csv")
|
|
|
| fake_csv_data = pd.DataFrame(
|
| [
|
| "./CEDAR/38/original_38_13.png,./CEDAR/38/forgeries_38_20.png,0",
|
| "./CEDAR/12/original_12_22.png,./CEDAR/12/forgeries_12_14.png,0",
|
| "./CEDAR/33/original_33_10.png,./CEDAR/33/forgeries_33_24.png,0",
|
| ]
|
| )
|
|
|
| csv_data = fake_csv_data[0].str.split(",", expand=True)
|
|
|
| csv_data.to_csv(path, index=False, header=False)
|
|
|
| pairs_data, labels_list = process_test_metadata(path)
|
|
|
| expected_pairs_data = [
|
| ("./CEDAR/38/original_38_13.png", "./CEDAR/38/forgeries_38_20.png"),
|
| ("./CEDAR/12/original_12_22.png", "./CEDAR/12/forgeries_12_14.png"),
|
| ("./CEDAR/33/original_33_10.png", "./CEDAR/33/forgeries_33_24.png"),
|
| ]
|
| expected_labels_list = [0, 0, 0]
|
|
|
| assert pairs_data == expected_pairs_data
|
| assert labels_list == expected_labels_list
|
|
|
|
|
| def test_compute_accuracy_roc():
|
|
|
| predictions = np.array(
|
| [0.89941, 0.234, 0.5543, 0.7543, 1.245, 2.54687, 0.441247, 1.1215, 2.3333]
|
| )
|
|
|
| labels = np.array([1, 1, 1, 1, 1, 0, 0, 0, 0])
|
|
|
| max_acc, best_thresh = compute_accuracy_roc(predictions, labels)
|
|
|
|
|
| assert 0.0 <= max_acc <= 1.0
|
| assert 0.234 <= best_thresh <= 2.54687
|
|
|
|
|
| def create_cv2_imread(filepath, flags):
|
| return np.ones((cons.IMG_H, cons.IMG_W), dtype=np.uint8) * 255
|
|
|
|
|
| def test_gen_data():
|
| with patch("cv2.imread", side_effect=create_cv2_imread):
|
| batch_size = 2
|
| actual_gen = gen_data(batch_size=batch_size)
|
| pairs, targets = next(actual_gen)
|
|
|
| assert pairs[0].shape == (batch_size, cons.IMG_H, cons.IMG_W, 1)
|
| assert pairs[1].shape == (batch_size, cons.IMG_H, cons.IMG_W, 1)
|
| assert targets.shape == (batch_size,)
|
|
|