From cd19eb724e7cca7d1972436236472d4ba5308577 Mon Sep 17 00:00:00 2001
From: 周伟奇 <zhouweiqi@situdata.com>
Date: Tue, 22 Dec 2020 14:51:05 +0800
Subject: [PATCH] id card distinguish

---
 src/apps/doc/management/commands/folder_ocr_process.py | 53 ++++++++++++++++++++++++++++++++++++++++++++++++++---
 1 file changed, 50 insertions(+), 3 deletions(-)

diff --git a/src/apps/doc/management/commands/folder_ocr_process.py b/src/apps/doc/management/commands/folder_ocr_process.py
index ce7d1cf..37e7de9 100644
--- a/src/apps/doc/management/commands/folder_ocr_process.py
+++ b/src/apps/doc/management/commands/folder_ocr_process.py
@@ -14,7 +14,7 @@ from settings import conf
 from common.mixins import LoggerMixin
 from common.tools.pdf_to_img import PDFHandler
 from apps.doc import consts
-from apps.doc.exceptions import OCR1Exception
+from apps.doc.exceptions import OCR1Exception, OCR4Exception
 from apps.doc.ocr.wb import BSWorkbook
 
 
@@ -37,13 +37,59 @@ class Command(BaseCommand, LoggerMixin):
     def signal_handler(self, sig, frame):
         self.switch = False  # 停止处理文件
 
-    def license1_process(self, ocr_data, license_summary, classify, res_list, pno, ino, part_idx):
+    def license1_process(self, ocr_data, license_summary, classify, res_list, pno, ino, part_idx, img_path):
         # 类别:'0'身份证, '1'居住证
         license_data = ocr_data.get('data', [])
         if not license_data:
             res_list.append((pno, ino, part_idx, consts.RES_SUCCESS_EMPTY))
             return
         res_list.append((pno, ino, part_idx, consts.RES_SUCCESS))
+        if classify == consts.IC_CLASSIFY:
+            for id_card_dict in license_data:
+                try:
+                    base64_img = id_card_dict.pop('base64_img')
+                except Exception as e:
+                    continue
+                else:
+                    card_type = -1
+                    json_data_4 = {
+                        'mode': 1,
+                        'user_info': {
+                            'image_content': base64_img,
+                        },
+                        'options': {
+                            'distinguish_type': 1,
+                            'auto_rotate': True,
+                        },
+                    }
+                    for times in range(consts.RETRY_TIMES):
+                        try:
+                            start_time = time.time()
+                            ocr_4_response = requests.post(self.ocr_url_4, json=json_data_4)
+                            if ocr_4_response.status_code != 200:
+                                raise OCR4Exception('ocr_4 status code: {0}'.format(ocr_4_response.status_code))
+                        except Exception as e:
+                            self.cronjob_log.warn(
+                                '{0} [ocr_4 failed] [times={1}] [img_path={2}] [error={3}]'.format(
+                                    self.log_base, times, img_path, traceback.format_exc()))
+                        else:
+                            ocr_4_res = ocr_4_response.json()
+                            end_time = time.time()
+                            speed_time = int(end_time - start_time)
+
+                            if ocr_4_res.get('code') == 0 and ocr_4_res.get('result', {}).get('rtn') == 0:
+                                card_type = ocr_4_res.get('result', {}).get(
+                                    'idcard_distinguish_result', {}).get('result', -1)
+
+                            self.cronjob_log.info(
+                                '{0} [ocr_4 success] [img_path={1}] [speed_time={2}]'.format(
+                                    self.log_base, img_path, speed_time))
+                            break
+                    else:
+                        self.cronjob_log.warn(
+                            '{0} [ocr_4 failed] [img_path={1}]'.format(self.log_base, img_path))
+
+                    id_card_dict[consts.IC_TURE_OR_FALSE] = consts.IC_RES_MAPPING.get(card_type)
         license_summary.setdefault(classify, []).extend(license_data)
 
     @staticmethod
@@ -84,7 +130,8 @@ class Command(BaseCommand, LoggerMixin):
                             if isinstance(data_list, list):
                                 for part_idx, ocr_data in enumerate(data_list):
                                     part_idx = part_idx + 1
-                                    self.license1_process(ocr_data, license_summary, classify, res_list, pno, ino, part_idx)
+                                    self.license1_process(ocr_data, license_summary, classify,
+                                                          res_list, pno, ino, part_idx, img_path)
                             else:
                                 res_list.append((pno, ino, part_idx, consts.RES_FAILED_3))
                         else:
--
libgit2 0.24.0