"""
身份证
"""
from apphelper.image import union_rbox
import re
class idcard:
"""
身份证结构化识别
"""
def __init__(self,result):
self.result = union_rbox(result,0.2)
self.N = len(self.result)
self.res = {}
self.full_name()
self.sex()
self.birthday()
self.birthNo()
self.address()
def full_name(self):
"""
身份证姓名
"""
name={}
for i in range(self.N):
txt = self.result[i]['text'].replace(' ','')
txt = txt.replace(' ','')
##匹配身份证姓名
res = re.findall("姓名[\u4e00-\u9fa5]{1,4}",txt)
if len(res)>0:
name['姓名'] =res[0].replace('姓名','')
self.res.update(name)
break
def sex(self):
"""
性别女民族汉
"""
sex={}
for i in range(self.N):
txt = self.result[i]['text'].replace(' ','')
txt = txt.replace(' ','')
if '男' in txt:
sex["性别"] = '男'
elif '女' in txt:
sex["性别"] = '女'
##性别女民族汉
res = re.findall(".*民族[\u4e00-\u9fa5]+",txt)
if len(res)>0:
sex["民族"] = res[0].split('民族')[-1]
self.res.update(sex)
break
def birthday(self):
"""
出生年月
"""
birth={}
for i in range(self.N):
txt = self.result[i]['text'].replace(' ','')
txt = txt.replace(' ','')
##出生年月
res = re.findall('出生\d*年\d*月\d*日',txt)
res = re.findall('\d*年\d*月\d*日',txt)
if len(res)>0:
birth['出生年月'] =res[0].replace('出生','').replace('年','-').replace('月','-').replace('日','')
self.res.update(birth)
break
def birthNo(self):
"""
身份证号码
"""
No={}
for i in range(self.N):
txt = self.result[i]['text'].replace(' ','')
txt = txt.replace(' ','')
##身份证号码
res = re.findall('号码\d*[X|x]',txt)
res += re.findall('号码\d*',txt)
res += re.findall('\d{16,18}',txt)
if len(res)>0:
No['身份证号码'] =res[0].replace('号码','')
self.res.update(No)
break
def address(self):
"""
身份证地址
##此处地址匹配还需完善
"""
add={}
addString=[]
for i in range(self.N):
txt = self.result[i]['text'].replace(' ','')
txt = txt.replace(' ','')
##身份证地址
if '住址' in txt or '省' in txt or '市' in txt or '县' in txt or '街' in txt or '村' in txt or "镇" in txt or "区" in txt or "城" in txt:
addString.append(txt.replace('住址',''))
if len(addString)>0:
add['身份证地址'] =''.join(addString)
self.res.update(add)