人脸识别 身份证识别的具体方案 BlazeFace YOLO
收藏
最近在学习OCR方面的资料,设计一个身份证识别的过程。 设计中的具体步骤如下:
1. 识别身份证上面的人脸,并调整证件为头朝上的形式
2. 识别身份证上面的内容
如上步骤中,第二步使用ppocr模型就可以很好的解析出证件张里面的内容。
问题的关注点在于第一步
第一步中包含人脸识别的过程, 在人脸识别的技术中找到了, InsightFace BlazeFace YOLO
三种似乎都可以做,
InsightFace BlazeFace 是专门进行人脸识别的开源组件, 但是他们在识别出来人脸之后,可以提供坐标。 没有找到应该如何把证件照调整为头像朝上的正常参数,比如便宜多少的类似参数。
YOLO 是用来做物体分类识别的,如果专门做证件头像识别应该是需要做单独的训练,使用机器学习的方式提高识别准确率。但是这个方式也同样不包含调整头像朝上的参数。
所以让我很费解, 到底应该怎么样实现上述描述的功能。
lfq1324564
已解决
7#
回复于2023-03
emmmm,小伙子刚入门吧,刚入门就搞深度学习框架了。这个项目实现方案有很多,打个比方,使用paddleocr进行文本识别,ocr中附带检测模型,使用检测模型返回的坐标即可实现对整个身份证的一个定位。
0
收藏
请登录后评论
不知道你说的头朝上啥意思,放一张示例图片
头朝上
头朝下
我觉得可以加一个方向识别的步骤,前后处理应该都行,后处理的话就是判断人像位置在图片的左面还是右面就行吧
但是如果图像拍的比较大了。 就没有好办法定位了吧。比如身份证只占用整个照片的 三分之一的情况.
比如下面的图片, 红框的区域也可能是身份证照片所在位置
emmmm,小伙子刚入门吧,刚入门就搞深度学习框架了。这个项目实现方案有很多,打个比方,使用paddleocr进行文本识别,ocr中附带检测模型,使用检测模型返回的坐标即可实现对整个身份证的一个定位。
嗯,确实是新手。我也想到了这个方案,现在逻辑已经做完了。 不过发现一个新问题。 PPocr返回的各区域坐标。与图片的坐标对应不上,全是乱乱的。
具体实现方案补充:
关键字 check_keys = ['姓名', '性别', '出生', '住址', '公民身']
计算公式
rad = math.atan2(p1[1]-p2[1], p1[0]-p2[0]) # 得出弧度值
angle = rad * (180/math.pi) # 计算角度
revise_angle = math.ceil(angle) - -90 # 通过-90度纠正得到最终需要修正的倾斜角度
# 图片打开后需要根据 exif 信息再进行一次修正 得到最终图片的修正角度 image_rotate
try:
for orientation in ExifTags.TAGS.keys():
if ExifTags.TAGS[orientation] == 'Orientation':
break
exif = dict(image._getexif().items())
if exif[orientation] == 3:
#image = image.rotate(180, expand=True)
image_rotate = 180
print('image.rotate(180, expand=True)')
elif exif[orientation] == 6:
#image = image.rotate(270, expand=True)
image_rotate = 270
print('image.rotate(270, expand=True)')
elif exif[orientation] == 8:
#image = image.rotate(90, expand=True)
image_rotate = 90
print('image.rotate(90, expand=True)')
else:
image_rotate = 0
except:
pass