Android使用阿里云接口实现身份证识别功能

uniapp [全端兼容] - 详细实现人脸识别和活体检测功能,实时监测人脸是否进入区域及动作是否正确播报,免费自动提示引导动作及语音,提供提供实名认证、身份证识别、人脸信息采集、刷脸扫脸认证示例代码 uniapp,h5移动端网页,微信小程序,支付宝小程序,Android安卓,苹果ios,app,nvue,人脸识别,扫脸认证,人脸认证,活体认证,身份认证,uni-app人脸识别详细教程,如何在app端实现免费人脸识别教程,如何在小程序端做,最好用的插件,安卓ios百度人脸识别、活体检测、人脸采集APP,H5人脸识别带前后摄像头,适合新手看的人脸识别功能教程,详细示例代码源码,有没有免费的,接入百度,阿里云人脸识别,百度,api,活体检测,数据采集,动作提示指引,语音提示指引,报错,无法核验一直出错,根本用 阅读详情

前言

现如今,许多app需要智能识别用户提供的身份证图片上的信息来完成一些工作,阿里云刚好提供了这个接口,下面我们实现一个小的demo来和大家学习一下。

效果图:

随便在网上找了两张身份证图片,识别并得到结果,num为空因为这个身份证号码是不存在的,真实身份证是可以得到想要的结果的。

该项目的githup地址为:https://github.com/gumaoqi/ALiYunDemo

你可以去将项目clone下来,然后查看或更改来达到自己的需求。

我的另一篇人脸检测博客地址:https://blog.youkuaiyun.com/gumaoqi861469629/article/details/82964050,也是通过阿里云的接口。有兴趣的可以去看一看

申请KEY

这里我在完成了功能后将appcode修改了,你需要自行申请购买才能正常运行,下面先介绍如何申请key。

如下图:

打开阿里云首页---产品---人工智能---点击"通用型卡证类"进入下一个页面---身份证识别模块点击"立即购买"进入下一个页面---如果没有购买点击"立即购买"(阿里云提供了0元500次免费的次数);如果已经购买滑动到下方点击"API简单身份认证调用方法"进入下一个页面---点击"查看我的appcode值"就可以查看想要的信息了。

上代码前先吐槽一下,阿里云给的java的示例代码用的是pom.xml管理依赖,而我们经常使用的是as作为开发工具,用build.gradle管理依赖。且示例代码使用的网络请求方式org.apache.http.httpResponse在Android的版本大于22就不支持了(好像是这样,因为这个原因我根据阿里云的demo改了很久都没能成功),然后我去网上搜索其他人的项目,居然没有一个下载下来是可以用的(可能是我能力不够,配置不来环境),于是决定自己动手写一下,最后我选择了使用retrofit网络请求框架来完成。

代码:


build.gradle


 
  1. implementation 'com.squareup.retrofit2:retrofit:2.0.2'//添加retrofit依赖
  2. implementation 'com.squareup.okhttp3:okhttp:3.1.2'//由于retrofit依赖okhttp,所以需要添加okhttp依赖
  3. implementation 'com.squareup.retrofit2:converter-gson:2.0.2'
  4. //由于retrofit网络识别的返回结果的处理需要用到gson,添加依赖

使用retrofit网络请求框架请添加上述三个依赖


AndroidMainfest.xml


 
  1. <!-- 添加使用网络的权限 -->
  2. <uses-permission android:name="android.permission.INTERNET" />

由于需要网络请求,添加网络权限


activity_main_xml


 
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. xmlns:tools= "http://schemas.android.com/tools"
  4. android:layout_width= "match_parent"
  5. android:layout_height= "match_parent"
  6. android:orientation= "vertical"
  7. tools:context= ".MainActivity">
  8. <LinearLayout
  9. android:layout_width= "match_parent"
  10. android:layout_height= "wrap_content"
  11. android:orientation= "horizontal">
  12. <Button
  13. android:id= "@+id/activity_main_bt_one"
  14. android:layout_width= "wrap_content"
  15. android:layout_height= "wrap_content"
  16. android:text= "检测第一张" />
  17. <Button
  18. android:id= "@+id/activity_main_bt_two"
  19. android:layout_width= "wrap_content"
  20. android:layout_height= "wrap_content"
  21. android:text= "检测第二张" />
  22. </LinearLayout>
  23. <LinearLayout
  24. android:layout_width= "match_parent"
  25. android:layout_height= "wrap_content">
  26. <ImageView
  27. android:id= "@+id/activity_main_iv_one"
  28. android:layout_width= "240dp"
  29. android:layout_height= "160dp"
  30. android:src= "@mipmap/id" />
  31. <ImageView
  32. android:id= "@+id/activity_main_iv_two"
  33. android:layout_width= "240dp"
  34. android:layout_height= "160dp"
  35. android:src= "@mipmap/id2" />
  36. </LinearLayout>
  37. <TextView
  38. android:id= "@+id/activity_main_tv"
  39. android:layout_width= "wrap_content"
  40. android:layout_height= "wrap_content"
  41. android:text= "我是用来显示识别结果的" />
  42. </LinearLayout>

