77676d5c by 周伟奇

add position

1 parent 086507c6
...@@ -298,14 +298,26 @@ class Command(BaseCommand, LoggerMixin): ...@@ -298,14 +298,26 @@ class Command(BaseCommand, LoggerMixin):
298 # rebuild_data_dict[detail_dict.get('chinese_key', '')] = detail_dict.get('words', '') 298 # rebuild_data_dict[detail_dict.get('chinese_key', '')] = detail_dict.get('words', '')
299 # return [rebuild_data_dict] 299 # return [rebuild_data_dict]
300 300
301 301 def license1_process(self, ocr_data, license_summary, classify, res_list, pno, ino, part_idx, img_path, do_dda,
302 302 dda_id_bc_mapping):
303 def license1_process(self, ocr_data, license_summary, classify, res_list, pno, ino, part_idx, img_path, do_dda, dda_id_bc_mapping):
304 # 类别:'0'身份证, '1'居住证 303 # 类别:'0'身份证, '1'居住证
305 license_data = ocr_data.get('data') 304 license_data = ocr_data.get('data')
306 if not license_data: 305 if not license_data:
307 res_list.append((pno, ino, part_idx, consts.RES_SUCCESS_EMPTY)) 306 res_list.append((pno, ino, part_idx, consts.RES_SUCCESS_EMPTY))
308 return 307 return
308 pre, suf = os.path.splitext(img_path)
309 base64_img = license_data.pop('base64_img', '')
310 is_save = True if len(base64_img) > 0 else False
311 section_img_path = '{0}_{1}{2}'.format(pre, part_idx, suf) if is_save else img_path
312 if is_save:
313 try:
314 with open(section_img_path, "wb") as fh:
315 fh.write(base64.b64decode(base64_img.encode()))
316 except Exception as e:
317 self.online_log.warn(
318 '{0} [section img save failed] [img_path={1}]'
319 ' [part_idx={2}]'.format(self.log_base, img_path, part_idx))
320
309 # 保单 321 # 保单
310 if classify == consts.INSURANCE_CLASSIFY: 322 if classify == consts.INSURANCE_CLASSIFY:
311 product_result = ['', '', ''] 323 product_result = ['', '', '']
...@@ -333,7 +345,13 @@ class Command(BaseCommand, LoggerMixin): ...@@ -333,7 +345,13 @@ class Command(BaseCommand, LoggerMixin):
333 '保险截止日期': license_data.get('result', {}).get('endDate', {}).get('words', ''), 345 '保险截止日期': license_data.get('result', {}).get('endDate', {}).get('words', ''),
334 '保单章': license_data.get('result', {}).get('seal', {}).get('words', ''), 346 '保单章': license_data.get('result', {}).get('seal', {}).get('words', ''),
335 '特别约定第一受益人': special, 347 '特别约定第一受益人': special,
348 consts.IMG_PATH_KEY: img_path,
349 consts.SECTION_IMG_PATH_KEY: section_img_path,
336 } 350 }
351 # position_dict = {
352 # '': {consts.FIELD_POSITION_KEY: {}}
353 # }
354 # insurance_ocr_result[consts.ALL_POSITION_KEY] = position_dict
337 license_summary.setdefault(classify, []).append(insurance_ocr_result) 355 license_summary.setdefault(classify, []).append(insurance_ocr_result)
338 # DDA 356 # DDA
339 elif classify == consts.DDA_CLASSIFY: 357 elif classify == consts.DDA_CLASSIFY:
...@@ -341,37 +359,103 @@ class Command(BaseCommand, LoggerMixin): ...@@ -341,37 +359,103 @@ class Command(BaseCommand, LoggerMixin):
341 if pro < consts.DDA_PRO_MIN: 359 if pro < consts.DDA_PRO_MIN:
342 res_list.append((pno, ino, part_idx, consts.RES_SUCCESS_EMPTY)) 360 res_list.append((pno, ino, part_idx, consts.RES_SUCCESS_EMPTY))
343 return 361 return
344 dda_ocr_result = {key: value.get('words', '') for key, value in license_data.get('result', {}).items()} 362 dda_ocr_result = {}
363 position_dict = {}
364 for key, value in license_data.get('result', {}).items():
365 dda_ocr_result[key] = value.get('words', '')
366 position_dict[key] = {
367 consts.FIELD_POSITION_KEY: value.get('position', {})
368 }
345 dda_ocr_result[consts.DDA_IMG_PATH] = img_path 369 dda_ocr_result[consts.DDA_IMG_PATH] = img_path
346 dda_ocr_result[consts.DDA_PRO] = pro 370 dda_ocr_result[consts.DDA_PRO] = pro
347 dda_ocr_result[consts.IMG_PATH_KEY] = img_path 371 dda_ocr_result[consts.IMG_PATH_KEY] = img_path
372 dda_ocr_result[consts.SECTION_IMG_PATH_KEY] = section_img_path
373 dda_ocr_result[consts.ALL_POSITION_KEY] = position_dict
348 license_summary.setdefault(classify, []).append(dda_ocr_result) 374 license_summary.setdefault(classify, []).append(dda_ocr_result)
349 # 抵押登记豁免函 375 # 抵押登记豁免函
350 elif classify == consts.HMH_CLASSIFY: 376 elif classify == consts.HMH_CLASSIFY:
351 hmh_ocr_result = {key: value.get('words', '') for key, value in license_data.get('words_result', {}).items()} 377 hmh_ocr_result = {}
378 position_dict = {}
379 for key, value in license_data.get('words_result', {}).items():
380 hmh_ocr_result[key] = value.get('words', '')
381 location_list = value.get('location', [-1, -1, -1, -1])
382 if len(location_list) == 4:
383 position_dict[key] = {
384 consts.FIELD_POSITION_KEY: {
385 'top': location_list[1],
386 'left': location_list[0],
387 'height': location_list[-1] - location_list[1],
388 'width': location_list[2] - location_list[0]
389 }
390 }
391 hmh_ocr_result[consts.IMG_PATH_KEY] = img_path
392 hmh_ocr_result[consts.SECTION_IMG_PATH_KEY] = section_img_path
393 hmh_ocr_result[consts.ALL_POSITION_KEY] = position_dict
352 license_summary.setdefault(classify, []).append(hmh_ocr_result) 394 license_summary.setdefault(classify, []).append(hmh_ocr_result)
353 # 二手车交易凭证 395 # 二手车交易凭证
354 elif classify == consts.JYPZ_CLASSIFY: 396 elif classify == consts.JYPZ_CLASSIFY:
355 jypz_ocr_result = {key: value.get('words', '') for key, value in license_data.get('result', {}).items()} 397 jypz_ocr_result = {}
398 position_dict = {}
399 for key, value in license_data.get('result', {}).items():
400 jypz_ocr_result[key] = value.get('words', '')
401 position_dict[key] = {
402 consts.FIELD_POSITION_KEY: value.get('position', {})
403 }
404 jypz_ocr_result[consts.IMG_PATH_KEY] = img_path
405 jypz_ocr_result[consts.SECTION_IMG_PATH_KEY] = section_img_path
406 jypz_ocr_result[consts.ALL_POSITION_KEY] = position_dict
356 license_summary.setdefault(classify, []).append(jypz_ocr_result) 407 license_summary.setdefault(classify, []).append(jypz_ocr_result)
357 # 车辆登记证 3/4页结果整合 408 # 车辆登记证 3/4页结果整合
358 elif classify == consts.MVC_CLASSIFY: 409 elif classify == consts.MVC_CLASSIFY:
359 rebuild_data_dict = {} 410 rebuild_data_dict = {}
411 position_dict = {}
360 rebuild_data_dict[consts.IMG_PATH_KEY] = img_path 412 rebuild_data_dict[consts.IMG_PATH_KEY] = img_path
413 rebuild_data_dict[consts.SECTION_IMG_PATH_KEY] = section_img_path
361 mvc_page = license_data.pop('page', 'VehicleRCI') 414 mvc_page = license_data.pop('page', 'VehicleRCI')
362 mvc_res = license_data.pop('results', {}) 415 mvc_res = license_data.pop('results', {})
363 if mvc_page == 'VehicleRegArea': 416 if mvc_page == 'VehicleRegArea':
364 rebuild_data_dict['机动车登记证书编号'] = mvc_res.get('机动车登记证书编号', {}).get('words', '') 417 rebuild_data_dict['机动车登记证书编号'] = mvc_res.get('机动车登记证书编号', {}).get('words', '')
418 code_position_list = mvc_res.get('机动车登记证书编号', {}).get('position', [0, 0, 0, 0])
419 if len(code_position_list) == 4:
420 position_dict['机动车登记证书编号'] = {
421 consts.FIELD_POSITION_KEY: {
422 'top': code_position_list[1],
423 'left': code_position_list[0],
424 'height': code_position_list[-1],
425 'width': code_position_list[2],
426 }
427 }
365 for register_info in mvc_res.get('登记信息', []): 428 for register_info in mvc_res.get('登记信息', []):
366 register_info.pop('register_type', None) 429 register_info.pop('register_type', None)
367 register_info.pop('register_type_name', None) 430 register_info.pop('register_type_name', None)
368 for cn_key, detail_dict in register_info.items(): 431 for cn_key, detail_dict in register_info.items():
369 rebuild_data_dict.setdefault(cn_key, []).append( 432 rebuild_data_dict.setdefault(cn_key, []).append(
370 detail_dict.get('words', '')) 433 detail_dict.get('words', ''))
434 tmp_position_list = detail_dict.get('position', [0, 0, 0, 0])
435 if len(tmp_position_list) == 4:
436 position_dict[cn_key] = {
437 consts.FIELD_POSITION_KEY: {
438 'top': tmp_position_list[1],
439 'left': tmp_position_list[0],
440 'height': tmp_position_list[-1],
441 'width': tmp_position_list[2],
442 }
443 }
371 else: 444 else:
372 for cn_key, detail_dict in mvc_res.items(): 445 for cn_key, detail_dict in mvc_res.items():
373 rebuild_data_dict[cn_key] = detail_dict.get('words', '') 446 rebuild_data_dict[cn_key] = detail_dict.get('words', '')
447 position_list = detail_dict.get('position', [0, 0, 0, 0])
448 if len(position_list) == 4:
449 position_dict[cn_key] = {
450 consts.FIELD_POSITION_KEY: {
451 'top': position_list[1],
452 'left': position_list[0],
453 'height': position_list[-1],
454 'width': position_list[2],
455 }
456 }
374 del mvc_res 457 del mvc_res
458 rebuild_data_dict[consts.ALL_POSITION_KEY] = position_dict
375 license_summary.setdefault(classify, []).append(rebuild_data_dict) 459 license_summary.setdefault(classify, []).append(rebuild_data_dict)
376 460
377 461
...@@ -395,6 +479,7 @@ class Command(BaseCommand, LoggerMixin): ...@@ -395,6 +479,7 @@ class Command(BaseCommand, LoggerMixin):
395 # 身份证真伪 479 # 身份证真伪
396 elif classify == consts.IC_CLASSIFY: 480 elif classify == consts.IC_CLASSIFY:
397 id_card_dict = {} 481 id_card_dict = {}
482 position_dict = {}
398 card_type = license_data.get('type', '') 483 card_type = license_data.get('type', '')
399 is_ic = card_type.startswith('身份证') 484 is_ic = card_type.startswith('身份证')
400 is_info_side = card_type.endswith('信息面') 485 is_info_side = card_type.endswith('信息面')
...@@ -405,22 +490,40 @@ class Command(BaseCommand, LoggerMixin): ...@@ -405,22 +490,40 @@ class Command(BaseCommand, LoggerMixin):
405 field_map = consts.RP_MAP_0 if is_info_side else consts.RP_MAP_1 490 field_map = consts.RP_MAP_0 if is_info_side else consts.RP_MAP_1
406 for write_field, search_field in field_map: 491 for write_field, search_field in field_map:
407 id_card_dict[write_field] = license_data.get('words_result', {}).get(search_field, {}).get('words', '') 492 id_card_dict[write_field] = license_data.get('words_result', {}).get(search_field, {}).get('words', '')
493 location_list = license_data.get('words_result', {}).get(search_field, {}).get(
494 'location', [-1, -1, -1, -1])
495 if len(location_list) == 4:
496 position_dict[write_field] = {
497 consts.FIELD_POSITION_KEY: {
498 'top': location_list[1],
499 'left': location_list[0],
500 'height': location_list[-1] - location_list[1],
501 'width': location_list[2] - location_list[0]
502 }
503 }
408 if not is_info_side: 504 if not is_info_side:
409 start_time = license_data.get('words_result', {}).get('签发日期', {}).get('words', '') 505 start_time = license_data.get('words_result', {}).get('签发日期', {}).get('words', '')
410 end_time = license_data.get('words_result', {}).get('失效日期', {}).get('words', '') 506 end_time = license_data.get('words_result', {}).get('失效日期', {}).get('words', '')
411 id_card_dict['有效期限'] = '{0}-{1}'.format(start_time, end_time) 507 id_card_dict['有效期限'] = '{0}-{1}'.format(start_time, end_time)
508 end_time_location_list = license_data.get('words_result', {}).get('失效日期', {}).get(
509 'location', [-1, -1, -1, -1])
510 if len(end_time_location_list) == 4:
511 position_dict['有效期限'] = {
512 consts.FIELD_POSITION_KEY: {
513 'top': end_time_location_list[1],
514 'left': end_time_location_list[0],
515 'height': end_time_location_list[-1] - end_time_location_list[1],
516 'width': end_time_location_list[2] - end_time_location_list[0]
517 }
518 }
412 519
413 520 id_card_dict[consts.ALL_POSITION_KEY] = position_dict
521 id_card_dict[consts.SECTION_IMG_PATH_KEY] = section_img_path
414 if not is_info_side: 522 if not is_info_side:
415 id_card_dict[consts.IMG_PATH_KEY_2] = img_path 523 id_card_dict[consts.IMG_PATH_KEY_2] = img_path
416 else: 524 else:
417 id_card_dict[consts.IMG_PATH_KEY] = img_path 525 id_card_dict[consts.IMG_PATH_KEY] = img_path
418 if is_ic: 526 if is_ic and is_save:
419 try:
420 base64_img = license_data.pop('base64_img')
421 except Exception as e:
422 pass
423 else:
424 card_type = -1 527 card_type = -1
425 json_data_4 = { 528 json_data_4 = {
426 'mode': 1, 529 'mode': 1,
...@@ -460,23 +563,33 @@ class Command(BaseCommand, LoggerMixin): ...@@ -460,23 +563,33 @@ class Command(BaseCommand, LoggerMixin):
460 '{0} [ocr_4 failed] [img_path={1}]'.format(self.log_base, img_path)) 563 '{0} [ocr_4 failed] [img_path={1}]'.format(self.log_base, img_path))
461 564
462 id_card_dict[consts.IC_TURE_OR_FALSE] = consts.IC_RES_MAPPING.get(card_type) 565 id_card_dict[consts.IC_TURE_OR_FALSE] = consts.IC_RES_MAPPING.get(card_type)
463 finally: 566
464 if do_dda and isinstance(id_card_dict.get(consts.IC_KEY_FIELD[0]), str) and isinstance(id_card_dict.get(consts.IC_KEY_FIELD[1]), str): 567 if do_dda and isinstance(id_card_dict.get(consts.IC_KEY_FIELD[0]), str) and \
465 ic_name = id_card_dict[consts.IC_KEY_FIELD[0]].strip() 568 isinstance(id_card_dict.get(consts.IC_KEY_FIELD[1]), str):
466 ic_id = id_card_dict[consts.IC_KEY_FIELD[1]].strip() 569 ic_name = id_card_dict.get(consts.IC_KEY_FIELD[0], '').strip()
570 ic_id = id_card_dict.get(consts.IC_KEY_FIELD[1], '').strip()
467 if len(ic_name) > 0 and len(ic_id) > 0: 571 if len(ic_name) > 0 and len(ic_id) > 0:
468 dda_id_bc_mapping.setdefault(consts.IC_FIELD, []).append((ic_name, ic_id, img_path)) 572 dda_id_bc_mapping.setdefault(consts.IC_FIELD, []).append((ic_name, ic_id, img_path))
469 license_summary.setdefault(classify, []).append(id_card_dict) 573 license_summary.setdefault(classify, []).append(id_card_dict)
574 # 购车发票 & 二手车发票
470 elif classify == consts.MVI_CLASSIFY or classify == consts.UCI_CLASSIFY: 575 elif classify == consts.MVI_CLASSIFY or classify == consts.UCI_CLASSIFY:
471 rebuild_data_dict = {} 576 rebuild_data_dict = {}
577 position_dict = {}
472 mvi_res = license_data.pop('result', {}) 578 mvi_res = license_data.pop('result', {})
473 for en_key, detail_dict in mvi_res.items(): 579 for en_key, detail_dict in mvi_res.items():
474 rebuild_data_dict[detail_dict.get('chinese_key', '')] = detail_dict.get('words', '') 580 rebuild_data_dict[detail_dict.get('chinese_key', '')] = detail_dict.get('words', '')
581 position_dict[detail_dict.get('chinese_key', '')] = {
582 consts.FIELD_POSITION_KEY: detail_dict.get('position', {})
583 }
584 rebuild_data_dict[consts.IMG_PATH_KEY] = img_path
585 rebuild_data_dict[consts.SECTION_IMG_PATH_KEY] = section_img_path
586 rebuild_data_dict[consts.ALL_POSITION_KEY] = position_dict
475 license_summary.setdefault(classify, []).append(rebuild_data_dict) 587 license_summary.setdefault(classify, []).append(rebuild_data_dict)
476 # 其他 588 # 其他
477 else: 589 else:
478 for res_dict in license_data: 590 for res_dict in license_data:
479 res_dict[consts.IMG_PATH_KEY] = img_path 591 res_dict[consts.IMG_PATH_KEY] = img_path
592 res_dict[consts.SECTION_IMG_PATH_KEY] = section_img_path
480 license_summary.setdefault(classify, []).extend(license_data) 593 license_summary.setdefault(classify, []).extend(license_data)
481 res_list.append((pno, ino, part_idx, consts.RES_SUCCESS)) 594 res_list.append((pno, ino, part_idx, consts.RES_SUCCESS))
482 595
......
Styling with Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!