e904b667c6
Build/Publish Develop Docs / deploy (push) Failing after 1s
PaddleOCR Code Style Check / check-code-style (push) Failing after 1s
PaddleOCR PR Tests GPU / detect-changes (push) Failing after 1s
PaddleOCR PR Tests / detect-changes (push) Failing after 1s
PaddleOCR PR Tests GPU / test-pr-gpu (push) Has been cancelled
PaddleOCR PR Tests / test-pr (push) Has been cancelled
PaddleOCR PR Tests GPU / test-pr-gpu-impl (push) Has been cancelled
PaddleOCR PR Tests / test-pr-python (3.13) (push) Has been cancelled
PaddleOCR PR Tests / test-pr-python (3.8) (push) Has been cancelled
PaddleOCR PR Tests / test-pr-python (3.9) (push) Has been cancelled
73 lines
2.6 KiB
Python
73 lines
2.6 KiB
Python
# Copyright (c) 2026 PaddlePaddle Authors. All Rights Reserved.
|
|
#
|
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
# you may not use this file except in compliance with the License.
|
|
# You may obtain a copy of the License at
|
|
#
|
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
#
|
|
# Unless required by applicable law or agreed to in writing, software
|
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
# See the License for the specific language governing permissions and
|
|
# limitations under the License.
|
|
|
|
import numpy as np
|
|
import paddle
|
|
import pytest
|
|
|
|
from ppocr.postprocess.cls_postprocess import ClsPostProcess
|
|
|
|
|
|
# Fixtures for common test inputs
|
|
@pytest.fixture
|
|
def preds_tensor():
|
|
return paddle.to_tensor(np.array([[0.1, 0.7, 0.2], [0.3, 0.3, 0.4]]))
|
|
|
|
|
|
@pytest.fixture
|
|
def label_list():
|
|
return {0: "class0", 1: "class1", 2: "class2"}
|
|
|
|
|
|
# Parameterize tests to cover multiple scenarios
|
|
@pytest.mark.parametrize(
|
|
"label_list, expected",
|
|
[
|
|
({0: "class0", 1: "class1", 2: "class2"}, [("class1", 0.7), ("class2", 0.4)]),
|
|
(None, [(1, 0.7), (2, 0.4)]),
|
|
],
|
|
)
|
|
def test_cls_post_process_with_and_without_label_list(
|
|
preds_tensor, label_list, expected
|
|
):
|
|
post_process = ClsPostProcess(label_list=label_list)
|
|
result = post_process(preds_tensor)
|
|
assert isinstance(result, list), "Result should be a list"
|
|
assert result == expected, f"Expected {expected}, got {result}"
|
|
|
|
|
|
# Test with a key in the prediction dictionary
|
|
def test_cls_post_process_with_key(preds_tensor, label_list):
|
|
preds_dict = {"key": preds_tensor}
|
|
post_process = ClsPostProcess(label_list=label_list, key="key")
|
|
result = post_process(preds_dict)
|
|
expected = [("class1", 0.7), ("class2", 0.4)]
|
|
assert isinstance(result, list), "Result should be a list"
|
|
assert result == expected, f"Expected {expected}, got {result}"
|
|
|
|
|
|
# Test with label input
|
|
def test_cls_post_process_with_label(preds_tensor, label_list):
|
|
labels = [2, 0]
|
|
post_process = ClsPostProcess(label_list=label_list)
|
|
result, label_result = post_process(preds_tensor, labels)
|
|
expected_result = [("class1", 0.7), ("class2", 0.4)]
|
|
expected_label_result = [("class2", 1.0), ("class0", 1.0)]
|
|
assert isinstance(result, list), "Result should be a list"
|
|
assert result == expected_result, f"Expected {expected_result}, got {result}"
|
|
assert isinstance(label_result, list), "Label result should be a list"
|
|
assert (
|
|
label_result == expected_label_result
|
|
), f"Expected {expected_label_result}, got {label_result}"
|