4d3ca7e0 by 周伟奇

slice part 2

1 parent 149b0899
...@@ -1542,9 +1542,12 @@ BC_FIELD_ORDER_2 = (('BankName', '发卡行名称'), ...@@ -1542,9 +1542,12 @@ BC_FIELD_ORDER_2 = (('BankName', '发卡行名称'),
1542 1542
1543 IMG_PATH_KEY = 'uniq_img_path_key' 1543 IMG_PATH_KEY = 'uniq_img_path_key'
1544 IMG_PATH_KEY_2 = 'uniq_img_path_key_2' 1544 IMG_PATH_KEY_2 = 'uniq_img_path_key_2'
1545 SECTION_IMG_PATH_KEY = 'uniq_section_img_path_key'
1546 ALL_POSITION_KEY = 'uniq_all_position_key'
1545 POSITION_KEY = 'uniq_position_key' 1547 POSITION_KEY = 'uniq_position_key'
1546 SECTION_KEY = 'uniq_section_key'
1547 ANGLE_KEY = 'uniq_angle_key' 1548 ANGLE_KEY = 'uniq_angle_key'
1549 FIELD_POSITION_KEY = 'position'
1550 FIELD_QUAD_KEY = 'quad'
1548 1551
1549 INFO_SOURCE = ['POS', 'CMS'] 1552 INFO_SOURCE = ['POS', 'CMS']
1550 1553
......
...@@ -373,7 +373,7 @@ class Command(BaseCommand, LoggerMixin): ...@@ -373,7 +373,7 @@ class Command(BaseCommand, LoggerMixin):
373 license_summary.setdefault(classify, []).extend(license_data) 373 license_summary.setdefault(classify, []).extend(license_data)
374 res_list.append((pno, ino, part_idx, consts.RES_SUCCESS)) 374 res_list.append((pno, ino, part_idx, consts.RES_SUCCESS))
375 375
376 def license2_process(self, ocr_res_2, license_summary, pid, classify, res_list, pno, ino, part_idx, img_path, do_dda, dda_id_bc_mapping, section_img_path=None): 376 def license2_process(self, ocr_res_2, license_summary, pid, classify, res_list, pno, ino, part_idx, img_path, do_dda, dda_id_bc_mapping, file_data):
377 if ocr_res_2.get('ErrorCode') in consts.SUCCESS_CODE_SET: 377 if ocr_res_2.get('ErrorCode') in consts.SUCCESS_CODE_SET:
378 res_list.append((pno, ino, part_idx, consts.RES_SUCCESS)) 378 res_list.append((pno, ino, part_idx, consts.RES_SUCCESS))
379 if pid == consts.BC_PID: 379 if pid == consts.BC_PID:
...@@ -389,19 +389,51 @@ class Command(BaseCommand, LoggerMixin): ...@@ -389,19 +389,51 @@ class Command(BaseCommand, LoggerMixin):
389 dda_id_bc_mapping.setdefault(consts.BC_FIELD, []).append((bc_no, img_path)) 389 dda_id_bc_mapping.setdefault(consts.BC_FIELD, []).append((bc_no, img_path))
390 else: 390 else:
391 # 营业执照等 391 # 营业执照等
392 for result_dict in ocr_res_2.get('ResultList', []): 392 pre, suf = os.path.splitext(img_path)
393 src_section_img_path = img_path if file_data is None else '{0}_{1}{2}'.format(pre, part_idx, suf)
394
395 is_save = False
396 for res_idx, result_dict in enumerate(ocr_res_2.get('ResultList', [])):
397 image_data = result_dict.get('image_data', '')
398 if len(image_data) > 0:
399 position = {}
400 angle = 0
401 section_img_path = '{0}_{1}_{2}{3}'.format(pre, part_idx, res_idx, suf)
402 try:
403 with open(section_img_path, "wb") as fh:
404 fh.write(base64.b64decode(image_data.encode()))
405 except Exception as e:
406 self.online_log.warn(
407 '{0} [section img save failed] [img_path={1}]'
408 ' [part_idx={2}] [res_idx={3}]'.format(self.log_base, img_path, part_idx, res_idx))
409 else:
410 is_save = True
411 section_img_path = src_section_img_path
393 position = result_dict.get('position', {}) 412 position = result_dict.get('position', {})
394 angle = result_dict.get('angle', 0) 413 angle = result_dict.get('angle', 0)
395 res_dict = {} 414 res_dict = {}
396 position_dict = {} 415 position_dict = {}
397 for field_dict in result_dict.get('FieldList', []): 416 for field_dict in result_dict.get('FieldList', []):
398 res_dict[field_dict.get('chn_key', '')] = field_dict.get('value', '') 417 res_dict[field_dict.get('chn_key', '')] = field_dict.get('value', '')
399 position_dict[field_dict.get('chn_key', '')] = field_dict.get('position', []) 418 position_dict[field_dict.get('chn_key', '')] = {
400 position_dict[consts.SECTION_KEY] = position 419 consts.FIELD_POSITION_KEY: field_dict.get('position', {}),
420 consts.FIELD_QUAD_KEY: field_dict.get('quad', []),
421 }
422 position_dict[consts.POSITION_KEY] = position
401 position_dict[consts.ANGLE_KEY] = angle 423 position_dict[consts.ANGLE_KEY] = angle
402 res_dict[consts.IMG_PATH_KEY] = section_img_path if isinstance(section_img_path, str) else img_path 424 res_dict[consts.IMG_PATH_KEY] = img_path
403 res_dict[consts.POSITION_KEY] = position_dict 425 res_dict[consts.SECTION_IMG_PATH_KEY] = section_img_path
426 res_dict[consts.ALL_POSITION_KEY] = position_dict
404 license_summary.setdefault(classify, []).append(res_dict) 427 license_summary.setdefault(classify, []).append(res_dict)
428
429 if is_save and file_data is not None:
430 try:
431 with open(src_section_img_path, "wb") as fh:
432 fh.write(base64.b64decode(file_data.encode()))
433 except Exception as e:
434 self.online_log.warn(
435 '{0} [section img save failed] [img_path={1}]'
436 ' [part_idx={2}]'.format(self.log_base, img_path, part_idx))
405 else: 437 else:
406 res_list.append((pno, ino, part_idx, consts.RES_FAILED_2)) 438 res_list.append((pno, ino, part_idx, consts.RES_FAILED_2))
407 439
...@@ -980,22 +1012,9 @@ class Command(BaseCommand, LoggerMixin): ...@@ -980,22 +1012,9 @@ class Command(BaseCommand, LoggerMixin):
980 name = '无' 1012 name = '无'
981 ocr_2_res['Name'] = name 1013 ocr_2_res['Name'] = name
982 1014
983 section_img_path = None
984 try:
985 if ocr_2_res.get('ErrorCode') in consts.SUCCESS_CODE_SET:
986 pre, suf = os.path.splitext(img_path)
987 section_img_path = '{0}_{1}{2}'.format(pre, part_idx, suf)
988 with open(section_img_path, "wb") as fh:
989 fh.write(base64.b64decode(file_data.encode()))
990 except Exception as e:
991 self.online_log.warn(
992 '{0} [section img save failed] [img_path={1}]'
993 ' [part_idx={2}]'.format(self.log_base, img_path, part_idx))
994
995 self.license2_process(ocr_2_res, license_summary, pid, classify, 1015 self.license2_process(ocr_2_res, license_summary, pid, classify,
996 res_list, pno, ino, part_idx, img_path, 1016 res_list, pno, ino, part_idx, img_path,
997 do_dda, dda_id_bc_mapping, 1017 do_dda, dda_id_bc_mapping, file_data=ocr_data.get('section_img'))
998 section_img_path=section_img_path)
999 break 1018 break
1000 else: 1019 else:
1001 res_list.append((pno, ino, part_idx, consts.RES_FAILED_2)) 1020 res_list.append((pno, ino, part_idx, consts.RES_FAILED_2))
......
1 import json 1 import json
2 import os
3 import cv2
2 import time 4 import time
3 import logging 5 import logging
4 import traceback 6 import traceback
7 import numpy as np
5 from datetime import datetime, timedelta 8 from datetime import datetime, timedelta
6 from collections import OrderedDict 9 from collections import OrderedDict
7 from . import app 10 from . import app
...@@ -40,6 +43,79 @@ empty_error_type = 1000 ...@@ -40,6 +43,79 @@ empty_error_type = 1000
40 des_key = conf.CMS_DES_KEY 43 des_key = conf.CMS_DES_KEY
41 44
42 45
46 def rotate_bound(image, angle):
47 # grab the dimensions of the image and then determine the
48 # center
49 (h, w) = image.shape[:2]
50 (cX, cY) = (w // 2, h // 2)
51
52 # grab the rotation matrix (applying the negative of the
53 # angle to rotate clockwise), then grab the sine and cosine
54 # (i.e., the rotation components of the matrix)
55 M = cv2.getRotationMatrix2D((cX, cY), angle, 1.0)
56 cos = np.abs(M[0, 0])
57 sin = np.abs(M[0, 1])
58
59 # compute the new bounding dimensions of the image
60 nW = int((h * sin) + (w * cos))
61 nH = int((h * cos) + (w * sin))
62
63 # adjust the rotation matrix to take into account translation
64 M[0, 2] += (nW / 2) - cX
65 M[1, 2] += (nH / 2) - cY
66
67 # perform the actual rotation and return the image
68 return cv2.warpAffine(image, M, (nW, nH))
69
70
71 def build_coordinates(section_position_dict):
72 if isinstance(section_position_dict, dict):
73 h_min = section_position_dict.get('top', 0)
74 w_min = section_position_dict.get('left', 0)
75 h_max = h_min + section_position_dict.get('height', 0)
76 w_max = w_min + section_position_dict.get('width', 0)
77 if h_max > h_min and w_max > w_min:
78 return True, (h_min, h_max, w_min, w_max)
79 else:
80 return False, ()
81 return False, ()
82
83
84 def field_build_coordinates(field_position_info):
85 field_position_dict = field_position_info.get(consts.FIELD_POSITION_KEY, {})
86 field_quad_list = field_position_info.get(consts.FIELD_QUAD_KEY, [])
87 if isinstance(field_quad_list, list) and len(field_quad_list) == 8:
88 w_list = [field_quad_list[0], field_quad_list[2], field_quad_list[4], field_quad_list[6]]
89 h_list = [field_quad_list[1], field_quad_list[3], field_quad_list[5], field_quad_list[7]]
90 h_min = min(h_list)
91 h_max = max(h_list)
92 w_min = min(w_list)
93 w_max = max(w_list)
94 if h_max > h_min and w_max > w_min:
95 return True, (h_min, h_max, w_min, w_max)
96 if isinstance(field_position_dict, dict):
97 h_min = field_position_dict.get('top', 0)
98 w_min = field_position_dict.get('left', 0)
99 h_max = h_min + field_position_dict.get('height', 0)
100 w_max = w_min + field_position_dict.get('width', 0)
101 if h_max > h_min and w_max > w_min:
102 return True, (h_min, h_max, w_min, w_max)
103 else:
104 return False, ()
105 return False, ()
106
107
108 def img_process(section_img_path, section_position, section_angle):
109 image = cv2.imread(section_img_path)
110 is_valid, coord_tuple = build_coordinates(section_position)
111 if is_valid:
112 image = image[coord_tuple[0]:coord_tuple[1], coord_tuple[2]:coord_tuple[3], :]
113 if isinstance(section_angle, int) or isinstance(section_angle, float):
114 if section_angle != 0:
115 return rotate_bound(image, section_angle)
116 return image
117
118
43 class FakePOS: 119 class FakePOS:
44 120
45 def __init__(self, 121 def __init__(self,
...@@ -289,6 +365,8 @@ def ca_compare_license(license_en, ocr_res_dict, field_list): ...@@ -289,6 +365,8 @@ def ca_compare_license(license_en, ocr_res_dict, field_list):
289 365
290 is_find = False 366 is_find = False
291 result_field_list = [] 367 result_field_list = []
368 section_img_info = dict()
369 field_img_path_dict = dict()
292 ocr_res_str = ocr_res_dict.get(ocr_field) 370 ocr_res_str = ocr_res_dict.get(ocr_field)
293 if ocr_res_str is not None: 371 if ocr_res_str is not None:
294 ocr_res_list = json.loads(ocr_res_str) 372 ocr_res_list = json.loads(ocr_res_str)
...@@ -323,6 +401,8 @@ def ca_compare_license(license_en, ocr_res_dict, field_list): ...@@ -323,6 +401,8 @@ def ca_compare_license(license_en, ocr_res_dict, field_list):
323 break 401 break
324 402
325 is_find = True 403 is_find = True
404 section_img_info[consts.SECTION_IMG_PATH_KEY] = ocr_res_list[res_idx].get(consts.SECTION_IMG_PATH_KEY, '')
405 section_img_info[consts.ALL_POSITION_KEY] = ocr_res_list[res_idx].get(consts.ALL_POSITION_KEY, {})
326 406
327 # 过期期限特殊处理 407 # 过期期限特殊处理
328 if special_expiry_date and name == 'idExpiryDate' and result == consts.RESULT_N: 408 if special_expiry_date and name == 'idExpiryDate' and result == consts.RESULT_N:
...@@ -341,13 +421,48 @@ def ca_compare_license(license_en, ocr_res_dict, field_list): ...@@ -341,13 +421,48 @@ def ca_compare_license(license_en, ocr_res_dict, field_list):
341 else: 421 else:
342 img_path = ocr_res_list[res_idx].get(consts.IMG_PATH_KEY, '') if result == consts.RESULT_N else empty_str 422 img_path = ocr_res_list[res_idx].get(consts.IMG_PATH_KEY, '') if result == consts.RESULT_N else empty_str
343 error_type = empty_error_type if result == consts.RESULT_Y else ErrorType.OCR.value 423 error_type = empty_error_type if result == consts.RESULT_Y else ErrorType.OCR.value
344 result_field_list.append((name, value, result, ocr_str, position_img_path, img_path, error_type)) 424 result_field_list.append((name, value, result, ocr_str, img_path, error_type))
345 425
346 if not is_find: 426 if not is_find:
347 for name, value in field_list: 427 for name, value in field_list:
348 result_field_list.append((name, value, consts.RESULT_N, empty_str, empty_str, empty_str, ErrorType.NF.value)) 428 result_field_list.append((name, value, consts.RESULT_N, empty_str, empty_str, ErrorType.NF.value))
429
430 if is_find:
431 section_img_path = section_img_info.get(consts.SECTION_IMG_PATH_KEY, '')
432 if os.path.exists(section_img_path):
433 failed_field = []
434 base_img_path = empty_str
435 for name, _, result, _, img_path, _ in result_field_list:
436 if result == consts.RESULT_N:
437 failed_field.append(name)
438 if base_img_path == empty_str:
439 base_img_path = img_path
440 if len(failed_field) > 0:
441 info = section_img_info.get(consts.ALL_POSITION_KEY, {})
442 section_position = info.get(consts.POSITION_KEY, {})
443 section_angle = info.get(consts.ANGLE_KEY, 0)
444 try:
445 last_img = img_process(section_img_path, section_position, section_angle)
446 except Exception as e:
447 for field in failed_field:
448 field_img_path_dict[field] = base_img_path
449 else:
450 pre, suf = os.path.splitext(section_img_path)
451 for field in failed_field:
452 try:
453 res_field = compare_logic[field][0]
454 is_valid, coord_tuple = field_build_coordinates(info.get(res_field, {}))
455 if is_valid:
456 save_path = '{0}_{1}{2}'.format(pre, field, suf)
457 field_img = last_img[coord_tuple[0]:coord_tuple[1], coord_tuple[2]:coord_tuple[3], :]
458 cv2.imwrite(save_path, field_img)
459 field_img_path_dict[field] = save_path
460 else:
461 field_img_path_dict[field] = base_img_path
462 except Exception as e:
463 field_img_path_dict[field] = base_img_path
349 464
350 return result_field_list 465 return result_field_list, field_img_path_dict
351 466
352 467
353 def ca_compare_process(compare_info, ocr_res_dict): 468 def ca_compare_process(compare_info, ocr_res_dict):
...@@ -363,8 +478,8 @@ def ca_compare_process(compare_info, ocr_res_dict): ...@@ -363,8 +478,8 @@ def ca_compare_process(compare_info, ocr_res_dict):
363 for idx, license_list in info_value.items(): 478 for idx, license_list in info_value.items():
364 for license_dict in license_list: 479 for license_dict in license_list:
365 for license_en, field_list in license_dict.items(): 480 for license_en, field_list in license_dict.items():
366 result_field_list = ca_compare_license(license_en, ocr_res_dict, field_list) 481 result_field_list, field_img_path_dict = ca_compare_license(license_en, ocr_res_dict, field_list)
367 for name, value, result, ocr_str, position_img_path, img_path, error_type in result_field_list: 482 for name, value, result, ocr_str, img_path, error_type in result_field_list:
368 total_fields += 1 483 total_fields += 1
369 if result == consts.RESULT_N: 484 if result == consts.RESULT_N:
370 failed_count += 1 485 failed_count += 1
...@@ -377,15 +492,15 @@ def ca_compare_process(compare_info, ocr_res_dict): ...@@ -377,15 +492,15 @@ def ca_compare_process(compare_info, ocr_res_dict):
377 consts.HEAD_LIST[4]: value, 492 consts.HEAD_LIST[4]: value,
378 consts.HEAD_LIST[5]: ocr_str, 493 consts.HEAD_LIST[5]: ocr_str,
379 consts.HEAD_LIST[6]: result, 494 consts.HEAD_LIST[6]: result,
380 consts.HEAD_LIST[7]: position_img_path, 495 consts.HEAD_LIST[7]: field_img_path_dict.get(name, empty_str),
381 consts.HEAD_LIST[8]: img_path, 496 consts.HEAD_LIST[8]: img_path,
382 consts.HEAD_LIST[9]: error_type, 497 consts.HEAD_LIST[9]: error_type,
383 } 498 }
384 ) 499 )
385 else: 500 else:
386 for license_en, field_list in info_value.items(): 501 for license_en, field_list in info_value.items():
387 result_field_list = ca_compare_license(license_en, ocr_res_dict, field_list) 502 result_field_list, field_img_path_dict = ca_compare_license(license_en, ocr_res_dict, field_list)
388 for name, value, result, ocr_str, position_img_path, img_path, error_type in result_field_list: 503 for name, value, result, ocr_str, img_path, error_type in result_field_list:
389 total_fields += 1 504 total_fields += 1
390 if result == consts.RESULT_N: 505 if result == consts.RESULT_N:
391 failed_count += 1 506 failed_count += 1
...@@ -398,7 +513,7 @@ def ca_compare_process(compare_info, ocr_res_dict): ...@@ -398,7 +513,7 @@ def ca_compare_process(compare_info, ocr_res_dict):
398 consts.HEAD_LIST[4]: value, 513 consts.HEAD_LIST[4]: value,
399 consts.HEAD_LIST[5]: ocr_str, 514 consts.HEAD_LIST[5]: ocr_str,
400 consts.HEAD_LIST[6]: result, 515 consts.HEAD_LIST[6]: result,
401 consts.HEAD_LIST[7]: position_img_path, 516 consts.HEAD_LIST[7]: field_img_path_dict.get(name, empty_str),
402 consts.HEAD_LIST[8]: img_path, 517 consts.HEAD_LIST[8]: img_path,
403 consts.HEAD_LIST[9]: error_type, 518 consts.HEAD_LIST[9]: error_type,
404 } 519 }
...@@ -1073,6 +1188,8 @@ def se_compare_license(license_en, ocr_res_dict, field_list): ...@@ -1073,6 +1188,8 @@ def se_compare_license(license_en, ocr_res_dict, field_list):
1073 is_find = False 1188 is_find = False
1074 no_ocr_result = False 1189 no_ocr_result = False
1075 result_field_list = [] 1190 result_field_list = []
1191 section_img_info = dict()
1192 field_img_path_dict = dict()
1076 ocr_res_str = ocr_res_dict.get(ocr_field) 1193 ocr_res_str = ocr_res_dict.get(ocr_field)
1077 if ocr_res_str is not None: 1194 if ocr_res_str is not None:
1078 ocr_res_list = json.loads(ocr_res_str) 1195 ocr_res_list = json.loads(ocr_res_str)
...@@ -1104,6 +1221,8 @@ def se_compare_license(license_en, ocr_res_dict, field_list): ...@@ -1104,6 +1221,8 @@ def se_compare_license(license_en, ocr_res_dict, field_list):
1104 break 1221 break
1105 1222
1106 is_find = True 1223 is_find = True
1224 section_img_info[consts.SECTION_IMG_PATH_KEY] = ocr_res_list[res_idx].get(consts.SECTION_IMG_PATH_KEY, '')
1225 section_img_info[consts.ALL_POSITION_KEY] = ocr_res_list[res_idx].get(consts.ALL_POSITION_KEY, {})
1107 1226
1108 # 过期期限特殊处理 1227 # 过期期限特殊处理
1109 if special_expiry_date and name == 'idExpiryDate' and result == consts.RESULT_N: 1228 if special_expiry_date and name == 'idExpiryDate' and result == consts.RESULT_N:
...@@ -1116,15 +1235,50 @@ def se_compare_license(license_en, ocr_res_dict, field_list): ...@@ -1116,15 +1235,50 @@ def se_compare_license(license_en, ocr_res_dict, field_list):
1116 1235
1117 img_path = ocr_res_list[res_idx].get(consts.IMG_PATH_KEY, '') if result == consts.RESULT_N else empty_str 1236 img_path = ocr_res_list[res_idx].get(consts.IMG_PATH_KEY, '') if result == consts.RESULT_N else empty_str
1118 error_type = empty_error_type if result == consts.RESULT_Y else ErrorType.OCR.value 1237 error_type = empty_error_type if result == consts.RESULT_Y else ErrorType.OCR.value
1119 result_field_list.append((name, value, result, ocr_str, position_img_path, img_path, error_type)) 1238 result_field_list.append((name, value, result, ocr_str, img_path, error_type))
1120 else: 1239 else:
1121 no_ocr_result = True 1240 no_ocr_result = True
1122 1241
1123 if not is_find: 1242 if not is_find:
1124 for name, value in field_list: 1243 for name, value in field_list:
1125 result_field_list.append((name, value, consts.RESULT_N, empty_str, empty_str, empty_str, ErrorType.NF.value)) 1244 result_field_list.append((name, value, consts.RESULT_N, empty_str, empty_str, ErrorType.NF.value))
1245
1246 if is_find:
1247 section_img_path = section_img_info.get(consts.SECTION_IMG_PATH_KEY, '')
1248 if os.path.exists(section_img_path):
1249 failed_field = []
1250 base_img_path = empty_str
1251 for name, _, result, _, img_path, _ in result_field_list:
1252 if result == consts.RESULT_N:
1253 failed_field.append(name)
1254 if base_img_path == empty_str:
1255 base_img_path = img_path
1256 if len(failed_field) > 0:
1257 info = section_img_info.get(consts.ALL_POSITION_KEY, {})
1258 section_position = info.get(consts.POSITION_KEY, {})
1259 section_angle = info.get(consts.ANGLE_KEY, 0)
1260 try:
1261 last_img = img_process(section_img_path, section_position, section_angle)
1262 except Exception as e:
1263 for field in failed_field:
1264 field_img_path_dict[field] = base_img_path
1265 else:
1266 pre, suf = os.path.splitext(section_img_path)
1267 for field in failed_field:
1268 try:
1269 res_field = compare_logic[field][0]
1270 is_valid, coord_tuple = field_build_coordinates(info.get(res_field, {}))
1271 if is_valid:
1272 save_path = '{0}_{1}{2}'.format(pre, field, suf)
1273 field_img = last_img[coord_tuple[0]:coord_tuple[1], coord_tuple[2]:coord_tuple[3], :]
1274 cv2.imwrite(save_path, field_img)
1275 field_img_path_dict[field] = save_path
1276 else:
1277 field_img_path_dict[field] = base_img_path
1278 except Exception as e:
1279 field_img_path_dict[field] = base_img_path
1126 1280
1127 return result_field_list, no_ocr_result 1281 return result_field_list, no_ocr_result, field_img_path_dict
1128 1282
1129 1283
1130 def se_mvc34_compare(license_en, ocr_res_dict, field_list): 1284 def se_mvc34_compare(license_en, ocr_res_dict, field_list):
...@@ -1184,14 +1338,13 @@ def se_mvc34_compare(license_en, ocr_res_dict, field_list): ...@@ -1184,14 +1338,13 @@ def se_mvc34_compare(license_en, ocr_res_dict, field_list):
1184 result = getattr(cp, compare_logic[name][1])(value, ocr_str, **compare_logic[name][2]) 1338 result = getattr(cp, compare_logic[name][1])(value, ocr_str, **compare_logic[name][2])
1185 img_path = ocr_res.get(consts.IMG_PATH_KEY, '') if result == consts.RESULT_N else empty_str 1339 img_path = ocr_res.get(consts.IMG_PATH_KEY, '') if result == consts.RESULT_N else empty_str
1186 error_type = empty_error_type if result == consts.RESULT_Y else ErrorType.OCR.value 1340 error_type = empty_error_type if result == consts.RESULT_Y else ErrorType.OCR.value
1187 position_img_path = empty_str 1341 result_field_list.append((name, value, result, ocr_str, img_path, error_type))
1188 result_field_list.append((name, value, result, ocr_str, position_img_path, img_path, error_type))
1189 1342
1190 if not is_find: 1343 if not is_find:
1191 for name, value in field_list: 1344 for name, value in field_list:
1192 result_field_list.append((name, value, consts.RESULT_N, empty_str, empty_str, empty_str, ErrorType.NF.value)) 1345 result_field_list.append((name, value, consts.RESULT_N, empty_str, empty_str, ErrorType.NF.value))
1193 1346
1194 return result_field_list 1347 return result_field_list, dict()
1195 1348
1196 1349
1197 def se_compare_process(compare_info, ocr_res_dict): 1350 def se_compare_process(compare_info, ocr_res_dict):
...@@ -1211,8 +1364,8 @@ def se_compare_process(compare_info, ocr_res_dict): ...@@ -1211,8 +1364,8 @@ def se_compare_process(compare_info, ocr_res_dict):
1211 for license_dict in license_list: 1364 for license_dict in license_list:
1212 for license_en, field_list in license_dict.items(): 1365 for license_en, field_list in license_dict.items():
1213 failure_field = [] 1366 failure_field = []
1214 result_field_list, no_ocr_result = se_compare_license(license_en, ocr_res_dict, field_list) 1367 result_field_list, no_ocr_result, field_img_path_dict = se_compare_license(license_en, ocr_res_dict, field_list)
1215 for name, value, result, ocr_str, position_img_path, img_path, error_type in result_field_list: 1368 for name, value, result, ocr_str, img_path, error_type in result_field_list:
1216 if license_en not in consts.SKIP_CARD or not no_ocr_result: 1369 if license_en not in consts.SKIP_CARD or not no_ocr_result:
1217 total_fields += 1 1370 total_fields += 1
1218 if result == consts.RESULT_N: 1371 if result == consts.RESULT_N:
...@@ -1228,7 +1381,7 @@ def se_compare_process(compare_info, ocr_res_dict): ...@@ -1228,7 +1381,7 @@ def se_compare_process(compare_info, ocr_res_dict):
1228 consts.HEAD_LIST[4]: value, 1381 consts.HEAD_LIST[4]: value,
1229 consts.HEAD_LIST[5]: ocr_str, 1382 consts.HEAD_LIST[5]: ocr_str,
1230 consts.HEAD_LIST[6]: result, 1383 consts.HEAD_LIST[6]: result,
1231 consts.HEAD_LIST[7]: position_img_path, 1384 consts.HEAD_LIST[7]: field_img_path_dict.get(name, empty_str),
1232 consts.HEAD_LIST[8]: img_path, 1385 consts.HEAD_LIST[8]: img_path,
1233 consts.HEAD_LIST[9]: error_type, 1386 consts.HEAD_LIST[9]: error_type,
1234 } 1387 }
...@@ -1239,10 +1392,10 @@ def se_compare_process(compare_info, ocr_res_dict): ...@@ -1239,10 +1392,10 @@ def se_compare_process(compare_info, ocr_res_dict):
1239 for license_en, field_list in info_value.items(): 1392 for license_en, field_list in info_value.items():
1240 failure_field = [] 1393 failure_field = []
1241 if license_en == consts.MVC34_EN: 1394 if license_en == consts.MVC34_EN:
1242 result_field_list = se_mvc34_compare(license_en, ocr_res_dict, field_list) 1395 result_field_list, field_img_path_dict = se_mvc34_compare(license_en, ocr_res_dict, field_list)
1243 else: 1396 else:
1244 result_field_list, _ = se_compare_license(license_en, ocr_res_dict, field_list) 1397 result_field_list, _, field_img_path_dict = se_compare_license(license_en, ocr_res_dict, field_list)
1245 for name, value, result, ocr_str, position_img_path, img_path, error_type in result_field_list: 1398 for name, value, result, ocr_str, img_path, error_type in result_field_list:
1246 total_fields += 1 1399 total_fields += 1
1247 if result == consts.RESULT_N: 1400 if result == consts.RESULT_N:
1248 failed_count += 1 1401 failed_count += 1
...@@ -1257,7 +1410,7 @@ def se_compare_process(compare_info, ocr_res_dict): ...@@ -1257,7 +1410,7 @@ def se_compare_process(compare_info, ocr_res_dict):
1257 consts.HEAD_LIST[4]: value, 1410 consts.HEAD_LIST[4]: value,
1258 consts.HEAD_LIST[5]: ocr_str, 1411 consts.HEAD_LIST[5]: ocr_str,
1259 consts.HEAD_LIST[6]: result, 1412 consts.HEAD_LIST[6]: result,
1260 consts.HEAD_LIST[7]: position_img_path, 1413 consts.HEAD_LIST[7]: field_img_path_dict.get(name, empty_str),
1261 consts.HEAD_LIST[8]: img_path, 1414 consts.HEAD_LIST[8]: img_path,
1262 consts.HEAD_LIST[9]: error_type, 1415 consts.HEAD_LIST[9]: error_type,
1263 } 1416 }
......
Styling with Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!