parent
da52d06fa8
commit
6a286e7c69
|
|
@ -22,7 +22,7 @@ from dateutil.parser import parse
|
|||
from jinja2 import Environment, FileSystemLoader
|
||||
from zen import ZenDecision, ZenEngine
|
||||
|
||||
from utils.client import Authenticator, HTTPClient, CacheClient
|
||||
from utils.client import Authenticator, HTTPClient
|
||||
|
||||
|
||||
# from utils.ocr import fuzzy_match
|
||||
|
|
@ -905,15 +905,6 @@ def common_extraction(**kwargs) -> dict | None:
|
|||
return extraction
|
||||
|
||||
|
||||
# 初始化规则引擎
|
||||
def decision(rules_path: Path) -> ZenDecision:
|
||||
def loader(path):
|
||||
with open(path, "r", encoding="utf-8") as file:
|
||||
return file.read()
|
||||
|
||||
return ZenEngine({"loader": loader}).get_decision(rules_path.as_posix())
|
||||
|
||||
|
||||
def disease_diagnosis(**kwargs) -> str | None:
|
||||
"""疾病推定"""
|
||||
|
||||
|
|
@ -980,14 +971,26 @@ if __name__ == "__main__":
|
|||
# 实例请求客户端
|
||||
http_client = HTTPClient(timeout=300, cache_enabled=True) # 使用缓存
|
||||
|
||||
# 初始化影像件识别规则引擎
|
||||
recognize_decision = decision(Path("rules/影像件是否需要数据提取.json"))
|
||||
|
||||
# 初始化工作目录地址对象
|
||||
directory_path = Path("directory")
|
||||
# 若不存在则创建
|
||||
directory_path.mkdir(parents=True, exist_ok=True)
|
||||
|
||||
def rule_engine(rule_path: Path) -> ZenDecision:
|
||||
"""
|
||||
本地打开并读取规则文件并实例化规则引擎
|
||||
:param rule_path: 规则文件路径对象
|
||||
"""
|
||||
|
||||
def loader(path):
|
||||
with open(path, "r", encoding="utf-8") as file:
|
||||
return file.read()
|
||||
|
||||
return ZenEngine({"loader": loader}).get_decision(rule_path.as_posix())
|
||||
|
||||
# 影像件识别使能
|
||||
recognition_enable = rule_engine(Path("rules/影像件识别使能.json"))
|
||||
|
||||
# 初始化JINJA2环境
|
||||
environment = Environment(loader=FileSystemLoader("."))
|
||||
# 添加DATE过滤器
|
||||
|
|
@ -1041,7 +1044,7 @@ if __name__ == "__main__":
|
|||
return image_guid
|
||||
|
||||
# noinspection PyShadowingNames
|
||||
def images_classify(
|
||||
def image_classify(
|
||||
image_guid: str, image_format: str, image_ndarray: numpy.ndarray
|
||||
) -> Optional[Tuple[str, str, str]]:
|
||||
"""
|
||||
|
|
@ -1053,7 +1056,7 @@ if __name__ == "__main__":
|
|||
"""
|
||||
|
||||
# noinspection PyShadowingNames
|
||||
def images_compress(
|
||||
def image_compress(
|
||||
image_format, image_ndarray, image_size_specified=2
|
||||
) -> Optional[str]:
|
||||
"""
|
||||
|
|
@ -1109,7 +1112,7 @@ if __name__ == "__main__":
|
|||
return None
|
||||
|
||||
# 影像件压缩
|
||||
image_base64 = images_compress(
|
||||
image_base64 = image_compress(
|
||||
image_format, image_ndarray, image_size_specified=2
|
||||
) # 深圳快瞳要求为2兆字节
|
||||
# TODO: 若影像件压缩发生异常则流转至人工处理
|
||||
|
|
@ -1136,7 +1139,6 @@ if __name__ == "__main__":
|
|||
raise RuntimeError("请求深圳快瞳影像件分类接口发生异常")
|
||||
|
||||
# 解析影像件类型
|
||||
# TODO: 后续完成居民户口簿、中国港澳台地区及境外护照和医疗费用清单
|
||||
# noinspection PyTypeChecker
|
||||
match (response["data"]["flag"], response["data"]["type"]):
|
||||
case (14, _):
|
||||
|
|
@ -1183,13 +1185,15 @@ if __name__ == "__main__":
|
|||
}[image_orientation],
|
||||
)
|
||||
# 旋正后影像件再次压缩
|
||||
image_base64 = images_compress(
|
||||
image_base64 = image_compress(
|
||||
image_format, image_ndarray, image_size_specified=2
|
||||
)
|
||||
# TODO: 若旋正后影像件再次压缩发生异常则流转至人工处理
|
||||
if image_base64 is None:
|
||||
raise RuntimeError("旋正后影像件再次压缩发生异常")
|
||||
|
||||
global image
|
||||
|
||||
return image_base64, image_type, image_orientation
|
||||
|
||||
# 遍历工作目录中赔案目录并创建赔案档案(模拟自动化域就待自动化任务创建理赔档案)
|
||||
|
|
@ -1198,7 +1202,9 @@ if __name__ == "__main__":
|
|||
# 报案渠道包括:保司定义,例如中银项目包括总行和各地分行驻场报案和普康宝自助报案等
|
||||
dossier = {
|
||||
"报案层": {
|
||||
"保险分公司": "中银保险有限公司广东分公司", # 设定:保险分公司为中银保险有限公司广东分公司
|
||||
"保险分公司": (
|
||||
insurance_branch := "中银保险有限公司广东分公司"
|
||||
), # 设定:保险分公司为中银保险有限公司广东分公司
|
||||
"赔案号": (case_number := case_path.stem), # 设定:赔案目录名称为赔案号
|
||||
},
|
||||
"影像件层": [],
|
||||
|
|
@ -1234,8 +1240,8 @@ if __name__ == "__main__":
|
|||
image_guid := image_serialize(image_format, image_ndarray)
|
||||
)
|
||||
|
||||
# 影像件分类并旋正(较初审自动化,无使能检查)
|
||||
image_base64, image_type, image_orientation = images_classify(
|
||||
# 影像件分类并旋正(较初审自动化无使能检查)
|
||||
image_base64, image_type, image_orientation = image_classify(
|
||||
image_guid, image_format, image_ndarray
|
||||
)
|
||||
image["影像件类型"] = image_type
|
||||
|
|
@ -1243,22 +1249,22 @@ if __name__ == "__main__":
|
|||
# 将影像件数据添加至影像件层
|
||||
dossier["影像件层"].append(image)
|
||||
|
||||
# 影像件识别
|
||||
print(dossier)
|
||||
exit()
|
||||
|
||||
# 影像件识别使能检查,若影像件不识别则跳过
|
||||
if not recognition_enable.evaluate(
|
||||
{
|
||||
"insurance_branch": insurance_branch,
|
||||
"image_type": image_type,
|
||||
}
|
||||
)["result"]["recognition_enable"]:
|
||||
continue
|
||||
|
||||
print(dossier)
|
||||
exit()
|
||||
"""
|
||||
|
||||
|
||||
# 根据保险总公司和影像件类型评估影像件是否需要数据提取,若无需数据提取则跳过该影像件(例如,中银保险有限公司理赔申请书包含户名、开户银行和银行账号,无需识别银行卡)
|
||||
if not recognize_decision.evaluate(
|
||||
{
|
||||
"insurer": (insurer := dossier["赔案层"]["保险总公司"]),
|
||||
"image_type": image_type,
|
||||
}
|
||||
)["result"]["extract"]:
|
||||
dossier["影像件层"][-1]["已识别"] = "否,无需识别"
|
||||
continue
|
||||
|
||||
|
||||
# 根据影像件类型匹配影像件数据提取
|
||||
# noinspection PyUnreachableCode
|
||||
|
|
|
|||
|
|
@ -9,8 +9,8 @@
|
|||
"id": "a56fc802-839b-4310-999e-054fcfdac452",
|
||||
"name": "request",
|
||||
"position": {
|
||||
"x": 125,
|
||||
"y": 265
|
||||
"x": 110,
|
||||
"y": 114
|
||||
}
|
||||
},
|
||||
{
|
||||
|
|
@ -21,8 +21,8 @@
|
|||
"id": "47992630-e8f6-4475-8307-437dc2b93acd",
|
||||
"name": "response",
|
||||
"position": {
|
||||
"x": 845,
|
||||
"y": 235
|
||||
"x": 750,
|
||||
"y": 114
|
||||
}
|
||||
},
|
||||
{
|
||||
|
|
@ -30,93 +30,93 @@
|
|||
"content": {
|
||||
"hitPolicy": "first",
|
||||
"rules": [
|
||||
{
|
||||
"_id": "8e5bf894-22b5-429c-ab9d-1ed541cc562b",
|
||||
"_description": "",
|
||||
"88d06a40-06ea-472b-9f8f-f4daf6468c52": "\"居民户口簿\"",
|
||||
"a2fc744f-930d-43e0-b5cf-824a5928c7f1": "true",
|
||||
"edfeddf0-41bd-4cb7-8cb2-a3c4afa7fc3b": "\"中银保险有限公司广东分公司\""
|
||||
},
|
||||
{
|
||||
"_id": "14b4347e-2d98-4e7f-80c6-2c1f70db7f38",
|
||||
"_description": "",
|
||||
"88d06a40-06ea-472b-9f8f-f4daf6468c52": "\"居民身份证(正背面)\"",
|
||||
"88d06a40-06ea-472b-9f8f-f4daf6468c52": "\"居民身份证(国徽、头像面)\"",
|
||||
"a2fc744f-930d-43e0-b5cf-824a5928c7f1": "true",
|
||||
"edfeddf0-41bd-4cb7-8cb2-a3c4afa7fc3b": "\"中银保险有限公司\""
|
||||
"edfeddf0-41bd-4cb7-8cb2-a3c4afa7fc3b": "\"中银保险有限公司广东分公司\""
|
||||
},
|
||||
{
|
||||
"_id": "f01654f5-fa1a-480b-bfbe-a6dc13120aa9",
|
||||
"_description": "",
|
||||
"88d06a40-06ea-472b-9f8f-f4daf6468c52": "\"居民身份证(正面)\"",
|
||||
"a2fc744f-930d-43e0-b5cf-824a5928c7f1": "false",
|
||||
"edfeddf0-41bd-4cb7-8cb2-a3c4afa7fc3b": "\"中银保险有限公司\""
|
||||
"88d06a40-06ea-472b-9f8f-f4daf6468c52": "\"居民身份证(国徽面)\"",
|
||||
"a2fc744f-930d-43e0-b5cf-824a5928c7f1": "true",
|
||||
"edfeddf0-41bd-4cb7-8cb2-a3c4afa7fc3b": "\"中银保险有限公司广东分公司\""
|
||||
},
|
||||
{
|
||||
"_id": "25cf23fb-c150-4f2a-b896-8ca25f6107e0",
|
||||
"_description": "",
|
||||
"88d06a40-06ea-472b-9f8f-f4daf6468c52": "\"居民身份证(背面)\"",
|
||||
"a2fc744f-930d-43e0-b5cf-824a5928c7f1": "false",
|
||||
"edfeddf0-41bd-4cb7-8cb2-a3c4afa7fc3b": "\"中银保险有限公司\""
|
||||
"88d06a40-06ea-472b-9f8f-f4daf6468c52": "\"居民身份证(头像面)\"",
|
||||
"a2fc744f-930d-43e0-b5cf-824a5928c7f1": "true",
|
||||
"edfeddf0-41bd-4cb7-8cb2-a3c4afa7fc3b": "\"中银保险有限公司广东分公司\""
|
||||
},
|
||||
{
|
||||
"_id": "87984822-cd34-4819-b83f-78741b5b0b6a",
|
||||
"_description": "",
|
||||
"88d06a40-06ea-472b-9f8f-f4daf6468c52": "\"中国港澳台地区及境外护照\"",
|
||||
"a2fc744f-930d-43e0-b5cf-824a5928c7f1": "true",
|
||||
"edfeddf0-41bd-4cb7-8cb2-a3c4afa7fc3b": "\"中银保险有限公司广东分公司\""
|
||||
},
|
||||
{
|
||||
"_id": "8f414db5-1f47-4814-9c81-7e036f0da92a",
|
||||
"_description": "",
|
||||
"_description": "中银保险有限公司广东分公司就银行卡不识别",
|
||||
"88d06a40-06ea-472b-9f8f-f4daf6468c52": "\"银行卡\"",
|
||||
"a2fc744f-930d-43e0-b5cf-824a5928c7f1": "false",
|
||||
"edfeddf0-41bd-4cb7-8cb2-a3c4afa7fc3b": "\"中银保险有限公司\""
|
||||
},
|
||||
{
|
||||
"_id": "c373959c-1b1b-4149-8062-22fb3f0b4eb0",
|
||||
"_description": "",
|
||||
"88d06a40-06ea-472b-9f8f-f4daf6468c52": "\"增值税发票(电子)\"",
|
||||
"a2fc744f-930d-43e0-b5cf-824a5928c7f1": "true",
|
||||
"edfeddf0-41bd-4cb7-8cb2-a3c4afa7fc3b": "\"中银保险有限公司\""
|
||||
"edfeddf0-41bd-4cb7-8cb2-a3c4afa7fc3b": "\"中银保险有限公司广东分公司\""
|
||||
},
|
||||
{
|
||||
"_id": "f64b5e4c-74e3-41ae-96d3-eec72fa512dd",
|
||||
"_description": "",
|
||||
"88d06a40-06ea-472b-9f8f-f4daf6468c52": "\"增值税发票\"",
|
||||
"a2fc744f-930d-43e0-b5cf-824a5928c7f1": "true",
|
||||
"edfeddf0-41bd-4cb7-8cb2-a3c4afa7fc3b": "\"中银保险有限公司\""
|
||||
"edfeddf0-41bd-4cb7-8cb2-a3c4afa7fc3b": "\"中银保险有限公司广东分公司\""
|
||||
},
|
||||
{
|
||||
"_id": "ffdfd273-2c0a-4d49-86f0-a4f20572d522",
|
||||
"_description": "",
|
||||
"88d06a40-06ea-472b-9f8f-f4daf6468c52": "\"医疗费用清单\"",
|
||||
"a2fc744f-930d-43e0-b5cf-824a5928c7f1": "true",
|
||||
"edfeddf0-41bd-4cb7-8cb2-a3c4afa7fc3b": "\"中银保险有限公司广东分公司\""
|
||||
},
|
||||
{
|
||||
"_id": "6120b722-abd9-4f17-a97b-45eaa854961f",
|
||||
"_description": "",
|
||||
"88d06a40-06ea-472b-9f8f-f4daf6468c52": "\"门诊收费票据(电子)\"",
|
||||
"88d06a40-06ea-472b-9f8f-f4daf6468c52": "\"门诊收费票据\"",
|
||||
"a2fc744f-930d-43e0-b5cf-824a5928c7f1": "true",
|
||||
"edfeddf0-41bd-4cb7-8cb2-a3c4afa7fc3b": "\"中银保险有限公司\""
|
||||
"edfeddf0-41bd-4cb7-8cb2-a3c4afa7fc3b": "\"中银保险有限公司广东分公司\""
|
||||
},
|
||||
{
|
||||
"_id": "3048396c-b175-44ee-9bcf-8e83aea55280",
|
||||
"_description": "",
|
||||
"88d06a40-06ea-472b-9f8f-f4daf6468c52": "\"门诊收费票据\"",
|
||||
"a2fc744f-930d-43e0-b5cf-824a5928c7f1": "true",
|
||||
"edfeddf0-41bd-4cb7-8cb2-a3c4afa7fc3b": "\"中银保险有限公司\""
|
||||
},
|
||||
{
|
||||
"_id": "11df6fc8-22c4-49fc-a54d-0c529daaba17",
|
||||
"_description": "",
|
||||
"88d06a40-06ea-472b-9f8f-f4daf6468c52": "\"住院收费票据(电子)\"",
|
||||
"a2fc744f-930d-43e0-b5cf-824a5928c7f1": "true",
|
||||
"edfeddf0-41bd-4cb7-8cb2-a3c4afa7fc3b": "\"中银保险有限公司\""
|
||||
},
|
||||
{
|
||||
"_id": "d5983617-093f-460f-a3e2-33054c644dab",
|
||||
"_description": "",
|
||||
"88d06a40-06ea-472b-9f8f-f4daf6468c52": "\"住院收费票据\"",
|
||||
"a2fc744f-930d-43e0-b5cf-824a5928c7f1": "true",
|
||||
"edfeddf0-41bd-4cb7-8cb2-a3c4afa7fc3b": "\"中银保险有限公司\""
|
||||
"edfeddf0-41bd-4cb7-8cb2-a3c4afa7fc3b": "\"中银保险有限公司广东分公司\""
|
||||
},
|
||||
{
|
||||
"_id": "9ff5abf3-516e-4b13-a353-b47b4ee29107",
|
||||
"_description": "",
|
||||
"88d06a40-06ea-472b-9f8f-f4daf6468c52": "\"理赔申请书\"",
|
||||
"a2fc744f-930d-43e0-b5cf-824a5928c7f1": "true",
|
||||
"edfeddf0-41bd-4cb7-8cb2-a3c4afa7fc3b": "\"中银保险有限公司\""
|
||||
"edfeddf0-41bd-4cb7-8cb2-a3c4afa7fc3b": "\"中银保险有限公司广东分公司\""
|
||||
},
|
||||
{
|
||||
"_id": "f0d20445-48f1-4980-8d3d-0173fc906293",
|
||||
"_description": "中银保险有限公司其它影像件类型不需要数据抽取",
|
||||
"88d06a40-06ea-472b-9f8f-f4daf6468c52": "",
|
||||
"_description": "中银保险有限公司就其它影像件类型不识别",
|
||||
"88d06a40-06ea-472b-9f8f-f4daf6468c52": "\"其它\"",
|
||||
"a2fc744f-930d-43e0-b5cf-824a5928c7f1": "false",
|
||||
"edfeddf0-41bd-4cb7-8cb2-a3c4afa7fc3b": "\"中银保险有限公司\""
|
||||
"edfeddf0-41bd-4cb7-8cb2-a3c4afa7fc3b": "\"中银保险有限公司广东分公司\""
|
||||
},
|
||||
{
|
||||
"_id": "9ed5dfc9-85c9-4617-9e54-dfdb8c0c2049",
|
||||
"_description": "其它保险总公司、影像件类型不需要数据抽取",
|
||||
"_description": "其它保险分公司所有影像件类型不识别",
|
||||
"88d06a40-06ea-472b-9f8f-f4daf6468c52": "",
|
||||
"a2fc744f-930d-43e0-b5cf-824a5928c7f1": "false",
|
||||
"edfeddf0-41bd-4cb7-8cb2-a3c4afa7fc3b": ""
|
||||
|
|
@ -126,7 +126,7 @@
|
|||
{
|
||||
"id": "edfeddf0-41bd-4cb7-8cb2-a3c4afa7fc3b",
|
||||
"name": "保险总公司",
|
||||
"field": "insurer"
|
||||
"field": "insurance_branch"
|
||||
},
|
||||
{
|
||||
"id": "88d06a40-06ea-472b-9f8f-f4daf6468c52",
|
||||
|
|
@ -138,7 +138,7 @@
|
|||
{
|
||||
"id": "a2fc744f-930d-43e0-b5cf-824a5928c7f1",
|
||||
"name": "是否识别",
|
||||
"field": "extract"
|
||||
"field": "recognition_enable"
|
||||
}
|
||||
],
|
||||
"passThrough": true,
|
||||
|
|
@ -149,8 +149,8 @@
|
|||
"id": "a1146fe1-b0dd-4efd-b0b7-11e000bc569f",
|
||||
"name": "decisionTable",
|
||||
"position": {
|
||||
"x": 495,
|
||||
"y": 170
|
||||
"x": 430,
|
||||
"y": 114
|
||||
}
|
||||
}
|
||||
],
|
||||
Loading…
Reference in New Issue