【金融科技SaaS产品】金融实人认证+基于百度AI的身份证图片批量OCR识别

本周的前沿课程由微众银行的钟伟老师、廖梓雄老师和周智老师带来了《金融科技 SaaS 产品》的分享。本次学习报告笔者将分两部分进行:

  1. 对金融实人认证部分以关键词或者提出问题的形式进行简略总结。
  2. 就其中笔者感兴趣的身份证OCR内容,结合课程理论进行实战开发,应用于解决问题。

金融实人认证

实人认证整体介绍

实名认证产品知多少?

  • 人脸验证的时候,页面各种颜色闪烁进行检测验证的过程就是所谓的实名认证产品。

金融级实人认证的市场背景?

  • 解决痛点:线下办理业务成本高、线上身份难以确认、身份冒用问题严重、“无证”情况下身份核验
  • 大势所趋:央行、运营商、保险、直播等都发布文件,表明需求。

实人认证产品对比:传统银行 VS 互联网银行

  • 传统银行:以人工面对面核验为主,其他技术手段辅助验证;人的误识率在 0.6%左右;服务时效、覆盖范围有限。
  • 互联网银行:依托人工智能等技术,形成多维的实人认证体系;人的误识率可低于 0.01%,甚至更低;可满足随时、随地的用户服务。

远程实人认证逐渐成为线上业务服务的基础

  • 2015 年 12 月,央行发布了人民币银行结算账户管理新规,将个人银行账户分为三级,明确了各级别账户的细则管理,从而促进了远程身份验证成为线上业务服务的基础。
  • 远程身份验证成为线上业务服务的基础,人脸识别以其易用性、安全性及完善的个人居民身份信息库为基础,促进了在各互联网行业的身份认证流程的快速应用。

金融级实人认证:产品模块介绍

  • 意愿性验证:让用户配合朗读一段文字,通过 ASR+NLP 去识别用户读取信息与原段文字的完整度和语义匹配度,已达到验证客户意愿性的目的。
  • 活体检测:活体检测通过动作交互、光线交互、静默、语音数字活体等多种方式验证当前核身用户是否真实活体。
  • 人脸比对:OCR、人脸比对(1:1) 等多种方式结合,验证当前用户身份信息,分为:自带比对源认证和权威源认证两种。

金融级实人认证:标准流程

 

金融级实人认证:标准流程

 

金融级实人认证:整体框架

 

金融级实人认证:整体框架

 

金融级实人认证:如何保护用户隐私

  • 2021 年 8 月 20 日,十三届全国人大常委会第三十次会议表决通过《中华人民共和国个人信息保护法》,11 月 1 日起施行。
  • 个保法的颁布,更进一步对科技产品在用户使用过程中,如何保护用户隐私提出了更高、更明确的要求。
  • 主要包括:充分授权、最小采集、不留痕迹、信息加密

实人认证的产品架构

意愿性表达

交互流程

 

意愿性表达:交互流程

 

设计要点

  • 视觉交互(交互引导设计;适配和兼容性;埋点(流失率分析))
  • 人脸检测(脸完整度检测(姿态、光线等);人脸连续性检测;视频和音频分离录制;留存最佳人脸照片)
  • 语音/语义识别(ASR 语音转文本识别;NLP 文本语义理解并与上送的原文本进行语义理解比较)

证件OCR

文字识别能力

 

证件OCR

 

质量检测能力

  • 终端 SDK:内置质检能力,可在前端实时甄别模糊、边框不完整等问题图片,自动拍摄完整清晰的合格图片。
  • 服务端:质量检测模块可输出图片清晰分,判断边框不完整、框内遮挡、图片反光等质量告警,供合作方根据自身业务场景灵活配置使用。

 

质量检测能力

 

