博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android如何用阿里云的API进行身份证识别
阅读量:5319 次
发布时间:2019-06-14

本文共 9117 字,大约阅读时间需要 30 分钟。

准备工作:在libs下添加 alicloud--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
outputs; public List
getOutputs() { return outputs; } public void setOutputs(List
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下添加 Appkey
 

 

转载于:https://www.cnblogs.com/ayrascal/p/6497437.html

你可能感兴趣的文章
MySQL学习笔记(四)
查看>>
【Crash Course Psychology】2. Research & Experimentation笔记
查看>>
两数和
查看>>
移动设备和SharePoint 2013 - 第3部分:推送通知
查看>>
SOPC Builder中SystemID
查看>>
MySQL数据库备份工具mysqldump的使用(转)
查看>>
NTP服务器配置
查看>>
【转】OO无双的blocking/non-blocking执行时刻
查看>>
关于 linux 的 limit 的设置
查看>>
HDU(4528),BFS,2013腾讯编程马拉松初赛第五场(3月25日)
查看>>
vim中文帮助教程
查看>>
MySQL基础3
查看>>
RxJS & Angular
查看>>
面向对象(多异常的声明与处理)
查看>>
MTK笔记
查看>>
ERROR: duplicate key value violates unique constraint "xxx"
查看>>
激活office 365 的启动文件
查看>>
无法根据中文查找
查看>>
[简讯]phpMyAdmin项目已迁移至GitHub
查看>>
转载 python多重继承C3算法
查看>>