add ic true/false
Showing
3 changed files
with
66 additions
and
4 deletions
... | @@ -624,7 +624,9 @@ OTHER_CLASSIFY = 2 | ... | @@ -624,7 +624,9 @@ OTHER_CLASSIFY = 2 |
624 | # 身份证 | 624 | # 身份证 |
625 | IC_CN_NAME = '身份证' | 625 | IC_CN_NAME = '身份证' |
626 | IC_CLASSIFY = 33 | 626 | IC_CLASSIFY = 33 |
627 | IC_FIELD_ORDER_0 = (('姓名', '姓名'), | 627 | IC_TURE_OR_FALSE = '真伪' |
628 | IC_FIELD_ORDER_0 = ((IC_TURE_OR_FALSE, '身份证'), | ||
629 | ('姓名', '姓名'), | ||
628 | ('公民身份号码', '公民身份号码'), | 630 | ('公民身份号码', '公民身份号码'), |
629 | ('出生年月', '出生年月'), | 631 | ('出生年月', '出生年月'), |
630 | ('住址', '住址'), | 632 | ('住址', '住址'), |
... | @@ -934,3 +936,10 @@ PATTERN_LIST = ['交易名称', '收入/支出金额', '收入', '存入', '支 | ... | @@ -934,3 +936,10 @@ PATTERN_LIST = ['交易名称', '收入/支出金额', '收入', '存入', '支 |
934 | '短摘要', '本次余额', '交易后余额', '交易说明', '帐户余额', '交易日期 记账日期'] | 936 | '短摘要', '本次余额', '交易后余额', '交易说明', '帐户余额', '交易日期 记账日期'] |
935 | 937 | ||
936 | CN_RE = re.compile(u'[\u4e00-\u9fa5]') | 938 | CN_RE = re.compile(u'[\u4e00-\u9fa5]') |
939 | |||
940 | IC_RES_MAPPING = { | ||
941 | -2: '不是有效证件', | ||
942 | -1: '无法判断', | ||
943 | 0: '伪造证件', | ||
944 | 1: '真实证件', | ||
945 | } | ... | ... |
... | @@ -23,7 +23,7 @@ from common.tools.pdf_to_img import PDFHandler | ... | @@ -23,7 +23,7 @@ from common.tools.pdf_to_img import PDFHandler |
23 | from apps.doc import consts | 23 | from apps.doc import consts |
24 | from apps.doc.ocr.edms import EDMS, rh | 24 | from apps.doc.ocr.edms import EDMS, rh |
25 | from apps.doc.named_enum import KeywordsType | 25 | from apps.doc.named_enum import KeywordsType |
26 | from apps.doc.exceptions import EDMSException, OCR1Exception, OCR2Exception | 26 | from apps.doc.exceptions import EDMSException, OCR1Exception, OCR2Exception, OCR4Exception |
27 | from apps.doc.ocr.wb import BSWorkbook, Workbook | 27 | from apps.doc.ocr.wb import BSWorkbook, Workbook |
28 | from apps.doc.models import DocStatus, HILDoc, AFCDoc, Keywords | 28 | from apps.doc.models import DocStatus, HILDoc, AFCDoc, Keywords |
29 | 29 | ||
... | @@ -48,6 +48,7 @@ class Command(BaseCommand, LoggerMixin): | ... | @@ -48,6 +48,7 @@ class Command(BaseCommand, LoggerMixin): |
48 | self.ocr_1_urls = conf.get_namespace('OCR_URL_1_') | 48 | self.ocr_1_urls = conf.get_namespace('OCR_URL_1_') |
49 | self.ocr_url_2 = conf.OCR_URL_2 | 49 | self.ocr_url_2 = conf.OCR_URL_2 |
50 | self.ocr_url_3 = conf.BC_URL | 50 | self.ocr_url_3 = conf.BC_URL |
51 | self.ocr_url_4 = conf.IC_URL | ||
51 | # EDMS web_service_api | 52 | # EDMS web_service_api |
52 | self.edms = EDMS() | 53 | self.edms = EDMS() |
53 | # 优雅退出信号:15 | 54 | # 优雅退出信号:15 |
... | @@ -189,13 +190,60 @@ class Command(BaseCommand, LoggerMixin): | ... | @@ -189,13 +190,60 @@ class Command(BaseCommand, LoggerMixin): |
189 | else: | 190 | else: |
190 | res_list.append((pno, ino, part_idx, consts.RES_SUCCESS_EMPTY)) | 191 | res_list.append((pno, ino, part_idx, consts.RES_SUCCESS_EMPTY)) |
191 | 192 | ||
192 | def license1_process(self, ocr_data, license_summary, classify, res_list, pno, ino, part_idx): | 193 | def license1_process(self, ocr_data, license_summary, classify, res_list, pno, ino, part_idx, img_path): |
193 | # 类别:'0'身份证, '1'居住证 | 194 | # 类别:'0'身份证, '1'居住证 |
194 | license_data = ocr_data.get('data', []) | 195 | license_data = ocr_data.get('data', []) |
195 | if not license_data: | 196 | if not license_data: |
196 | res_list.append((pno, ino, part_idx, consts.RES_SUCCESS_EMPTY)) | 197 | res_list.append((pno, ino, part_idx, consts.RES_SUCCESS_EMPTY)) |
197 | return | 198 | return |
198 | res_list.append((pno, ino, part_idx, consts.RES_SUCCESS)) | 199 | res_list.append((pno, ino, part_idx, consts.RES_SUCCESS)) |
200 | if classify == consts.IC_CLASSIFY: | ||
201 | for id_card_dict in license_data: | ||
202 | try: | ||
203 | base64_img = id_card_dict.pop('base64_img') | ||
204 | except Exception as e: | ||
205 | continue | ||
206 | else: | ||
207 | card_type = -1 | ||
208 | json_data_4 = { | ||
209 | 'mode': 1, | ||
210 | 'user_info': { | ||
211 | 'image_content': base64_img, | ||
212 | }, | ||
213 | 'options': { | ||
214 | 'distinguish_type': 1, | ||
215 | 'auto_rotate': True, | ||
216 | }, | ||
217 | } | ||
218 | for times in range(consts.RETRY_TIMES): | ||
219 | try: | ||
220 | start_time = time.time() | ||
221 | ocr_4_response = requests.post(self.ocr_url_4, json=json_data_4) | ||
222 | if ocr_4_response.status_code != 200: | ||
223 | raise OCR4Exception('ocr_4 status code: {0}'.format(ocr_4_response.status_code)) | ||
224 | except Exception as e: | ||
225 | self.cronjob_log.warn( | ||
226 | '{0} [ocr_4 failed] [times={1}] [img_path={2}] [error={3}]'.format( | ||
227 | self.log_base, times, img_path, traceback.format_exc())) | ||
228 | else: | ||
229 | ocr_4_res = json.loads(ocr_4_response.json()) | ||
230 | end_time = time.time() | ||
231 | speed_time = int(end_time - start_time) | ||
232 | |||
233 | if ocr_4_res.get('code') == 0 and ocr_4_res.get('result', {}).get('rtn') == 0: | ||
234 | card_type = ocr_4_res.get('result', {}).get( | ||
235 | 'idcard_distinguish_result', {}).get('result', -1) | ||
236 | |||
237 | self.cronjob_log.info( | ||
238 | '{0} [ocr_4 success] [img_path={1}] [speed_time={2}]'.format( | ||
239 | self.log_base, img_path, speed_time)) | ||
240 | |||
241 | break | ||
242 | else: | ||
243 | self.cronjob_log.warn( | ||
244 | '{0} [ocr_4 failed] [img_path={1}]'.format(self.log_base, img_path)) | ||
245 | |||
246 | id_card_dict[consts.IC_TURE_OR_FALSE] = consts.IC_RES_MAPPING.get(card_type) | ||
199 | license_summary.setdefault(classify, []).extend(license_data) | 247 | license_summary.setdefault(classify, []).extend(license_data) |
200 | 248 | ||
201 | def license2_process(self, ocr_res_2, license_summary, pid, classify, res_list, pno, ino, part_idx): | 249 | def license2_process(self, ocr_res_2, license_summary, pid, classify, res_list, pno, ino, part_idx): |
... | @@ -559,7 +607,8 @@ class Command(BaseCommand, LoggerMixin): | ... | @@ -559,7 +607,8 @@ class Command(BaseCommand, LoggerMixin): |
559 | res_list.append((pno, ino, part_idx, consts.RES_SUCCESS_OTHER)) | 607 | res_list.append((pno, ino, part_idx, consts.RES_SUCCESS_OTHER)) |
560 | continue | 608 | continue |
561 | elif classify in consts.LICENSE_CLASSIFY_SET_1: # 证件1 | 609 | elif classify in consts.LICENSE_CLASSIFY_SET_1: # 证件1 |
562 | self.license1_process(ocr_data, license_summary, classify, res_list, pno, ino, part_idx) | 610 | self.license1_process(ocr_data, license_summary, classify, res_list, |
611 | pno, ino, part_idx, img_path) | ||
563 | elif classify in consts.LICENSE_CLASSIFY_SET_2: # 证件2 | 612 | elif classify in consts.LICENSE_CLASSIFY_SET_2: # 证件2 |
564 | pid, _, _, _, _, _ = consts.LICENSE_CLASSIFY_MAPPING.get(classify) | 613 | pid, _, _, _, _, _ = consts.LICENSE_CLASSIFY_MAPPING.get(classify) |
565 | file_data = ocr_data.get('section_img') | 614 | file_data = ocr_data.get('section_img') | ... | ... |
-
Please register or sign in to post a comment