布局很简单,两个button用于点击,两个imageview用于展示图片,一个textview用于显示识别结果。


MainActivity.java

 

import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Base64;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

import com.google.gson.Gson;

import java.io.ByteArrayOutputStream;
import java.io.IOException;

import okhttp3.RequestBody;
import okhttp3.ResponseBody;
import retrofit2.Call;
import retrofit2.Callback;
import retrofit2.Response;
import retrofit2.Retrofit;
import retrofit2.converter.gson.GsonConverterFactory;
import retrofit2.http.Body;
import retrofit2.http.Header;
import retrofit2.http.POST;

public class MainActivity extends AppCompatActivity {
    Button buttonOne;
    Button buttonTwo;
    TextView textView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        buttonOne = findViewById(R.id.activity_main_bt_one);
        buttonTwo = findViewById(R.id.activity_main_bt_two);
        textView = findViewById(R.id.activity_main_tv);
        buttonOne.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.id);
                idCardRecognition(bitmap);
            }
        });
        buttonTwo.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.id2);
                idCardRecognition(bitmap);
            }
        });
    }

    public void idCardRecognition(Bitmap bitmap) {
        String appcode = "f785099e36b442aa983a79259735917d";
        String body = "{\n" +
                "\t\"image\":  \"" + base64ToNoHeaderBase64(bitmapToBase64(bitmap)) + "\",\n" +
                "\t\"configure\": \"{\\\"side\\\":\\\"face\\\"}\" \n" +
                "}";
        final RequestBody requestBody = RequestBody.create(okhttp3.MediaType.parse("application/json;charset=UTF-8"), body);
        Retrofit retrofit = new Retrofit.Builder()
                .addConverterFactory(GsonConverterFactory.create(new Gson()))
                .baseUrl("http://dm-51.data.aliyun.com/")//接口的默认地址
                .build();
        IdTestService idTestService = retrofit.create(IdTestService.class);
        Call<ResponseBody> call = idTestService.getTestResult(requestBody, "APPCODE " + appcode);
        call.enqueue(new Callback<ResponseBody>() {
            @Override
            public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) {
                try {
                    textView.setText(response.body().string());
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }

            @Override
            public void onFailure(Call<ResponseBody> call, Throwable t) {
                Log.i("123", t.getMessage());
            }
        });

    }

    /**
     * 将Bitmap转换成Base64字符串
     *
     * @param bitmap
     * @return
     */
    public static String bitmapToBase64(Bitmap bitmap) {
        ByteArrayOutputStream bos = new ByteArrayOutputStream();
        bitmap.compress(Bitmap.CompressFormat.JPEG, 40, bos);//参数100表示不压缩
        byte[] bytes = bos.toByteArray();
        //转换来的base64码需要加前缀,必须是NO_WRAP参数,表示没有空格。
        return "data:image/jpeg;base64," + Base64.encodeToString(bytes, Base64.NO_WRAP);
    }

    /**
     * 将base64的头去掉
     *
     * @param base64
     * @return
     */
    public static String base64ToNoHeaderBase64(String base64) {
        return base64.replace("data:image/jpeg;base64,", "");
    }

    public interface IdTestService {
        @POST("rest/160601/ocr/ocr_idcard.json")
            //接口字段
        Call<ResponseBody> getTestResult(@Body RequestBody body,
                                         @Header("Authorization") String authorization
        );
    }
}

idCardRecognition方法,识别身份证的具体方法,方法内包含了如何构造retrofit的body,如何创建请求。

bitmapToBase64方法和base64ToNoHeaderBase64方法,将bitmap转换成没有头的base64数据。

IdTestService接口,retrofit使用到的接口。@POST标签表示使用post方法请求,后面跟请求的具体地址;@Body标签,请求体,用于携带需要识别的图片的数据;@Header请求头,用于携带appcode。


至此,已成功利用阿里云的接口实现了身份证识别的内容,检测了两张程序中的身份证图片,具体应用时,图片可以来自摄像头、图库和网络,通过人身份证识别达到不同的功能。