证件 OCR :真伪辨别

  • 复印件告警
    • 【攻击手段】攻击者并无身份证原件,采用黑白或彩色打印/复印出被攻击者的身份证。
    • 【拦截原理】根据边框、颜色、材质等差异,识别彩色及黑白复印件。
  • 屏幕翻拍件告警
    • 【攻击手段】攻击者并无身份证原件,采用手机、电脑等电子设备中的被攻者的身份证。
    • 【拦截原理】根据边框、摩尔纹、光线情况等差异,识别屏幕翻拍件。
  • PS 涂改告警
    • 【攻击手段】情况一:攻击者有身份证原件,在原件卡面涂改信息以修改身份证件内容;情况二:攻击者无身份证原件,在身份证电子文件中使用 PS 等图像编辑软件修改身份证件内容。
    • 【拦截原理】根据字体大小、间距行距、字形等字体改动识别 PS 涂改。

证件NFC

产品流程

实证 NFC 产品的认证流程如下图所示,用户通过放置身份证在手机 NFC 位置,实证 NFC 产品读取并解码身份证内置加密信息,即可获取到身份证上的要素信息、证件头像、身份证国徽面、身份证人像面等 11 要素信息,并返回给客户进行业务使用。

 

证件NFC:产品流程

 

支持识别内容与类型

  • 身份证件类:二代身份证、港澳居住证、台湾居住证、外国人永居证
  • 旅行证件类:护照、港澳通行证、台湾通行证、台胞证、回乡证

分级活体

分级活体检测:可根据分级策略动态下发交互策略

 

分级活体检测

 

架构:兼顾安全性和便捷性

 

活体检测架构

 

模型组合:多维活体检测模型组合,可根据场景灵活配置

  • 多维度的活体防攻击检测模型,基于交互、视频、图片、纹理等多维分析,确保活体安全。
  • 包括:交互检测、视频分析、图像分析、屏幕分析、纸片分析纹理/面具分析、设备指纹

活体攻击常见类型

  • 屏幕翻拍(包含高清)
  • 高清屏幕攻击+五官部分编辑
  • 动画合成
  • 纸质面具
  • 摄像被劫持,直接导入视频流信息,常见于攻击光线活体
  • 3D 打印的人脸模型(塑质、石墨、头模等模型)

图片内容标签识别

  • 图片内容标签识别指:对人脸核身中图片增加涉黄、涉政、涉暴、广告特征、人物特征识别等特征识别;
  • 背景聚类主要提供对图片进行背景识别分类,将相似的背景识别归类在一起,应用于风控判断场景中;
  • 识别结果标签直接在人脸核身的结果字段中返回,无需二次开发调用。

 

图片内容标签识别

 

## 实人认证的产品优势

  • 产品成功的关键:产品+运营高效协同
  • 产品设计关键要点,怎么做?— 交互体验+兼容性+埋点+产品架构+产品指标+产品性能+产品迭代
  • 健全的运营管理体系,才能做好产品运营。 — 运营监控+服务处理+运营管理流程

基于百度AI的身份证图片批量OCR识别

笔者基于对金融实人认证中的证件OCR部分感兴趣,想动手实际操作一番。一番调查,发现使用百度大脑AI提供的API可以很简单地免费实现批量识别身份证图片信息,并制成Excel表格,方便下一步进行数据分析。

百度AI的身份证接口支持对二代居民身份证正反面所有8个字段进行结构化识别,包括姓名、性别、民族、出生日期、住址、身份证号、签发机关、有效期限,识别准确率超过99%;同时支持身份证正面头像检测,并返回头像切片的base64编码及位置信息。

同时,支持对用户上传的身份证图片进行图像质量和风险检测,是否存在正反颠倒、模糊、欠曝、过曝等质量问题,可识别图片是否为复印件或临时身份证,是否被翻拍或编辑,是否存在四角不完整、头像或关键字段被遮挡。

运行环境

python 3.6 ,pandas=1.3.5 ,requests=2.26.0 ,openpyxl=3.0.9

注册百度智能云

在编写调用程序前,首先需要到百度智能云官网的文字识别免费注册一个身份证识别。

 

注册百度身份证识别

 

领取后在官网控制台的应用列表里面创建一个应用,可以得到APIKey和SecretKey,后面就可以在python程序中进行API调用了。

 

获取APIKey和SecretKey

 

调用鉴权接口获取token

调用接口需要添加URL参数:access_token,所以需要通过上面注册得到的API Key和Secret Key获取的access_token。

