使用HIAI实现证件识别

  • HiAi介绍
    • 1. 准备工作
    • 2. 身份证识别
      • 2.1 首先要初始化sdk
      • 2.2 拍照或选取图片(省略)
      • 2.3 异步处理,提取图片信息
      • 2.4 效果图
    • 总结

HiAi介绍

Huawei HiAI 是华为开发的智能识别的SDK,能够智能识别图像、人脸、物体等,我们使用华为手机拍照时,拍摄界面会智能识别出动物、人脸、风景等,然后智能调整拍摄参数。这里就是使用了HIAI的能力。本文仅demo演示一下,身份证件的识别。

华为开发者平台上的示例代码有缺陷,应该是未能及时更新导致编译报错。
https://developer.huawei.com/consumer/cn/doc/development/hiai-Examples/3143405

1. 准备工作

  1. 下载HUAWEI HIAI SDK
  2. 编译这些aar到libs文件夹
  3. gradle配置一下
dependencies {implementation fileTree(dir: 'libs', include: ['*.jar', '*.aar'])......
}
  1. 同步成功后,就可以写代码来使用HIAI了

2. 身份证识别

HIAI能够识别出身份证信息:姓名、性别、民族、生日、户籍、证件号

废话不多说,直接上代码

2.1 首先要初始化sdk

