Skip to content
Toggle navigation
Toggle navigation
This project
Loading...
Sign in
周伟奇
/
bmw-ocr
Go to a project
Toggle navigation
Toggle navigation pinning
Projects
Groups
Snippets
Help
Project
Activity
Repository
Graphs
Network
Create a new issue
Commits
Issue Boards
Files
Commits
Network
Compare
Branches
Tags
f0fd60ab
authored
2021-06-07 17:15:24 +0800
by
周伟奇
Browse Files
Options
Browse Files
Tag
Download
Plain Diff
Merge branch 'feature/ca_compare' into feature/0611
2 parents
75d06bfe
02829c89
Show whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
81 additions
and
87 deletions
src/apps/doc/consts.py
src/celery_compare/tasks.py
src/common/tools/comparison.py
src/apps/doc/consts.py
View file @
f0fd60a
...
...
@@ -1136,34 +1136,35 @@ ITRES = [
]
ID_TYPE_COMPARE
=
{
'ITPRC'
:
[
IC_OCR_FIELD
,
ITPRC
],
'ITPSP'
:
[
PP_OCR_FIELD
,
ITPSP
],
'ITHKM'
:
[
EEP_OCR_FIELD
,
ITHKM_ITTID
],
'ITTID'
:
[
EEP_OCR_FIELD
,
ITHKM_ITTID
],
'ITRES'
:
[
RP_OCR_FIELD
,
ITRES
],
'ITPRC'
:
[
IC_OCR_FIELD
,
ITPRC
,
True
],
'ITPSP'
:
[
PP_OCR_FIELD
,
ITPSP
,
False
],
'ITHKM'
:
[
EEP_OCR_FIELD
,
ITHKM_ITTID
,
False
],
'ITTID'
:
[
EEP_OCR_FIELD
,
ITHKM_ITTID
,
False
],
'ITRES'
:
[
RP_OCR_FIELD
,
ITRES
,
True
],
}
ID_RES
=
'idNumResult'
SECOND_ID_TYPE_FIELD
=
'secondIdType'
SECOND_ID_FIELD
=
'secondIdNum'
SECOND_ID_RES
=
'secondIdNumResult'
SECOND_ITPRC
=
[
(
'secondIdNum'
,
'公民身份号码'
,
'common_compare'
,
{},
SECOND_ID_RES
),
(
SECOND_ID_FIELD
,
'公民身份号码'
,
'common_compare'
,
{},
SECOND_ID_RES
),
]
# 护照
SECOND_ITPSP
=
[
(
'secondIdNum'
,
'护照号码'
,
'common_compare'
,
{},
SECOND_ID_RES
),
(
SECOND_ID_FIELD
,
'护照号码'
,
'common_compare'
,
{},
SECOND_ID_RES
),
]
# 港澳台通行证
SECOND_ITHKM_ITTID
=
[
(
'secondIdNum'
,
'证件号码'
,
'common_compare'
,
{},
SECOND_ID_RES
),
(
SECOND_ID_FIELD
,
'证件号码'
,
'common_compare'
,
{},
SECOND_ID_RES
),
]
# 居住证
SECOND_ITRES
=
[
(
'secondIdNum'
,
'公民身份号码'
,
'common_compare'
,
{},
SECOND_ID_RES
),
(
SECOND_ID_FIELD
,
'公民身份号码'
,
'common_compare'
,
{},
SECOND_ID_RES
),
]
SECOND_ID_TYPE_COMPARE
=
{
...
...
@@ -1219,14 +1220,15 @@ RESULT_Y = 'Y'
RESULT_N
=
'N'
RESULT_NA
=
'NA'
IN_ORDER
=
(
'applicantType'
,
'idType'
,
'secondIdType'
,
'customerType'
,
'customerChineseName'
,
'idNum'
,
'secondI
dNum'
,
"idExpiryDate"
,
"dateOfBirth"
,
'companyName'
,
"registeredCapital"
,
'selfEmployedSubType'
,)
IN_ORDER
=
(
'applicantType'
,
'idType'
,
SECOND_ID_TYPE_FIELD
,
'customerType'
,
'customerChineseName'
,
'i
dNum'
,
SECOND_ID_FIELD
,
"idExpiryDate"
,
"dateOfBirth"
,
'companyName'
,
"registeredCapital"
,
'selfEmployedSubType'
,)
UC_ORDER
=
(
'vinNo'
,
'manufactureDate'
,
'firstRegistrationDate'
)
CO_ORDER
=
(
'customerType'
,
'customerChineseName'
,
'legalRepName'
,
'idNum'
,
'businessLicenseNo'
,
'taxRegistrationCode'
,
'incorporationDate'
,
'businessLicenseDueDate'
,
'capitalRegAmount'
)
PREFIX_MVC
=
'GB'
PREFIX_DL
=
'DL'
PREFIX_MVC
=
'G'
PREFIX_DL
=
'V'
SPLIT
=
';'
# --------------- DDA 保存图片 --------------------
DDA_FIELD
=
'DDA'
...
...
src/celery_compare/tasks.py
View file @
f0fd60a
...
...
@@ -17,11 +17,15 @@ log_base = '[CA Compare]'
def
get_order_dict
(
src_dict
,
order_tuple
):
if
consts
.
SECOND_ID_TYPE_FIELD
in
src_dict
:
if
src_dict
.
get
(
consts
.
SECOND_ID_TYPE_FIELD
)
not
in
consts
.
SECOND_ID_TYPE_COMPARE
:
src_dict
.
pop
(
consts
.
SECOND_ID_TYPE_FIELD
,
None
)
src_dict
.
pop
(
consts
.
SECOND_ID_FIELD
,
None
)
order_dict
=
OrderedDict
({})
for
field
in
order_tuple
:
value
=
src_dict
.
get
(
field
)
if
value
is
not
None
:
order_dict
[
field
]
=
value
if
field
in
src_dict
:
order_dict
[
field
]
=
src_dict
[
field
]
return
order_dict
...
...
@@ -30,33 +34,33 @@ def field_compare(info_dict, ocr_res_dict, ocr_field, compare_list, res_set, has
ocr_res_str
=
ocr_res_dict
.
get
(
ocr_field
)
if
ocr_res_str
is
not
None
:
ocr_res_list
=
json
.
loads
(
ocr_res_str
)
length
=
len
(
ocr_res_list
)
#
length = len(ocr_res_list)
#
#
sep营业执照根据法人过滤
#
if isinstance(sep_name, str):
#
tmp_list = []
#
for ocr_res in ocr_res_list:
#
ocr_sep_name = ocr_res.get(consts.LEGAL_REP_NAME)
#
if isinstance(ocr_sep_name, str) and ocr_sep_name == sep_name:
#
tmp_list.append(ocr_res)
#
else:
#
tmp_list = ocr_res_list
#
#
length = len(tmp_list)
# sep营业执照根据法人过滤
if
isinstance
(
sep_name
,
str
):
tmp_list
=
[]
for
ocr_res
in
ocr_res_list
:
ocr_sep_name
=
ocr_res
.
get
(
consts
.
LEGAL_REP_NAME
)
if
isinstance
(
ocr_sep_name
,
str
)
and
ocr_sep_name
==
sep_name
:
tmp_list
.
append
(
ocr_res
)
else
:
tmp_list
=
ocr_res_list
length
=
len
(
tmp_list
)
# 过期期限特殊处理
if
has_expiry_date
:
expiry_dates
=
[]
key
=
compare_list
[
2
][
1
]
#
for ocr_res in tmp_list:
for
ocr_res
in
ocr_res_list
:
for
ocr_res
in
tmp_list
:
#
for ocr_res in ocr_res_list:
if
ocr_res
.
get
(
key
):
expiry_dates
.
append
(
ocr_res
.
get
(
key
))
else
:
expiry_dates
=
[]
#
for ocr_res in tmp_list:
for
ocr_res
in
ocr_res_list
:
for
ocr_res
in
tmp_list
:
#
for ocr_res in ocr_res_list:
if
is_find
:
break
for
idx
,
compare_tuple
in
enumerate
(
compare_list
):
...
...
@@ -204,29 +208,29 @@ def compare(application_id, application_entity, uniq_seq, ocr_res_id):
for
individual_cus_info
in
individual_cus_info_list
:
order_individual_cus_info
=
get_order_dict
(
individual_cus_info
,
consts
.
IN_ORDER
)
#
#
获取sep下营业执照法人代表
#
if order_individual_cus_info.get('customerType') == consts.CUSTOMER_TYPE[5]:
#
sep_name = order_individual_cus_info.get('customerChineseName')
#
if isinstance(sep_name, str):
#
sep_name = sep_name.strip()
#
if sep_name == '':
#
sep_name = None
#
else:
#
sep_name = None
# 获取sep下营业执照法人代表
if
order_individual_cus_info
.
get
(
'customerType'
)
==
consts
.
CUSTOMER_TYPE
[
5
]:
sep_name
=
order_individual_cus_info
.
get
(
'customerChineseName'
)
if
isinstance
(
sep_name
,
str
):
sep_name
=
sep_name
.
strip
()
if
sep_name
==
''
:
sep_name
=
None
else
:
sep_name
=
None
# 个人信息证件
id_type
=
order_individual_cus_info
.
get
(
'idType'
)
compare_info_list
=
consts
.
ID_TYPE_COMPARE
.
get
(
id_type
)
if
compare_info_list
is
not
None
:
field_compare
(
order_individual_cus_info
,
ocr_res_dict
,
compare_info_list
[
0
],
compare_info_list
[
1
],
res_set
,
has_expiry_date
=
True
)
if
id_type
not
in
consts
.
ID_TYPE_COMPARE
:
continue
ocr_field
,
compare_list
,
has_expiry_date
=
consts
.
ID_TYPE_COMPARE
.
get
(
id_type
)
field_compare
(
order_individual_cus_info
,
ocr_res_dict
,
ocr_field
,
compare_list
,
res_set
,
has_expiry_date
=
has_expiry_date
)
# 第二证件
second_id_type
=
order_individual_cus_info
.
get
(
'secondIdType'
)
second_compare_info_list
=
consts
.
SECOND_ID_TYPE_COMPARE
.
get
(
second_id_type
)
if
second_compare_info_list
is
not
None
:
field_compare
(
order_individual_cus_info
,
ocr_res_dict
,
second_compare_info_list
[
0
],
second_compare_info_list
[
1
],
res_set
)
if
second_id_type
is
not
None
:
second_ocr_field
,
second_compare_list
=
consts
.
SECOND_ID_TYPE_COMPARE
.
get
(
second_id_type
)
field_compare
(
order_individual_cus_info
,
ocr_res_dict
,
second_ocr_field
,
second_compare_list
,
res_set
)
# 重新排列
new_dict
=
OrderedDict
({})
second_id_res
=
order_individual_cus_info
.
pop
(
consts
.
SECOND_ID_RES
,
consts
.
RESULT_NA
)
...
...
@@ -238,9 +242,9 @@ def compare(application_id, application_entity, uniq_seq, ocr_res_id):
# sep营业执照
if
order_individual_cus_info
.
get
(
'customerType'
)
==
consts
.
CUSTOMER_TYPE
[
5
]:
#
field_compare(order_individual_cus_info, ocr_res_dict, consts.BL_OCR_FIELD, consts.TCSEP, res_set,
#
sep_name=sep_name)
field_compare
(
order_individual_cus_info
,
ocr_res_dict
,
consts
.
BL_OCR_FIELD
,
consts
.
TCSEP
,
res_set
)
field_compare
(
order_individual_cus_info
,
ocr_res_dict
,
consts
.
BL_OCR_FIELD
,
consts
.
TCSEP
,
res_set
,
sep_name
=
sep_name
)
#
field_compare(order_individual_cus_info, ocr_res_dict, consts.BL_OCR_FIELD, consts.TCSEP, res_set)
order_individual_cus_info_list
.
append
(
order_individual_cus_info
)
...
...
@@ -257,39 +261,27 @@ def compare(application_id, application_entity, uniq_seq, ocr_res_id):
dl_find
,
dl_vinos
=
usedcar_info_compare
(
order_usedcar_info
,
ocr_res_dict
,
consts
.
DL_OCR_FIELD
,
consts
.
PCUSD_DL
,
res_set
)
# if mvc_find is True and dl_find is False:
# vino = dl_vinos[-1] if len(dl_vinos) > 0 else ''
# order_usedcar_info[consts.PCUSD_MVC[0][0]] = '{0}: {1}'.format(consts.PREFIX_MVC, vino)
# order_usedcar_info[consts.PCUSD_MVC[0][4]] = consts.RESULT_N
# elif mvc_find is False and dl_find is True:
# vino = mvc_vinos[-1] if len(mvc_vinos) > 0 else ''
# order_usedcar_info[consts.PCUSD_MVC[0][0]] = '{0}: {1}'.format(consts.PREFIX_DL, vino)
# order_usedcar_info[consts.PCUSD_MVC[0][4]] = consts.RESULT_N
# elif mvc_find is False and dl_find is False:
# vino_list = []
# mvc_vino = mvc_vinos[-1] if len(mvc_vinos) > 0 else ''
# dl_vino = dl_vinos[-1] if len(dl_vinos) > 0 else ''
# vino_list.append('{0}: {1}'.format(consts.PREFIX_MVC, mvc_vino))
# vino_list.append(dl_vinos[-1])
# vino = '、'.join('{0}: {1}'.format(consts.PREFIX_DL, dl_vino))
# order_usedcar_info[consts.PCUSD_MVC[0][0]] = vino
if
mvc_find
is
True
and
dl_find
is
False
:
vino
=
dl_vinos
[
0
]
if
len
(
dl_vinos
)
>
0
else
''
order_usedcar_info
[
consts
.
PCUSD_MVC
[
0
][
0
]]
=
vino
vino
=
dl_vinos
[
-
1
]
if
len
(
dl_vinos
)
>
0
else
''
order_usedcar_info
[
consts
.
PCUSD_MVC
[
0
][
0
]]
=
'{0}-{1} {2} {3}-{4}'
.
format
(
consts
.
PREFIX_MVC
,
consts
.
RESULT_Y
,
consts
.
SPLIT
,
consts
.
PREFIX_DL
,
vino
)
order_usedcar_info
[
consts
.
PCUSD_MVC
[
0
][
4
]]
=
consts
.
RESULT_N
elif
mvc_find
is
False
and
dl_find
is
True
:
vino
=
mvc_vinos
[
0
]
if
len
(
mvc_vinos
)
>
0
else
''
order_usedcar_info
[
consts
.
PCUSD_MVC
[
0
][
0
]]
=
vino
vino
=
mvc_vinos
[
-
1
]
if
len
(
mvc_vinos
)
>
0
else
''
order_usedcar_info
[
consts
.
PCUSD_MVC
[
0
][
0
]]
=
'{0}-{1} {2} {3}-{4}'
.
format
(
consts
.
PREFIX_MVC
,
vino
,
consts
.
SPLIT
,
consts
.
PREFIX_DL
,
consts
.
RESULT_Y
)
order_usedcar_info
[
consts
.
PCUSD_MVC
[
0
][
4
]]
=
consts
.
RESULT_N
elif
mvc_find
is
False
and
dl_find
is
False
:
vino_list
=
[]
if
len
(
mvc_vinos
)
>
0
:
vino_list
.
append
(
mvc_vinos
[
0
])
if
len
(
dl_vinos
)
>
0
:
vino_list
.
append
(
dl_vinos
[
0
])
vino
=
'、'
.
join
(
vino_list
)
if
len
(
mvc_vinos
)
==
0
and
len
(
dl_vinos
)
==
0
:
order_usedcar_info
[
consts
.
PCUSD_MVC
[
0
][
0
]]
=
None
order_usedcar_info
[
consts
.
PCUSD_MVC
[
0
][
4
]]
=
consts
.
RESULT_NA
else
:
mvc_vino
=
mvc_vinos
[
-
1
]
if
len
(
mvc_vinos
)
>
0
else
''
dl_vino
=
dl_vinos
[
-
1
]
if
len
(
dl_vinos
)
>
0
else
''
vino
=
'{0}-{1} {2} {3}-{4}'
.
format
(
consts
.
PREFIX_MVC
,
mvc_vino
,
consts
.
SPLIT
,
consts
.
PREFIX_DL
,
dl_vino
)
order_usedcar_info
[
consts
.
PCUSD_MVC
[
0
][
0
]]
=
vino
order_usedcar_info
[
consts
.
PCUSD_MVC
[
0
][
4
]]
=
consts
.
RESULT_N
comparison_res
[
'OCR_Input'
][
'usedCarInfo'
]
=
order_usedcar_info
...
...
src/common/tools/comparison.py
View file @
f0fd60a
import
re
from
datetime
import
datetime
#
from .rmb_lower import rmb_handler
from
.rmb_upper
import
to_rmb_upper
from
.rmb_lower
import
rmb_handler
#
from .rmb_upper import to_rmb_upper
class
Comparison
:
...
...
@@ -109,18 +109,18 @@ class Comparison:
if
ocr_str
==
''
or
ocr_str
.
strip
()
==
''
:
return
self
.
RESULT_NA
,
None
try
:
#
ocr_lower = rmb_handler.to_rmb_lower()
#
res = self.build_res(float(input_str) == ocr_lower)
input_rmb_upper
=
to_rmb_upper
(
float
(
input_str
))
res
=
self
.
build_res
(
input_rmb_upper
==
ocr_str
)
ocr_lower
=
rmb_handler
.
to_rmb_lower
()
res
=
self
.
build_res
(
float
(
input_str
)
==
ocr_lower
)
#
input_rmb_upper = to_rmb_upper(float(input_str))
#
res = self.build_res(input_rmb_upper == ocr_str)
except
Exception
as
e
:
return
self
.
RESULT_N
,
None
else
:
if
res
==
self
.
RESULT_Y
:
return
res
,
input_str
else
:
#
return res, ocr_lower
return
res
,
None
return
res
,
ocr_lower
#
return res, None
def
type_compare
(
self
,
input_str
,
ocr_str
,
idx
,
**
kwargs
):
if
not
isinstance
(
ocr_str
,
str
)
or
not
isinstance
(
input_str
,
str
):
...
...
Write
Preview
Styling with
Markdown
is supported
Attach a file
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to post a comment