博主水平有限,如有指正错误和其他建议请在评论区留言。

后记

可以结合阿里云身份证识别和人脸对比功能,来判断用户上传的头像和身份证是否为同一个人,然后通过活体检测功能判断是否为一个真人(即非图片和视频的人);由于活体检测费用昂贵(1次/1元)且公司的app中没有需求,所以博主没有仔细去研究。有兴趣的朋友可以自己去研究一下,接下来可能会写一篇两张图片人脸对比、身份证图片和人脸图片对比的文章。

身份证识别

阿里云 身份证实名认证 API接口调用案例 身份证实名认证_身份证二要素一致性验证_身份证实名核验 立即下载

相关推荐

身份证,号码归属地查询

身份证,号码归属地查询源码可以查找相关身份证号码,还有某地区区号,电话号码归属地,简单小软件,供大家学习。

详细说明--系统如何对用户身份证实名认证接口api

当执行注册用户身份认证流程时,系统向目标 API 接口传入身份证号码、姓名字段,接口调用身份信息系统进行比对,核验身份信息的一致性与真实性。

5万+

沧小海深入剖析xilinx的GTP/GTX核,掌握高速串行收发机制——第六章 接收端结构及功能说明

总目录在这哦~ https://blog.youkuaiyun.com/z123canghai/article/details/107700878 第六章 接收端结构及功能说明 子目录 6.1 RX的模拟前端 6.2 RX的OOB信号 6.3 RX的均衡器 6.4 RX的CDR 时钟数据恢复 6.5 RX时钟输出结构 6.6 RX 的极性控制 6.7 RX 的PRBS 6.8 Rx字节、字的对齐功能 6.9 Rx接收弹性缓冲区 6.10 Rx的时钟纠正 6.11 Rx接收通道绑定 6...

滄海的博客 1万+

详细说明--使用阿里云接口进行【身份证实名认证】

如今随着互联网产业的多元化发展,尤其是互联网金融,O2O,共享经济等新兴商业形式的兴起,企业对实名认证业务的数据形式和数据质量有了更高的需求。如今也衍生出身份证实名认证业务,通过接口将身份证号码、姓名上传至阿里云,再与全国公民身份信息系统进行匹配,判断信息的一致性。 在使用接口服务的方面我推荐使用技术实力强大的阿里云; 首先点击:(阿里云API接口)获取相应的订单后在控制台中可以得到您的app...

ruidongjun139的博客 5448

量化策略分享 | MA超进化:LLT低延迟趋势线

移动平均线(MA)是我们技术分析中常用的一种趋势跟踪指标,但在使用的时候你是否也会有这样的烦恼:交易信号延迟太久,或者交易信号太频繁了!延迟性和平滑性问题似乎是不可兼得的“鱼和熊掌”。 针对这个问题,广发证券基于通信领域的滤波器原理,在《短线择时策略研究之三:低延迟趋势线与交易性择时》中创造性构建了:LLT低延迟趋势线(Low-lag Trendline)。 LLT低延迟趋势线是一种二阶滤波器,阶数相对适宜,相比MA、EMA等均线指标能够降低延迟,同时增强在低频部分的输出信号。 当然,..

量化交易研究 5309

Monocle2拟时轨迹基因模块的GO富集解析

本文详细解析了如何对Monocle2拟时分析中得到的基因表达模块进行GO富集分析。通过从热图对象中提取聚类模块,并利用clusterProfiler等工具进行功能注释,将抽象的基因表达时序模式转化为可解释的生物学功能主题,如免疫应答、细胞外基质组织等,从而深入理解细胞命运转变的驱动机制。

gpt4scribbler的博客 500

安卓识别身份证,自动提取身份证信息功能实现(附源码)

源码下载地址:注:源码里没有腾讯优图的账号需要填写自己的 下载地址 先讲几下.首先我们需要去腾讯优图申请一个账号,因为身份证识别需要用到第三方接口如图所示 我申请的是扫描身份证,当然还有其他的功能,比如扫描银行卡,营业执照,车牌等等  ,大家可以去研究一下 1.记得配权限,需要读写SD卡 ,还需要网络的权限   记得引入第三方库,本人很懒,反正能少些代码的,绝对不手打,能用第三库解决的,...

qq_34783437的博客 8379

Win11下USB-Blaster驱动安装全攻略:Quartus用户必看(附常见问题解决)

