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

阿里云 OCR身份证识别Api 使用(二) 接上篇讲,开始上传工作。官网上写的是Java 的请求参数配置,其中关于上传身份证图片那里我刚开始是真没看懂,咨询客服以后,才知道往里键值对匹配的方式就行了。 这里是我的拼接方式,直接使用就行了。 发送请求是直接使用的官方提供的HttpUtil 那个类: 其中在onResponse()方法中,是请求没有抛出异常正常返回结果的回调,这里的getResultString() 阅读详情

准备工作:在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 initGatewaySdk() {
    // 初始化API网关
    ApiGatewayClient.init(getApplicationContext(), false);
}


调用拍照功能

private void getPhotoCard(){
    final String status = Environment.getExternalStorageState();
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
        requestPermissions(new String[]{Manifest.permission.CAMERA, Manifest.permission.WRITE_EXTERNAL_STORAGE}, CAMERA_REQUEST_CODE);
    }
    if (status.equals(Environment.MEDIA_MOUNTED)) {
        defaultPhotoAddress = PHOTO_DIR + "/" + getPhotoName();
        PreferenceUtils.modifyStringValueInPreferences(CardActivity.this, Preferences.IMAGE_3, defaultPhotoAddress);
        imageUri = Uri.fromFile(new File(defaultPhotoAddress));

        Intent intentPhoto = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);//action is capture
        intentPhoto.putExtra(MediaStore.EXTRA_OUTPUT, imageUri);
        startActivityForResult(intentPhoto, CAMERA_REQUEST_CODE);

    } else {
        Toast.makeText(CardActivity.this, "没有sd卡", Toast.LENGTH_SHORT).show();
    }
}
可以对照片进行裁剪

private void cropImageUri(Uri desUri, int outputX, int outputY, int requestCode){
    Intent intent = new Intent("com.android.camera.action.CROP");
    intent.setDataAndType(desUri, "image/*");
    intent.putExtra("crop", "true");
    intent.putExtra("aspectX", 5);
    intent.putExtra("aspectY", 3);
    intent.putExtra("outputX", outputX);
    intent.putExtra("outputY", outputY);
    intent.putExtra("scale", true);
    intent.putExtra(MediaStore.EXTRA_OUTPUT, desUri);
    intent.putExtra("return-data", false);
    intent.putExtra("outputFormat", Bitmap.CompressFormat.JPEG.toString());
    intent.putExtra("noFaceDetection", true);
    startActivityForResult(intent, requestCode);
}
用base64上传照片

private void trygetCardNum() {
    if (NetworkUtils.isConnectWithTip(this, "您未连接网络,无法获取数据")) {
        LoadingUtil.show(this);
        String imgBase64 = "";
       try {
            defaultPhotoAddress = PreferenceUtils.getStringValueInPreferences(this, Preferences.IMAGE_3);
            File file = new File(defaultPhotoAddress);
            byte[] content = new byte[(int) file.length()];
            FileInputStream finputstream = new FileInputStream(file);
            finputstream.read(content);
            finputstream.close();
            imgBase64 = new String(Base64.encodeBase64(content));
           // imgBase64 = Base64Img.Bitmap2StrByBase64(bitmap);
            if(imgBase64!=null||!imgBase64.equals("")){
                PreferenceUtils.modifyStringValueInPreferences(CardActivity.this, Preferences.IMAGE_3, null);
            }
        } catch (IOException e) {
            e.printStackTrace();
            return;
        }

        // 获取服务
        RpcService rpcService = ApiGatewayClient.getRpcService();
        final ApiRequest apiRequest = new ApiRequest();
        // 设置请求地址、Path及Method
        apiRequest.setAddress("https://dm-51.data.aliyun.com");
        apiRequest.setPath("/rest/160601/ocr/ocr_idcard.json");
        apiRequest.setMethod(HttpMethod.POST);
        // 按照文档设置二进制形式Body,支持设置Query参数、Header参数、Form形式Body
        apiRequest.setStringBody("{\"inputs\":[{\"image\":{\"dataType\":50,\"dataValue\":\""+imgBase64+"\"},\"configure\":{\"dataType\":50,\"dataValue\":\"{\\\"side\\\":\\\"face\\\"}\"}}]}");
        // 设置支持自签等形式的证书,如果服务端证书合法请勿设置该值,仅在开发测试或者非常规场景下设置。
        apiRequest.setTrustServerCertificate(true);
        // 设置超时
        apiRequest.setTimeout(10000);
        rpcService.call(apiRequest, new ApiResponseCallback() {
            @Override
            public void onSuccess(ApiResponse apiResponse) {
                // 处理apiResponse
                LoadingUtil.dismiss();
                String s = apiResponse.getStringBody();
                NumBean result = JSONObject.parseObject(s, NumBean.class);
                String dataValue = result.getOutputs().get(0).getOutputValue().getDataValue();
                DataValueBean dataValueBean = JSONObject.parseObject(dataValue, DataValueBean.class);
                Number = dataValueBean.getNum();
                name = dataValueBean.getName();
                address = dataValueBean.getAddress();
                birth = dataValueBean.getBirth();
                nationality = dataValueBean.getNationality();
                sex = dataValueBean.getSex();
                if(dataValueBean.getError_msg()==null){
                    runOnUiThread(new Runnable() {
                        public void run() {
                            if(Number == null||Number.equals("")||name == null||name.equals("")||address == null||address.equals("")||birth == null||birth.equals("")||sex == null||sex.equals("")){
           Toast.makeText(CardActivity.this, "扫描失败,请重试", Toast.LENGTH_LONG).show();
                            }else {
                                //扫描成功
                            }
                        }
                    });
                }else {
                    errString = dataValueBean.getError_msg();
                    runOnUiThread(new Runnable() {
                        public void run() {
                            Toast.makeText(CardActivity.this, "扫描失败,请重试", Toast.LENGTH_LONG).show();
                        }
                    });
                }
            }
            @Override
            public void onException(ApiInvokeException e) {
                // 处理异常
                LoadingUtil.dismiss();
                runOnUiThread(new Runnable() {
                    public void run() {
                        Toast.makeText(CardActivity.this, "扫描失败,请重试", Toast.LENGTH_LONG).show();
                    }
                });
            }
        });
    }
}
附:

