|
7 | 7 | import os
|
8 | 8 | import data
|
9 | 9 | import cv2
|
| 10 | +import numpy as np |
10 | 11 |
|
11 | 12 |
|
12 | 13 | def zxing_decode(filename):
|
13 | 14 | start = time.time()
|
14 | 15 | img = cv2.imread(filename)
|
15 | 16 | zxing_results = zxingcpp.read_barcodes(img)
|
16 | 17 | elapsed_time = time.time() - start
|
17 |
| - if zxing_results != None: |
18 |
| - for result in zxing_results: |
19 |
| - print('ZXing: {}. Elapsed time: {}ms'.format( |
20 |
| - result.text, int(elapsed_time * 1000))) |
21 |
| - return zxing_results |
22 |
| - else: |
23 |
| - print('ZXing failed to decode {}'.format(filename)) |
24 |
| - |
25 |
| - return None |
| 18 | + print('ZXing: Elapsed time: {}ms'.format(int(elapsed_time * 1000))) |
| 19 | + return zxing_results |
26 | 20 |
|
27 | 21 |
|
28 |
| -def zbar_decode(zbar_reader, filename): |
| 22 | +def zbar_decode(filename): |
29 | 23 | start = time.time()
|
30 | 24 | zbar_results = zbar.decode(Image.open(filename))
|
31 | 25 | elapsed_time = time.time() - start
|
32 |
| - if len(zbar_results) > 0: |
33 |
| - for zbar_result in zbar_results: |
34 |
| - print('ZBar: {}. Elapsed time: {}ms'.format( |
35 |
| - zbar_result.data.decode("utf-8"), int(elapsed_time * 1000))) |
36 |
| - |
37 |
| - return zbar_results |
38 |
| - else: |
39 |
| - print('ZBar failed to decode {}'.format(filename)) |
40 |
| - |
41 |
| - return None |
| 26 | + print('ZBar: Elapsed time: {}ms'.format(int(elapsed_time * 1000))) |
| 27 | + return zbar_results |
42 | 28 |
|
43 | 29 |
|
44 | 30 | def dbr_decode(dbr_reader, filename):
|
45 | 31 | try:
|
46 | 32 | start = time.time()
|
47 | 33 | dbr_results = dbr_reader.decode_file(filename)
|
48 | 34 | elapsed_time = time.time() - start
|
| 35 | + print('Dynamsoft Barcode Reader: Elapsed time: {}ms'.format( |
| 36 | + int(elapsed_time * 1000))) |
49 | 37 |
|
50 |
| - if dbr_results != None: |
51 |
| - for text_result in dbr_results: |
52 |
| - # print(textResult["BarcodeFormatString"]) |
53 |
| - print('Dynamsoft Barcode Reader: {}. Elapsed time: {}ms'.format( |
54 |
| - text_result.barcode_text, int(elapsed_time * 1000))) |
| 38 | + return dbr_results |
55 | 39 |
|
56 |
| - return dbr_results |
57 |
| - else: |
58 |
| - print("DBR failed to decode {}".format(filename)) |
59 | 40 | except Exception as err:
|
60 | 41 | print("DBR failed to decode {}".format(filename))
|
61 | 42 |
|
62 | 43 | return None
|
63 | 44 |
|
64 | 45 |
|
65 |
| -def dataset(directory=None, zbar_reader=None, dbr_reader=None): |
| 46 | +def dataset(directory=None, dbr_reader=None): |
66 | 47 | if directory != None:
|
67 | 48 | print(directory)
|
68 | 49 | files = os.listdir(directory)
|
@@ -91,17 +72,16 @@ def dataset(directory=None, zbar_reader=None, dbr_reader=None):
|
91 | 72 | r3 = ''
|
92 | 73 |
|
93 | 74 | # ZBar
|
94 |
| - if zbar_reader != None: |
95 |
| - zbar_results = zbar_decode(zbar_reader, file_path) |
96 |
| - if zbar_results != None: |
97 |
| - for zbar_result in zbar_results: |
98 |
| - zbar_text = zbar_result.data.decode("utf-8") |
99 |
| - r1 = zbar_text |
100 |
| - if r1 == expected_result: |
101 |
| - zbar_count += 1 |
102 |
| - break |
103 |
| - else: |
104 |
| - print('Fail to decode {}'.format(filename)) |
| 75 | + zbar_results = zbar_decode(file_path) |
| 76 | + if zbar_results != None: |
| 77 | + for zbar_result in zbar_results: |
| 78 | + zbar_text = zbar_result.data.decode("utf-8") |
| 79 | + r1 = zbar_text |
| 80 | + if r1 == expected_result: |
| 81 | + zbar_count += 1 |
| 82 | + break |
| 83 | + else: |
| 84 | + print('Fail to decode {}'.format(filename)) |
105 | 85 |
|
106 | 86 | # DBR
|
107 | 87 | if dbr_reader != None:
|
@@ -137,10 +117,10 @@ def dataset(directory=None, zbar_reader=None, dbr_reader=None):
|
137 | 117 | r1 = 0
|
138 | 118 | r2 = 0
|
139 | 119 | r3 = 0
|
140 |
| - if zbar_reader != None: |
141 |
| - zbar_rate = zbar_count * 100 / total_count |
142 |
| - r1 = '{0:.2f}%'.format(zbar_rate) |
143 |
| - print('ZBar recognition rate: {0:.2f}%'.format(zbar_rate)) |
| 120 | + |
| 121 | + zbar_rate = zbar_count * 100 / total_count |
| 122 | + r1 = '{0:.2f}%'.format(zbar_rate) |
| 123 | + print('ZBar recognition rate: {0:.2f}%'.format(zbar_rate)) |
144 | 124 |
|
145 | 125 | if dbr_reader != None:
|
146 | 126 | dbr_rate = dbr_count * 100 / total_count
|
@@ -180,18 +160,54 @@ def main():
|
180 | 160 | dbr_reader = BarcodeReader()
|
181 | 161 |
|
182 | 162 | if image != None:
|
| 163 | + img = cv2.imread(image) |
| 164 | + copy = img.copy() |
183 | 165 | # ZXing
|
184 |
| - zxing_decode(image) |
| 166 | + zxing_results = zxing_decode(image) |
| 167 | + if zxing_results != None: |
| 168 | + for result in zxing_results: |
| 169 | + print('ZXing: {}. '.format( |
| 170 | + result.text)) |
| 171 | + |
| 172 | + cv2.drawContours( |
| 173 | + img, [np.intp([(result.position.top_left.x, result.position.top_left.y), (result.position.top_right.x, result.position.top_right.y), (result.position.bottom_right.x, result.position.bottom_right.y), (result.position.bottom_left.x, result.position.bottom_left.y) |
| 174 | + ])], 0, (0, 255, 0), 2) |
| 175 | + |
| 176 | + cv2.imshow('ZXing', img) |
185 | 177 |
|
186 | 178 | # ZBar
|
187 |
| - zbar_decode(zbar, image) |
| 179 | + img = copy.copy() |
| 180 | + zbar_results = zbar_decode(image) |
| 181 | + |
| 182 | + if len(zbar_results) > 0: |
| 183 | + for zbar_result in zbar_results: |
| 184 | + print('ZBar: {}. '.format( |
| 185 | + zbar_result.data.decode("utf-8"))) |
| 186 | + |
| 187 | + cv2.drawContours( |
| 188 | + img, [np.intp([zbar_result.polygon[0], zbar_result.polygon[1], zbar_result.polygon[2], zbar_result.polygon[3] |
| 189 | + ])], 0, (0, 255, 0), 2) |
| 190 | + |
| 191 | + cv2.imshow('zbar', img) |
188 | 192 |
|
189 | 193 | # Dynamsoft Barcode Reader
|
190 |
| - dbr_decode(dbr_reader, image) |
| 194 | + img = copy.copy() |
| 195 | + dbr_results = dbr_decode(dbr_reader, image) |
| 196 | + if dbr_results != None: |
| 197 | + for text_result in dbr_results: |
| 198 | + print('Dynamsoft Barcode Reader: {}'.format( |
| 199 | + text_result.barcode_text)) |
| 200 | + |
| 201 | + points = text_result.localization_result.localization_points |
| 202 | + cv2.drawContours( |
| 203 | + img, [np.intp([points[0], points[1], points[2], points[3]])], 0, (0, 255, 0), 2) |
| 204 | + |
| 205 | + cv2.imshow('DBR', img) |
| 206 | + |
| 207 | + cv2.waitKey(0) |
191 | 208 |
|
192 | 209 | if directory != None:
|
193 |
| - dataset(directory, |
194 |
| - zbar_reader=zbar, dbr_reader=dbr_reader) |
| 210 | + dataset(directory, dbr_reader=dbr_reader) |
195 | 211 |
|
196 | 212 |
|
197 | 213 | if __name__ == "__main__":
|
|
0 commit comments