本文详细介绍了在Windows 11系统下为Intel FPGA开发工具Quartus安装USB-Blaster驱动的完整流程与常见问题解决方案。针对Win11更严格的驱动签名验证机制,提供了从标准安装步骤到高级故障排查(如禁用驱动强制签名、使用测试模式)的实用指南,帮助用户快速解决驱动安装失败问题,确保FPGA编程调试顺利进行。

weixin_29256771的博客 662

Android 拍身份证(自定义相机)

尊重他人劳动成果,本自定义相机拍照核心逻辑取自云栖社区上[Android 手把手带你玩转自定义相机] 文章,本文仅仅在此基础上封装了返回拍照地址等监听事件 自定义相机拍摄二代身份证 ...

皮小智的博客 6811

光学薄膜设计入门:Essential Macleod中文版从安装到实战全攻略

本文为光学薄膜设计初学者提供Essential Macleod软件从安装部署到实战应用的全流程中文指南。详细解析了软件核心界面、材料管理及工作流程,并通过一个完整的宽带增透膜设计实例,手把手演示膜系构建、优化与分析方法,帮助用户快速掌握这一业界标杆工具,跨越理论与实操的门槛。

weixin_29309475的博客 983

多模态融合相关概念

多模态图像融合

weixin_43921949的博客 7357

Android平台上实现身份证识别(通过阿里云Api-印刷文字识别_身份证识别)

Android平台上实现身份证识别(通过阿里云Api-印刷文字识别_身份证识别)一: 前言 继上一篇文章有段时间了,上一篇文章的身份证和银行卡的识别时通过本地的opencv库,tess-two库识别的,虽然有做优化处理,在项目中有段时间了,发现识别处理的效果不佳,后来决定用阿里云的Api进行处理,发现识别速度在5秒左右,识别率在99%左右,下面做详细介绍二: 需求 身份证的正反面识别,身份证上的

孤途浪子 9778

32GB Jetson Orin SOM 不能刷机问题排查

拿到了一个新的Orin SOM,当用orin Devkit CVB或定制的CVB不能用Linux_For_Tegra刷机,flash日志(JetPack5.0DP和5.0.1DP都失败了) 2. 确认mb2配置中将CVB的eeprom读取大小设置是否为0 ? 已经确认是正常的 在定制的orin cvb flash上使用Orin devkit som,启动是成功的。但新得到的Orin som并不工作可以排除理由:使用Orin Devkit CVB和Orin SOM(不是Devkit SOM)仍然不能

jzwjzw19900922的博客 1499

Android实现身份证识别

Android实现身份证识别(印刷文字识别-身份证识别-阿里云) 在做实名认证的时候客户要求要自动识别身份证上的个人信息,我们使用的是阿里云的OCR印刷文字识别-身份证识别 阿里云的文档写的还是很清楚的,按照文档一步步来就可以了 1、调用地址:https://dm-51.data.aliyun.com/rest/160601/ocr/ocr_idcard.json 2、请求方式:POST 3、请求参数:{ "image": "图片二进制数据的base64编码/图片url", "configure"

qq_41771258的博客 1478

基于深度学习的灰度图像气泡群识别与优化

灰度图像气泡群深度学习识别优化研究 本研究针对MATLAB实现的深度学习气泡群识别系统在从1445个点到4992个点扩展时出现的精度不稳定问题,提出了一套完整的解决方案。文章首先分析了问题根源,包括数据复杂度增加、类别不平衡、网络容量不足等因素,然后系统性地提出了数据预处理增强、网络架构优化、训练策略调整和后处理算法改进等优化措施。通过改进的U-Net架构、自适应直方图均衡化等技术创新,有效提升了模型在大规模气泡群图像上的识别精度和稳定性,为化工、生物医学等领域的灰度图像分析提供了可靠的技术支持。

max500600的博客 412

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

Java实现阿里云OCR的身份证识别等功能具体流程(包括android思路)

Android的开发思路,JAVA的开发流程,内部又阿里云OCR的详细操作流程

Chongchong's Home 5328

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

阿里云 OCR身份证识别Api 使用(一)

最近项目更新使用拍照识别身份证功能,为了省去用户手动输入身份证号码信息等。 从网上搜了一些方案,发现阿里云的非常便宜,果断采用。 但是没有android 的官方案例 ,只能自己搞了。 首选OCR 识别技术,需要调用摄像头拍照上传。 使用照相技术我会单独写一篇学习笔记,照相camera 值得深究探讨。我这里就贴出简单的压缩图像代码。也是我写的demo里的一个小代码。 这里使用照相保存本

qq_34157567的博客 2万+

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

Android 百度人脸识别、人脸采集、文字识别(身份证),人证对比