public class NumBean implements Serializable{

    private List<OutputsBean> outputs;

    public List<OutputsBean> getOutputs() {
        return outputs;
    }

    public void setOutputs(List<OutputsBean> outputs) {
        this.outputs = outputs;
    }

    public static class OutputsBean {

        private String outputLabel;
        private OutputMultiBean outputMulti;
        private OutputValueBean outputValue;

        public String getOutputLabel() {
            return outputLabel;
        }

        public void setOutputLabel(String outputLabel) {
            this.outputLabel = outputLabel;
        }

        public OutputMultiBean getOutputMulti() {
            return outputMulti;
        }

        public void setOutputMulti(OutputMultiBean outputMulti) {
            this.outputMulti = outputMulti;
        }

        public OutputValueBean getOutputValue() {
            return outputValue;
        }

        public void setOutputValue(OutputValueBean outputValue) {
            this.outputValue = outputValue;
        }

        public static class OutputMultiBean {
        }

        public static class OutputValueBean {
      

            private int dataType;
            private String dataValue;

            public int getDataType() {
                return dataType;
            }

            public void setDataType(int dataType) {
                this.dataType = dataType;
            }

            public String getDataValue() {
                return dataValue;
            }

            public void setDataValue(String dataValue) {
                this.dataValue = dataValue;
            }
        }
    }
}
public class DataValueBean implements Serializable{