参考官方文档“Access Token获取”,笔者首先在目录下创建一个config.conf配置文件(用来存储API Key、Secret Key,已经获取的access_token)和img文件夹(用来存储要识别的身份证图片)

从config文件读取AK和SK,接着调用接口获取access_token,最后再将提取access_token,并写入config。代码如下:

config.read('config.conf', encoding='UTF-8')
# 从config文件读取AK和SK
AK = config['ApplicationInfo']['APIKey']
SK = config['ApplicationInfo']['SecretKey']
if (AK == '') + (SK == ''):
    print('未填写APIKey和SecretKey,请打开config.conf填写')
    time.sleep(2)
    quit()
# 获取access_token
host = 'https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=' + AK + '&client_secret=' + SK
response = requests.get(host)
# 提取access_token,并写入config
if response:
    Access_token = response.json()['access_token']
try:
    Access_token
except NameError:
    print('APIKey和SecretKey填写有误,access_token获取失败,请检查你的填写')
    time.sleep(2)
    quit()
config['token'] = {
    'AccessToken': Access_token
}
config.write(open('config.conf', 'w', encoding='UTF-8'), space_around_delimiters=False)

最后接口的config文件如下:

[ApplicationInfo]
apikey = wjCs6rBdyFSy7IOiqe7FEGah
secretkey =zdULBykXkvmGbrb02lOQrTmBDDC4mnLa

[token]
accesstoken=24.ca18001507c7301c1bca181e41d26ccc.2592000.1653986974.282335-26140110

用python调用API接口

笔者接着新建了一个idocr.py 文件,写了idocr(filepath)函数用来调用接口进行身份证OCR识别,这里的参数为识别图片二进制文件路径。

调用接口的核心代码如下:

 # 百度大脑AI接口识别身份证信息
    request_url = "https://aip.baidubce.com/rest/2.0/ocr/v1/idcard"
    # 二进制方式打开图片文件
    f = open(filepath, 'rb')
    img = base64.b64encode(f.read())
    params = {"id_card_side":"front","image":img}
#   access_token = ''
    request_url = request_url + "?access_token=" + access_token
    headers = {'content-type': 'application/x-www-form-urlencoded'}
    response = requests.post(request_url, data=params, headers=headers)

并提取身份证中有用的信息

    # 提取有用信息
    if 'words_result' in idinfo:
        if '姓名' in idinfo['words_result']:
            birthday=list(idinfo['words_result']['出生']['words'])
            birthday.insert(4,'/')
            birthday.insert(7,'/')
            birthday=''.join(birthday)
            idresult=[
                idinfo['words_result']['姓名']['words'],
                idinfo['words_result']['民族']['words'],
                idinfo['words_result']['住址']['words'],
                idinfo['words_result']['公民身份号码']['words'],
                birthday,
                idinfo['words_result']['性别']['words']
            ]

将身份证信息写入excel文件

接着新建一个csvmod.py 文件,用来新建csv文件,并为csv文件追加行信息,将识别出来的身份证信息写入output.csv文件。

import csv
def create_csv(csv_head):       #新建csv文件,参数为标题行,使用py列表
    path = "output.csv"
    with open(path,'w',newline='',encoding='utf-8') as f:
        csv_write = csv.writer(f)
        csv_write.writerow(csv_head)
def write_csv(data_row):        #为csv文件追加行信息,使用py列表
    path  = "output.csv"
    with open(path,'a+',newline='',encoding='utf-8') as f:
        csv_write = csv.writer(f)
        csv_write.writerow(data_row)

运行结果

最后将上述步骤涉及的代码封装起来,遍历img文件夹,识别身份证信息,并写入excal表格。

笔者这里以从网上找到的几张身份证假照片进行测试。(笔者也测试了自己的身份证识别,也可以成功,这里由于隐私问题就不放出来了)

 

身份证测试图片

 

运行程序,可以看到结果如下,识别成功(图片的姓名都遮挡住了)

 

测试结果

 

再看输出的excel文件,如下图所示,完成了身份证识别并写入excel。

 

输出到excel

 

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