Android 百度人脸识别、人脸采集、文字识别(身份证),人证对比 由于公司的项目赶在 “某某打车” 事件期间,所以你懂得。老板说要个信用安全、和人身安全等等,后来寻思了一下,还是老板说的对,毕竟给钱了。 老板说完我就想到了芝麻信用,还有下面几个。 芝麻信用 身份证人证 人脸识别 人证对比 接下来就是一些冤枉路。 呐,阿里云官网 https://www.aliyun.com/?utm_co...

Fsnzzz520的博客 6859

[iOS]阿里云人脸身份证校验

之前使用人脸身份证校验时,一直返回code=-1提示“照片质量太低”。当时以为是图片太小不清晰,传大一些的图片时又提示“图片过大”,那时弄得很懵因为安卓端能正常调用接口。 经过了一段痛苦的摸索过程,发现图片转成BASE64字符串后还需要对字符串进行URL编码。 认证比对-人脸身份证认证-人脸识别-人脸身份证校验 /* 阿里云人脸识别接口 输入人脸图片(BASE64格式,图片大小小于100...

Gamin 1989

关于OCR身份证识别

PC端输入漫长的身份证号码,想想还可以接受; 手机端输入。。。。 然后我们准备接入OCR,发现微信里也有,要不用用看,反正我没用,链接贴出来 https://mp.weixin.qq.com/wiki?t=resource/res_main&amp;id=21516712284rHWMX 看到社区一堆吐槽,还要发邮件申请。。 看到百度云,腾讯云,阿里云。。都已经成熟,果断弃坑,转向百度云...

sma2mmm的博客 1317

【视觉AI训练营day2】身份证识别web应用

目录一:项目简介二:代码结构 一:项目简介 该项目是通过阿里云自主研发的sdk,可以通过上传照片来识别身份证信息的一款应用。基于springboot 效果展示: 项目架构: 二:代码结构 前端页面: <!DOCTYPE html> <html lang="zh" xmlns:th="http://www.thymeleaf.org"> <head> <meta charset="UTF-8"> <meta name="viewpo

池鱼 1024

Android平台上实现银行卡识别(通过阿里云Api-印刷文字识别_银行卡识别)

Android平台上实现银行卡识别(通过阿里云Api-印刷文字识别_银行卡识别)一: 前言 上一篇文章是通过阿里云Api实现在android中扫描身份证和从相册中选取身份证图片识别身份证信息的功能, 本篇将实现通过阿里云Api-印刷文字识别_银行卡识别的接口来识别银行卡卡号信息, 本篇不再对如何调用接口相关数据做详细介绍, 可参考上一篇文章二: 需求 银行卡卡号的信息读取,可通过相册选择

孤途浪子 2465

【安卓学习之第三方库】 身份证、银行卡、营业执照OCR识别

█ 【安卓学习之第三方库】 二代身份证OCR识别 █ 相关文章: -   ● 【安卓学习之第三方库】库的使用2-jar类库的使用(以dom4j为例)和升级(以极光推送为例)  ● 【安卓学习之第三方库】 消息推送之极光推送  ● 【安卓学习之第三方库】 消息推送之阿里云推送   █ 读前说明: -   ● 本文通过学习别人写demo,学习一些课件,参考一些博客,’学习相关知识,如果涉及侵权请告知  ● 本文只简单罗列相关的代码实现过程  ● 涉及到的逻辑以及说明也只是简单介绍,主要当做笔记,了解过程而

任我飞的博客 1003

身份证识别系统(安卓)

前言本课题为基于Android平台的身份证识别应用程序开发。其目的是掌握Android开发技术和调用图像处理接口,实现一个功能完善、界面友好、操作简便的身份证识别应用程序。在整个项目的设计中要实现的任务有:调用阿里云OCR接口完成识别、调用相机、获取内部存储图片、数据提取、数据库操作、识别相关界面编写、我的页面编写、首页页面编写以及界面优化等。本项目最终实现了如下主要功能:拍照识别身份证信息、从相册选择照片识别身份证信息、显示身份证信息及头像、保存识别结果、查询识别结果等。

onlywishes的博客 4675

Android如何用阿里云的API进行身份证识别

准备工作:在libs下添加 alicloud-Android-apigateway-sdk-1.0.1.jar,commons-codec-1.10-1.jar 在build.gradle添加 compile'com.squareup.okhttp3:okhttp:3.4.1' 在onCreate,或者afterViews初始化API网关 private void in...

weixin_30869099的博客 318
上一篇: Express框架的使用教程
Summer_Chun
博客等级 码龄7年 3粉丝 0原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值