|
5 | 5 | from .read import DatamatrixByteExtractor |
6 | 6 | from .read import ReedSolomonDecoder |
7 | 7 | from .read import DatamatrixByteInterpreter |
| 8 | +from pylibdmtx.pylibdmtx import decode |
8 | 9 |
|
9 | 10 |
|
10 | 11 | # We predict the location of the center of each square (pixel/bit) in the datamatrix based on the |
@@ -104,6 +105,12 @@ def radius(self): |
104 | 105 | return self._finder_pattern.radius |
105 | 106 |
|
106 | 107 | def _read(self, gray_image, offsets): |
| 108 | + if self.radius() >= 0.2*(gray_image.shape[0]): |
| 109 | + self._read_single(gray_image) |
| 110 | + else: |
| 111 | + self._read_old(gray_image, offsets) |
| 112 | + |
| 113 | + def _read_old(self, gray_image, offsets): |
107 | 114 | """ From the supplied grayscale image, attempt to read the barcode at the location |
108 | 115 | given by the datamatrix finder pattern. |
109 | 116 | """ |
@@ -137,6 +144,23 @@ def _read(self, gray_image, offsets): |
137 | 144 |
|
138 | 145 | if self._read_ok: |
139 | 146 | break |
| 147 | + |
| 148 | + def _read_single(self, gray_image): |
| 149 | + try: |
| 150 | + result = decode(gray_image) |
| 151 | + if len(result) > 0: |
| 152 | + d = result[0].data |
| 153 | + decoded = d.decode('UTF-8') |
| 154 | + new_line_removed = decoded.replace("\n","") |
| 155 | + self._data = new_line_removed |
| 156 | + self._read_ok = True |
| 157 | + self._is_read_performed = True |
| 158 | + self._error_message = "" |
| 159 | + else: |
| 160 | + self._read_ok = False |
| 161 | + except(Exception) as ex: |
| 162 | + self._read_ok = False |
| 163 | + self._error_message = str(ex) |
140 | 164 |
|
141 | 165 | def draw(self, img, color): |
142 | 166 | """ Draw the lines of the finder pattern on the specified image. """ |
|
0 commit comments