    private String address;
    private String birth;
    private String config_str;
    private String error_msg;
    private String name;
    private String nationality;
    private String num;
    private String request_id;
    private String sex;
    private boolean success;

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }

    public String getBirth() {
        return birth;
    }

    public void setBirth(String birth) {
        this.birth = birth;
    }

    public String getConfig_str() {
        return config_str;
    }

    public void setConfig_str(String config_str) {
        this.config_str = config_str;
    }

    public String getError_msg() {
        return error_msg;
    }

    public void setError_msg(String error_msg) {
        this.error_msg = error_msg;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getNationality() {
        return nationality;
    }

    public void setNationality(String nationality) {
        this.nationality = nationality;
    }

    public String getNum() {
        return num;
    }

    public void setNum(String num) {
        this.num = num;
    }

    public String getRequest_id() {
        return request_id;
    }

    public void setRequest_id(String request_id) {
        this.request_id = request_id;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    public boolean isSuccess() {
        return success;
    }

    public void setSuccess(boolean success) {
        this.success = success;
    }
}

在AndroidManifest.xml下添加

<meta-data android:name="com.alibaba.apigateway.appKey" android:value="" />
<meta-data android:name="com.alibaba.apigateway.appSecret" android:value="" />

Python调用阿里云OCR API实战:从通用识别到表格与身份证结构化提取 OCR(光学字符识别)技术通过计算机视觉与深度学习算法,将图像中的文字信息转化为可编辑、可搜索的文本数据,其核心原理在于对图像进行特征提取、分割与序列识别。这项技术极大地提升了数据录入与处理的自动化水平,在文档数字化、票据报销、身份核验等场景中具有重要价值。本文聚焦于阿里云OCR API的工程实践,详细解析了如何通过Python SDK进行通用文字识别,并深入探讨了针对身份证、表格等特定场景的专用接口调用与参数调优。文中融入了AccessKey安全管理和图片预处理等关键热词,为开发者集成自动化信息提取能力提 阅读详情

相关推荐

阿里印刷文字识别

关于阿里身份证识别接口、驾驶证接口、行驶证接口的调用。还有该部分直接是纯代码。下载可自己写个demo调用。查看效果。

java-调用阿里身份证验证接口

java-调用阿里身份证验证接口

qq_52998673的博客 823

Android代码-室内定位导航SDK

sdk开发者文档(Android) SDK简介说明 更新日志 更新说明 2017-01-10:发布2.3.0,一些api的更新,优化,删除了导航的naviOption类。 优化地图缓存,增加围栏信息(为了让围栏信息成功加载,加载定位的代码,需要在加载地图之后) 优化代码逻辑,修复bug 2017-01-10之前:初始化demo 更新时间表 时间 版本 备注 2017-01-10 2.3.0 SDK javadoc [] 官网 http://indoorun.com/ 开发环境 本sdk文档是基于Android Studio开发而编写的,因此暂未提供jar包方式依赖。 Idr类 调用SDK所有的入口包括但不限于SDK初始化、加载地图、定位、导航,都是通过Idr类调用的。 除了Idr.initSDK(Context)初始化SDK的方法和Idr.getRegionList()获取用户下面的region列表等少数方法是静态方法外,其他的方法都是实例方法。 调用实例方法均需要获取Idr对象 Idr idr = Idr.with

阿里云ocr身份证识别接口调用

6、上传身份证照片,点击发起调用,调用结果显示成功!网上测试完成,下面复制到本地工程!界面点击搜索ocr识别,选择文字识别,开通服务,已登录阿里云账号。9、查询accessKeyId和accessKeySecret码。2、选择个人证件识别,身份证识别(每个月赠送200次体验)11、使用postman调试。点击,进入身份证识别界面。7、引入依赖导本地工程。4、下拉到最后,选择。10、替换代码中的值。

The best are water的博客 5245

android-25 Android SDK platform25 Android API25

Android SDK platforms 25(即Android7.1),如果Android studio提示缺少platform25,即可下载此文件。解压到SDK安装目录的platforms文件夹下。其他版本请看我上传的其他资源。

C#(VS2017)阿里云云市场身份证识别demo

C# WINFORM 调用阿里云云市场提供的提口,识别身份证正、反面的内容。需要自行到阿里云中申请APPCODE,代码中有申请的网址。

阿里云银行卡验证四要素

阿里云银行卡验证 java: public static void main(String[] args) { String host = "https://4bankcard.market.alicloudapi.com"; String path = "/getapilist/"; String method = "POST"; String appcode = "你自己的AppCode"; Map<String, String> head

qq_44835285的博客 1274

Java使用阿里云接口进行身份证实名认证的示例实现

主要介绍了使用阿里云接口进行身份证实名认证的示例实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

调用阿里云身份证识别服务识别本地图片,很详细,附工具类

这是对应的依赖版本号查询地址,新版和旧版的依赖都可以在这里查接入步骤中的依赖我只添加了这个,json处理的依赖包项目本身就有,看自己情况,没有缺少对应的依赖就不需要添加了。这是阿里云的示例地址但是在调用过程发现引入依赖后与示例有点不一样!!! 我并没有看到com.aliyun:ocr:0.0.3这个依赖,以为是版本的问题,但看了一下也没有0.0.3这个版本这是阿里云示例地址中的截图 这是我引入的阿里云依赖后,找到最像示例中的依赖包 既然和示例中的jar包有些出入,就先看看识别身份证的相关类吧,阿里云示例中提

studio_1的博客 5243

Ubuntu 24.04.3 LTS 安装 OpenClaw 图文版

OpenClow安装指南

qq_17204557的博客 2548

十大排序算法详解(一)冒泡排序、选择排序、插入排序、快速排序、希尔排序

冒泡排序、选择排序、插入排序、快速排序、希尔排序

HK的博客 18万+

实名认证(java版本)

代码开源,开箱即用

dori_ya的博客 1704

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

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

孤途浪子 9778

高德地图轨迹回放,消息框内展示车辆速度且随车辆移动-升级支持调整速度、回放进度

使用高德地图回放车辆GPS轨迹,并添加速度和回放进度条,并支持调整,效果如下: 新增的功能: 在基础版本,有如下升级 速度条:可以拖动以调整车辆回放速度,且从当前位置继续回放 进度条:进度条表示车辆已回放的百分比,且拖动进度条车辆定位到相应的位置并继续回放 ###思路分析 高德和marker回放相关的API //主要靠他回放 moveAlong(path:Array,speed:Number,f:Function,circlable:Boolean) //点移动到另一个位置,移动进度条车辆跟随移动

博客 1万+

CATIA_DELMIA_V5R2019安装包下载及安装教程破解

CATIA_V5R2019/DELMIA_V5R2019安装包下载及安装教程破解

一只机械工装熊的博客 8324

调用阿里云API实现身份证文字识别

姚元帅,男,西安工程大学电子信息学院,2024级研究生研究方向:机器视觉与人工智能电子邮件:3183969029@qq.com乔幸荣,女,西安工程大学电子信息学院,2024级研究生,张宏伟人工智能课题组研究方向:模式识别与智能系统电子邮件:2029518801@qq.com1)早期阶段(20世纪50-70年代)这一阶段的API主要用于操作系统内部功能接口,供程序开发人员使用,功能简单,是软件开发的基础工具,为后续发展奠定基础。2)分布式时代(20世纪80年代-世纪末)

