首页 炼丹房 帖子详情
人脸识别 身份证识别的具体方案 BlazeFace YOLO 已解决
收藏
快速回复
炼丹房 问答新手上路 32418 8
人脸识别 身份证识别的具体方案 BlazeFace YOLO 已解决
收藏
快速回复
炼丹房 问答新手上路 32418 8

最近在学习OCR方面的资料,设计一个身份证识别的过程。  设计中的具体步骤如下:

1. 识别身份证上面的人脸,并调整证件为头朝上的形式
2. 识别身份证上面的内容

如上步骤中,第二步使用ppocr模型就可以很好的解析出证件张里面的内容。

问题的关注点在于第一步

第一步中包含人脸识别的过程, 在人脸识别的技术中找到了, InsightFace  BlazeFace YOLO

三种似乎都可以做,
    InsightFace BlazeFace 是专门进行人脸识别的开源组件,  但是他们在识别出来人脸之后,可以提供坐标。 没有找到应该如何把证件照调整为头像朝上的正常参数,比如便宜多少的类似参数。
YOLO 是用来做物体分类识别的,如果专门做证件头像识别应该是需要做单独的训练,使用机器学习的方式提高识别准确率。但是这个方式也同样不包含调整头像朝上的参数。 

 

所以让我很费解, 到底应该怎么样实现上述描述的功能。 

l
lfq1324564
已解决
7# 回复于2023-03
emmmm,小伙子刚入门吧,刚入门就搞深度学习框架了。这个项目实现方案有很多,打个比方,使用paddleocr进行文本识别,ocr中附带检测模型,使用检测模型返回的坐标即可实现对整个身份证的一个定位。
展开
0
收藏
回复
全部评论(8)
时间顺序
李长安
#2 回复于2023-03

不知道你说的头朝上啥意思,放一张示例图片

0
回复
wsldbhw
#3 回复于2023-03

头朝上

头朝下

0
回复
李长安
#4 回复于2023-03

我觉得可以加一个方向识别的步骤,前后处理应该都行,后处理的话就是判断人像位置在图片的左面还是右面就行吧

0
回复
wsldbhw
#5 回复于2023-03
我觉得可以加一个方向识别的步骤,前后处理应该都行,后处理的话就是判断人像位置在图片的左面还是右面就行吧

但是如果图像拍的比较大了。 就没有好办法定位了吧。比如身份证只占用整个照片的 三分之一的情况.

0
回复
wsldbhw
#6 回复于2023-03

比如下面的图片, 红框的区域也可能是身份证照片所在位置

0
回复
l
lfq1324564
#7 回复于2023-03

emmmm,小伙子刚入门吧,刚入门就搞深度学习框架了。这个项目实现方案有很多,打个比方,使用paddleocr进行文本识别,ocr中附带检测模型,使用检测模型返回的坐标即可实现对整个身份证的一个定位。

0
回复
wsldbhw
#8 回复于2023-04
emmmm,小伙子刚入门吧,刚入门就搞深度学习框架了。这个项目实现方案有很多,打个比方,使用paddleocr进行文本识别,ocr中附带检测模型,使用检测模型返回的坐标即可实现对整个身份证的一个定位。

嗯,确实是新手。我也想到了这个方案,现在逻辑已经做完了。 不过发现一个新问题。 PPocr返回的各区域坐标。与图片的坐标对应不上,全是乱乱的。 

 

0
回复
wsldbhw
#9 回复于2023-04

具体实现方案补充:

 关键字  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 

0
回复
在@后输入用户全名并按空格结束,可艾特全站任一用户