Source code for gs1grader.graders.symbol_contrast_grader
from gs1grader.common import DecodedDmtxData, get_modulation_attributes
from gs1grader.grader_interface import DataMatrixGraderInterface
[docs]
class SymbolContrastGrader(DataMatrixGraderInterface):
"""Grader for evaluating the symbol contrast of a Data Matrix code.
Symbol contrast measures the difference between the reflectance of
light and dark modules in the Data Matrix. Higher symbol contrast
values indicate better differentiation between light and dark modules,
which improves readability and scanning reliability.
The symbol contrast grade is determined by the following thresholds:
- Grade A: 70% or higher
- Grade B: 55% to 70%
- Grade C: 40% to 55%
- Grade D: 20% to 40%
- Grade F: Less than 20%
"""
def __init__(self):
self.grade_thresholds = {
range(70, 256): "A",
range(55, 70): "B",
range(40, 55): "C",
range(20, 40): "D",
range(0, 20): "F",
}
[docs]
def compute_grade(self, decoded_data: DecodedDmtxData) -> str:
"""
Compute symbol contrast grade based on color values.
Symbol contrast is the difference between the reflectance
of light and dark modules. This method calculates the
symbol contrast value and determines the grade based on
predefined thresholds.
:param decoded_data: The decoded DataMatrix data containing
information about the modules and their
color values.
:type decoded_data: DecodedDmtxData
:returns: The grade of the symbol contrast (A, B, C, D, or F).
:rtype: str
"""
modulation_attr = get_modulation_attributes(decoded_data)
for symbol_contrast_range, grade in self.grade_thresholds.items():
if int(modulation_attr.symbol_contrast) in symbol_contrast_range:
return grade
return "F"
[docs]
def explain_grade(
self, decoded_data: DecodedDmtxData, explanation_path: str
):
print("No explanation for symbol contrast")