ZHW-鲜橙大AI课题组的博客 1554

飞书多维表格+影刀RPA:我如何用3个指令搞定每周的销售数据自动汇总(附完整配置截图)

本文详细介绍了如何利用飞书多维表格和影刀RPA实现销售数据的自动化汇总,通过三个核心指令(建立链接、列出记录、更新记录)简化繁琐的手工操作。文章包含完整的配置截图和实战指南,帮助用户快速部署自动化流程,提升工作效率。

weixin_29273849的博客 284

Java身份证OCR识别 - 阿里云API【识别准确率超过99%】

传入身份证照片或url地址,支持正反面,识别照片文字信息并返回姓名、身份证号、性别、民族、出生年月日、地址、签发机关及有效期等8个字段,支持jpg、jpeg、bmp、png等多种格式,提供url和base64两种入参选择,识别准确率超过99%,更快、更精准

weixin_43652507的博客 881

借助Gemini 3 Pro高效解决课题申报中的五大核心痛点,亲测有效经验分享

之前给大家分享过关于AI辅助课题申报的相关的内容,涵盖了申报书部分撰写技巧,但没针对性拆解各位同仁在实际申报时遇到的卡壳的地方。比如选题范围拿捏不准,定的太大,根本没法落地完成;定的太小,研究价值则体现不了;写综述时,容易单纯罗列文献,缺乏批判性视角,没办法自然融入自己的判断,找不到研究缺口;研究方法部分,可能担心方法设计不够严谨,别人难以复现.....针对这些申报中的高频痛点,接下来七哥会从五个核心要点出发,借助Gemini 3 Pro高效解决这些痛点。

智能AI让学术科研更容易 700

YOLOv8改进策略【Neck】| BiFPN:双向特征金字塔网络-跨尺度连接和加权特征融合

可扩展的高效物体检测BiFPN(加权双向特征金字塔网络)

Limiiiing的博客 1080

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

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

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

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

qq_34157567的博客 2万+

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

通过阿里云API 身份证图片或拍身份证 读取身份证正反面信息

参看文:阿里的资料 https://market.aliyun.com/products/57124001/cmapi010401.html?spm=5176.8243888.554823.2.wXf26h#sku=yuncode440100000 执行 AliOcrIdcard.java就可以了! [code="java"] package com.zct.yfq.clien...

3613

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

阿里云--印刷文字识别-身份证识别/OCR文字识别--java代码实现

阿里云--印刷文字识别-身份证识别/OCR文字识别--java代码实现

MR.骑士道 4062

php身份证图片识别认证,阿里云身份证OCR文字识别

阿里云身份证识别(身份证OCR识别-身份证正反面识别-身份证文字识别)。支持正反面识别、多民族文字识别、生僻字识别,具备PS篡改检、完整度、复印件、翻拍检测,图像智能旋转、畸变矫正、分辨率增强、人像检测等高精度识别能力。识别内容包括姓名、性别、出生日期、证件号码、住址、有效期限。支持base64和公网可访问的地址,图片格式支持:PNG、JPG、JPEG、BMP、GIF、TIFF、WebP。

han_cui的博客 914
下一篇: 利用融云做异地登录提醒
ayrascal
博客等级 码龄10年 8粉丝 27原创
评论 18
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值