diff --git a/tests/conftest.py b/tests/conftest.py index 072c74d7d219431e30d2c17a1ef6154690b52bb3..d1bb084c86ba85ea505e434da1896422e586309e 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -48,7 +48,7 @@ def training_config(): return { "dataset_params": { "datasets": { - "training": "./tests/data/training_page", + "training": "./tests/data/training/training_dataset", }, "train": { "name": "training-train", @@ -165,3 +165,8 @@ def training_config(): }, }, } + + +@pytest.fixture +def prediction_data_path(): + return FIXTURES / "prediction" diff --git a/tests/data/evaluation/predict_training-test_0.txt b/tests/data/evaluation/predict_training-test_0.txt deleted file mode 100644 index e7ba36931357cdf46eff450b85875af134ffbe46..0000000000000000000000000000000000000000 --- a/tests/data/evaluation/predict_training-test_0.txt +++ /dev/null @@ -1,9 +0,0 @@ -nb_chars: 49 -cer: 1.1429 -nb_words: 9 -wer: 1.0 -nb_words_no_punct: 9 -wer_no_punct: 1.0 -sample_time: 0.8385 -time: 1.6771 -nb_samples: 2 diff --git a/tests/data/evaluation/predict_training-train_0.txt b/tests/data/evaluation/predict_training-train_0.txt deleted file mode 100644 index 4cd86dfacf9792c25b330f4c3ff76575a31d6c3d..0000000000000000000000000000000000000000 --- a/tests/data/evaluation/predict_training-train_0.txt +++ /dev/null @@ -1,9 +0,0 @@ -nb_chars: 43 -cer: 1.2791 -nb_words: 9 -wer: 1.0 -nb_words_no_punct: 9 -wer_no_punct: 1.0 -sample_time: 0.8334 -time: 1.6668 -nb_samples: 2 diff --git a/tests/data/evaluation/predict_training-val_0.txt b/tests/data/evaluation/predict_training-val_0.txt deleted file mode 100644 index d4aea2c8c3d2182de4f6dde6172622ffc39b941c..0000000000000000000000000000000000000000 --- a/tests/data/evaluation/predict_training-val_0.txt +++ /dev/null @@ -1,9 +0,0 @@ -nb_chars: 41 -cer: 1.2683 -nb_words: 9 -wer: 1.0 -nb_words_no_punct: 9 -wer_no_punct: 1.0 -sample_time: 0.8314 -time: 1.6628 -nb_samples: 2 diff --git a/tests/data/training_page/charset.pkl b/tests/data/prediction/charset.pkl similarity index 100% rename from tests/data/training_page/charset.pkl rename to tests/data/prediction/charset.pkl diff --git a/tests/data/prediction/images/0a56e8b3-95cd-4fa5-a17b-5b0ff9e6ea84.png b/tests/data/prediction/images/0a56e8b3-95cd-4fa5-a17b-5b0ff9e6ea84.png new file mode 100644 index 0000000000000000000000000000000000000000..c781ad2cedbfef480cc294aab2c8ddd067d832de Binary files /dev/null and b/tests/data/prediction/images/0a56e8b3-95cd-4fa5-a17b-5b0ff9e6ea84.png differ diff --git a/tests/data/prediction/images/0dfe8bcd-ed0b-453e-bf19-cc697012296e.png b/tests/data/prediction/images/0dfe8bcd-ed0b-453e-bf19-cc697012296e.png new file mode 100644 index 0000000000000000000000000000000000000000..8af4906cc9b4c4afb76903d2db87ae535ffbf0f9 Binary files /dev/null and b/tests/data/prediction/images/0dfe8bcd-ed0b-453e-bf19-cc697012296e.png differ diff --git a/tests/data/prediction/images/2c242f5c-e979-43c4-b6f2-a6d4815b651d.png b/tests/data/prediction/images/2c242f5c-e979-43c4-b6f2-a6d4815b651d.png new file mode 100644 index 0000000000000000000000000000000000000000..b301683f1aabedad3c2972ed1f1e05bd982c575b Binary files /dev/null and b/tests/data/prediction/images/2c242f5c-e979-43c4-b6f2-a6d4815b651d.png differ diff --git a/tests/data/prediction/images/ffdec445-7f14-4f5f-be44-68d0844d0df1.png b/tests/data/prediction/images/ffdec445-7f14-4f5f-be44-68d0844d0df1.png new file mode 100644 index 0000000000000000000000000000000000000000..39c44016781cd0dca5ea76526a65be89c13a272c Binary files /dev/null and b/tests/data/prediction/images/ffdec445-7f14-4f5f-be44-68d0844d0df1.png differ diff --git a/tests/data/prediction/parameters.yml b/tests/data/prediction/parameters.yml new file mode 100644 index 0000000000000000000000000000000000000000..76f665e2b0354dfbdf3122e0482439703fdc82da --- /dev/null +++ b/tests/data/prediction/parameters.yml @@ -0,0 +1,24 @@ +--- +version: 0.0.1 +parameters: + mean: [166.8418783515498, 166.8418783515498, 166.8418783515498] + std: [34.084189571536385, 34.084189571536385, 34.084189571536385] + max_char_prediction: 200 + encoder: + input_channels: 3 + dropout: 0.5 + decoder: + enc_dim: 256 + l_max: 15000 + dec_pred_dropout: 0.1 + attention_win: 100 + use_1d_pe: True + use_lstm: False + vocab_size: 96 + h_max: 500 + w_max: 1000 + dec_num_layers: 8 + dec_dim_feedforward: 256 + dec_num_heads: 4 + dec_att_dropout: 0.1 + dec_res_dropout: 0.1 diff --git a/tests/data/prediction/popp_line_model.pt b/tests/data/prediction/popp_line_model.pt new file mode 100644 index 0000000000000000000000000000000000000000..67b9565aee8a50f9d9b73fed2deb7e452d3828fb --- /dev/null +++ b/tests/data/prediction/popp_line_model.pt @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:072302b3c54aa6e9a3afb06cf45c2a8e97e20d300854bfacd585cba61282e252 +size 84723223 diff --git a/tests/data/training/best_0.pt b/tests/data/training/models/best_0.pt similarity index 100% rename from tests/data/training/best_0.pt rename to tests/data/training/models/best_0.pt diff --git a/tests/data/training/last_3.pt b/tests/data/training/models/last_3.pt similarity index 100% rename from tests/data/training/last_3.pt rename to tests/data/training/models/last_3.pt diff --git a/tests/data/training/training_dataset/charset.pkl b/tests/data/training/training_dataset/charset.pkl new file mode 100644 index 0000000000000000000000000000000000000000..3626a2bcb8870b2d0151df06dc30c57089183d9f Binary files /dev/null and b/tests/data/training/training_dataset/charset.pkl differ diff --git a/tests/data/training_page/images/0a34e13a-4ab0-4a91-8d7c-b1d8fee32628.png b/tests/data/training/training_dataset/images/0a34e13a-4ab0-4a91-8d7c-b1d8fee32628.png similarity index 100% rename from tests/data/training_page/images/0a34e13a-4ab0-4a91-8d7c-b1d8fee32628.png rename to tests/data/training/training_dataset/images/0a34e13a-4ab0-4a91-8d7c-b1d8fee32628.png diff --git a/tests/data/training_page/images/0a576062-303c-4893-a729-c09c92865d31.png b/tests/data/training/training_dataset/images/0a576062-303c-4893-a729-c09c92865d31.png similarity index 100% rename from tests/data/training_page/images/0a576062-303c-4893-a729-c09c92865d31.png rename to tests/data/training/training_dataset/images/0a576062-303c-4893-a729-c09c92865d31.png diff --git a/tests/data/training_page/images/0a70e14f-feda-4607-989c-36cf581ddff5.png b/tests/data/training/training_dataset/images/0a70e14f-feda-4607-989c-36cf581ddff5.png similarity index 100% rename from tests/data/training_page/images/0a70e14f-feda-4607-989c-36cf581ddff5.png rename to tests/data/training/training_dataset/images/0a70e14f-feda-4607-989c-36cf581ddff5.png diff --git a/tests/data/training_page/images/0b2457c8-81f1-4600-84d9-f8bf2822a991.png b/tests/data/training/training_dataset/images/0b2457c8-81f1-4600-84d9-f8bf2822a991.png similarity index 100% rename from tests/data/training_page/images/0b2457c8-81f1-4600-84d9-f8bf2822a991.png rename to tests/data/training/training_dataset/images/0b2457c8-81f1-4600-84d9-f8bf2822a991.png diff --git a/tests/data/training_page/images/fb3edb59-3678-49f8-8e16-8e32e3b0f051.png b/tests/data/training/training_dataset/images/fb3edb59-3678-49f8-8e16-8e32e3b0f051.png similarity index 100% rename from tests/data/training_page/images/fb3edb59-3678-49f8-8e16-8e32e3b0f051.png rename to tests/data/training/training_dataset/images/fb3edb59-3678-49f8-8e16-8e32e3b0f051.png diff --git a/tests/data/training_page/images/fe498de2-ece4-4fbe-8b53-edfce1b820f0.png b/tests/data/training/training_dataset/images/fe498de2-ece4-4fbe-8b53-edfce1b820f0.png similarity index 100% rename from tests/data/training_page/images/fe498de2-ece4-4fbe-8b53-edfce1b820f0.png rename to tests/data/training/training_dataset/images/fe498de2-ece4-4fbe-8b53-edfce1b820f0.png diff --git a/tests/data/training/training_dataset/labels.json b/tests/data/training/training_dataset/labels.json new file mode 100644 index 0000000000000000000000000000000000000000..82602c7cef358b2f243a49c3e45c66d1cd231753 --- /dev/null +++ b/tests/data/training/training_dataset/labels.json @@ -0,0 +1,26 @@ +{ + "test": { + "tests/data/training/training_dataset/images/fb3edb59-3678-49f8-8e16-8e32e3b0f051.png": { + "text": "Both her wrists bore" + }, + "tests/data/training/training_dataset/images/fe498de2-ece4-4fbe-8b53-edfce1b820f0.png": { + "text": "SOME years ago a contemporary" + } + }, + "train": { + "tests/data/training/training_dataset/images/0a34e13a-4ab0-4a91-8d7c-b1d8fee32628.png": { + "text": "The latter do not regard" + }, + "tests/data/training/training_dataset/images/0a70e14f-feda-4607-989c-36cf581ddff5.png": { + "text": "At the beginning of" + } + }, + "val": { + "tests/data/training/training_dataset/images/0a576062-303c-4893-a729-c09c92865d31.png": { + "text": "One can remember with" + }, + "tests/data/training/training_dataset/images/0b2457c8-81f1-4600-84d9-f8bf2822a991.png": { + "text": "The play was no more" + } + } +} diff --git a/tests/data/training_page/labels.json b/tests/data/training_page/labels.json deleted file mode 100644 index 4ae72a713741d4375944d736e4bdb5a53d474122..0000000000000000000000000000000000000000 --- a/tests/data/training_page/labels.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "test": { - "tests/data/training_page/images/fb3edb59-3678-49f8-8e16-8e32e3b0f051.png": { - "text": "Both her wrists bore" - }, - "tests/data/training_page/images/fe498de2-ece4-4fbe-8b53-edfce1b820f0.png": { - "text": "SOME years ago a contemporary" - } - }, - "train": { - "tests/data/training_page/images/0a34e13a-4ab0-4a91-8d7c-b1d8fee32628.png": { - "text": "The latter do not regard" - }, - "tests/data/training_page/images/0a70e14f-feda-4607-989c-36cf581ddff5.png": { - "text": "At the beginning of" - } - }, - "val": { - "tests/data/training_page/images/0a576062-303c-4893-a729-c09c92865d31.png": { - "text": "One can remember with" - }, - "tests/data/training_page/images/0b2457c8-81f1-4600-84d9-f8bf2822a991.png": { - "text": "The play was no more" - } - } -} diff --git a/tests/test_prediction.py b/tests/test_prediction.py new file mode 100644 index 0000000000000000000000000000000000000000..1ad7c51023ef4b5d6ae5a7b840140d0f646cf15d --- /dev/null +++ b/tests/test_prediction.py @@ -0,0 +1,55 @@ +# -*- coding: utf-8 -*- + +import pytest +import torch + +from dan.predict.prediction import DAN +from dan.utils import read_image + + +@pytest.mark.parametrize( + "image_name, expected_prediction", + ( + ( + "0a56e8b3-95cd-4fa5-a17b-5b0ff9e6ea84.png", + {"text": ["ⓈBellisson â’»Georges â’·91 â“P â’¸M â“€Ch â“„Plombier â“…Patron?12241"]}, + ), + ( + "0dfe8bcd-ed0b-453e-bf19-cc697012296e.png", + {"text": ["ⓈTemplié â’»Marcelle â’·93 â“S â“€ch â“„E dactylo â“…18376"]}, + ), + ( + "2c242f5c-e979-43c4-b6f2-a6d4815b651d.png", + {"text": ["Ⓢd â’»Charles â’·11 â“P â’¸C â“€F â“„d â“…14 31"]}, + ), + ( + "ffdec445-7f14-4f5f-be44-68d0844d0df1.png", + {"text": ["ⓈNaudin â’»Marie â’·53 â“S â’¸v â“€Belle mère"]}, + ), + ), +) +def test_predict( + image_name, + expected_prediction, + prediction_data_path, +): + device = "cpu" + + dan_model = DAN(device) + dan_model.load( + prediction_data_path / "popp_line_model.pt", + prediction_data_path / "parameters.yml", + prediction_data_path / "charset.pkl", + mode="eval", + ) + + image = read_image(prediction_data_path / "images" / image_name) + image = dan_model.preprocess(image) + + input_tensor = torch.tensor(image).permute(2, 0, 1).unsqueeze(0) + input_tensor = input_tensor.to(device) + input_sizes = [image.shape[:2]] + + prediction = dan_model.predict(input_tensor, input_sizes) + + assert prediction == expected_prediction diff --git a/tests/test_training.py b/tests/test_training.py index 44f87f0814953f157d8bf9d890859869c2947401..85a01927766335330f1c0279af857ba40e3fa1bb 100644 --- a/tests/test_training.py +++ b/tests/test_training.py @@ -57,7 +57,7 @@ def test_train_and_test( # Check that the trained model is correct for model_name in [expected_best_model_name, expected_last_model_name]: - expected_model = torch.load(FIXTURES / "training" / model_name) + expected_model = torch.load(FIXTURES / "training" / "models" / model_name) trained_model = torch.load( Path( "outputs",