VisionBase.init(HuaweiDetectActivity.this, new ConnectionCallback() {@Overridepublic void onServiceConnect() {//当与服务连接成功时,会调用此回调方法;//您可以在这里进行detector类的初始化、标记服务连接状态等Log.i(TAG, "onServiceConnect ");}@Overridepublic void onServiceDisconnect() {//当与服务断开时,会调用此回调方法;//您可以选择在这里进行服务的重连,//或者对异常进行处理;Log.i(TAG, "onServiceDisconnect");}});

2.2 拍照或选取图片(省略)

2.3 异步处理,提取图片信息

class MyTask extends AsyncTask < Void, Object, IDCard> {Bitmap bitmap;public MyTask(Bitmap bitmap) {this.bitmap = bitmap;}@Overrideprotected IDCard doInBackground(Void...voids) {Log.e(TAG, "doInBackground: ");long time = System.currentTimeMillis();CardDetector detector = new CardDetector(HuaweiDetectActivity.this); // 构造DetectorCardConfiguration config = new CardConfiguration();//指定扫描的证件类型,IDCARD是身份证config.setCardType(CardConfiguration.IDCARD);config.setEngineType(TextDetectType.TYPE_TEXT_DETECT_CARD);//设置证件识别配置detector.setCardConfiguration(config);//detector初始化detector.prepare();Frame frame = new Frame();frame.setBitmap(bitmap);//识别图片数据,返回识别结果JSONObject jsonObject = detector.detect(frame, null);Log.e(TAG, "doInBackground: total time=" + (System.currentTimeMillis() - time));//根据证件类型转换IDCard card = (IDCard) detector.convertResult(jsonObject);
//            DriverLicense card = (DriverLicense) detector.convertResult(jsonObject);
//            DrivingPermit card = (DrivingPermit) detector.convertResult(jsonObject);return card;}@Overrideprotected void onPostExecute(IDCard card) {super.onPostExecute(card);if (card == null){return;}Log.e(TAG, "onPostExecute: s=" + card.toString());StringBuilder sb = new StringBuilder();sb.append("证件号:").append(card.getId()).append("\n");sb.append("姓名:  ").append(card.getName()).append("\n");sb.append("民族:  ").append(card.getNation()).append("\n");sb.append("性别:  ").append(card.getGender()).append("\n");sb.append("生日:  ").append(card.getBirthday()).append("\n");sb.append("户籍:  ").append(card.getAddress()).append("\n");sb.append("有效期: ").append(card.getExpiration()).append("\n");sb.append("签发机关:").append(card.getOrganization()).append("\n");//            sb.append("姓名:  ").append(card.getName()).append("\n");
//            sb.append("民族:  ").append(card.getNation()).append("\n");
//            sb.append("性别:  ").append(card.getSex()).append("\n");
//            sb.append("生日:  ").append(card.getBirthDate()).append("\n");
//            sb.append("区域ID:").append(card.getFileId()).append("\n");
//            sb.append("开始日期:").append(card.getStartDate()).append("\n");
//            sb.append("结束日期:").append(card.getValidDate()).append("\n");
//            sb.append("签发日期:").append(card.getIssueDate()).append("\n");
//            sb.append("有效期:").append(card.getValidPeriod()).append("\n");
//            sb.append("有效期止:").append(card.getIssueDate()).append("\n");
//            sb.append("准驾车型:").append(card.getCarClass()).append("\n");
//            sb.append("地址:  ").append(card.getAddress()).append("\n");
//            sb.append("证件号:").append(card.getId()).append("\n");
//            sb.append("页码:").append(card.getPage()).append("\n");
//            sb.append("记录:  ").append(card.getRecord()).append("\n");
//            sb.append("记录1: ").append(card.getRemark1()).append("\n");
//            sb.append("记录2: ").append(card.getRemark2()).append("\n");//            sb.append("属于人:  ").append(card.getOwner()).append("\n");
//            sb.append("地址:  ").append(card.getAddress()).append("\n");
//            sb.append("检测日期:").append(card.getInspectionrecord()).append("\n");
//            sb.append("区域ID:  ").append(card.getFileId()).append("\n");
//            sb.append("核载: ").append(card.getCapacity()).append("\n");
//            sb.append("特征:  ").append(card.getCharacter()).append("\n");
//            sb.append("发动机:  ").append(card.getEngineNO()).append("\n");
//            sb.append("净重:").append(card.getEquipmentweight()).append("\n");
//            sb.append("有效期止:").append(card.getIssueDate()).append("\n");
//            sb.append("载重:  ").append(card.getLoadweight()).append("\n");
//            sb.append("品牌: ").append(card.getModel()).append("\n");
//            sb.append("概况:").append(card.getOutlinesize()).append("\n");
//            sb.append("车牌号:").append(card.getPlateNO()).append("\n");
//            sb.append("注册日:").append(card.getRegisterDate()).append("\n");
//            sb.append("总重:  ").append(card.getTotalweight()).append("\n");
//            sb.append("马力:  ").append(card.getTractionweight()).append("\n");
//            sb.append("类型:  ").append(card.getType()).append("\n");
//            sb.append("VIN:  ").append(card.getVIN()).append("\n");
//            sb.append("记录1: ").append(card.getRemark1()).append("\n");
//            sb.append("记录2: ").append(card.getRemark2()).append("\n");textView.setText(sb.toString());}}

2.4 效果图

  1. 身份证识别

  1. 驾驶证识别

总结

  • HIAI的图片文本识别功能很强大,还有动物、人脸识别的深度学习,但是也存在部分信息识别不出来或识别错误。
  • 再者,不知道是否支持扫描识别,多帧图片应该能提高准确率。

HIAI的文字识别能力相关推荐

  1. 运行HiAi通用文字识别demo

    1.安装Android studio 2.安装DevEco IDE DevEco IDE是内嵌在Android studio中的,相当于一个插件. 下载DevEco IDEhttps://develo ...

  2. 揭秘!文字识别在高德地图数据生产中的演进

    简介:丰富准确的地图数据大大提升了我们在使用高德地图出行的体验.相比于传统的地图数据采集和制作,高德地图大量采用了图像识别技术来进行数据的自动化生产,而其中场景文字识别技术占据了重要位置.商家招牌上的 ...

  3. HarmonyOS之AI能力·通用文字识别技术

    一.通用文字识别技术 通用文字识别的核心技术是 OCR(Optical Character Recognition,光学字符识别). OCR 是一种通过拍照.扫描等光学输入方式,把各种票据.卡证.表格 ...

  4. 场景文字识别的算法创新与应用,来自百度的技术前沿

    点击我爱计算机视觉标星,更快获取CVML新技术 几天前,52CV曾经向大家推荐百度家 OCR主题的飞桨博士会: 飞桨博士会第四期,中国深度学习技术俱乐部诚邀您加入 百度组织的这个会比较高端,很多52C ...

  5. 图片转文字怎么弄?图文转换方式说明

    图片转文字技术是一种将图片中的文字内容自动转换为文字形式的技术,也被称为OCR技术(Optical Character Recognition). 目前市面上有很多图片转文字的软件,其中一些比较知名的 ...

  6. 文字识别在高德地图数据生产中的演进

    导读:丰富准确的地图数据大大提升了我们在使用高德地图出行的体验.相比于传统的地图数据采集和制作,高德地图大量采用了图像识别技术来进行数据的自动化生产,而其中场景文字识别技术占据了重要位置.商家招牌上的 ...

  7. poi hssfcellstyle 文字方向_揭秘!文字识别在高德地图数据生产中的演进

    简介:丰富准确的地图数据大大提升了我们在使用高德地图出行的体验.相比于传统的地图数据采集和制作,高德地图大量采用了图像识别技术来进行数据的自动化生产,而其中场景文字识别技术占据了重要位置.商家招牌上的 ...

  8. 百度文字识别离线SDK详细说明

    关于百度文字识别离线SDK,总有些小伙伴搞不清楚,今天小编就百度文字识别离线SDK为大家做详细说明,我们一起来看下吧! 文字识别离线SDK 在手机.摄像头.执法记录仪等设备终端无网或弱网环境下对文字识 ...

  9. 天若OCR文字识别 v1.2.0

    按 在日常生活中,我们常常会遇到这样的情况:别人发来的文稿图片需要我们将文字录入电脑.网页中的文字元素无法复制只能查看.有很多用户提及这样的需求可以用OCR工具来解决,那什么是OCR呢? OCR即光学 ...

最新文章

  1. 怎么用python扫描主机_python扫描主机开放的端口
  2. css盒模型中子元素垂直方向上总高度与父元素height的关系
  3. gradle各版本下载地址
  4. word删除分节符后之前的格式乱了_办公室高级技能之Word邮件合并拆分
  5. pip镜像源+修改linux配置用永久生效
  6. 联通sgip协议 java socket_sgip12 个人编写的 联通SGIP协议基于 socket 方式实现 源 联合开发网 - pudn.com...
  7. StickyListHeaders的使用
  8. 腾讯实习mini项目总结
  9. 【免费毕设】IT产品网上物流管理信息系统的设计与实现(源代码+lunwen)
  10. java tcp 阻塞等待应答_面试常问!TCP 的三次握手与四次挥手理解
  11. 【从C到C++学习笔记】内联成员函数/成员函数重载及缺省参数
  12. java des 加密 js 解密_js 实现DES加密解密
  13. 抖音上非常火的整人小程序
  14. FAQ(常见问题解答)
  15. 如何在Ubuntu 20.04上安装和使用Docker
  16. 1079 延迟的回文数 (20 分) java题解
  17. tree--树,最常见的复杂关系结构
  18. code flattening —— conversion to R1CS——formulation of QAP
  19. 【Go】Go语言基本数据类型
  20. Ansible中的常用模块介绍

热门文章

  1. 数据采集之测试数据的造数
  2. 数字电路中的电压精准采集
  3. Android开发知识(十)快速接入高德地图SDK(地图+定位+标记+路线规划+搜索)
  4. javascript 图像预装载-实现网页幻灯片放映
  5. 能推荐给我一些免费看文学作品的网站吗?
  6. 太空大战基本功能实现脚本02
  7. fence集群实现HA(高可用)
  8. 吴军,阅读与写作,12,如何写好心理活动?
  9. RTD2166低成本设计方案|DP转VGA方案设计|兼容RTD2166设计电路
  10. SQL-查询没有学全所有课的同学,显示(学号、姓名)