百度ORC识别身份证,JXL导出信息到excel流水作业。

首先到百度搜索图片识别,orc技术,进入官网平台,通过百度账号,获取orc资质和应用使用的key

在来下载jxl.jar插件来操作excel。

效果图

            

拍摄                                                 获取信息,

最后点击插入表格后进行插入操作,

前提:本工程需要用到百度原生附属工程,不会的可以查看orc_ui包的使用说明

1.初始化key:百度有相关介绍这里不做解释。按百度的文档来解决问题

/**
     * 用明文ak,sk初始化
     */
    private void initAccessTokenWithAkSk() {
        OCR.getInstance(this).initAccessTokenWithAkSk(new OnResultListener<AccessToken>() {
                                                          @Override
                                                          public void onResult(AccessToken result) {
                                                              String token = result.getAccessToken();
                                                              LT.lg("token = " + token);
                                                              hasGotToken = true;
                                                          }

                                                          @Override
                                                          public void onError(OCRError error) {
                                                              error.printStackTrace();
                                                              alertText("AK,SK方式获取token失败", error.getMessage());
                                                          }
                                                      }, getApplicationContext(), "key1",
                "key2");
    }

 

2.调取摄像头(需要用到摄像头的功能):

//在监听中 ,启动用带返回activity模式  
findViewById(R.id.gallery_button_front).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (checkGalleryPermission()) {
                    Intent intent = new Intent(Intent.ACTION_PICK);
                    intent.setType("image/*");
                    startActivityForResult(intent, REQUEST_CODE_PICK_IMAGE_FRONT);
                }
            }
        });

//在返回中处理数据
 @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (requestCode == REQUEST_CODE_PICK_IMAGE_FRONT && resultCode == Activity.RESULT_OK) {
            Uri uri = data.getData();
            picPath = getRealPathFromURI(uri);
            recIDCard(IDCardParams.ID_CARD_SIDE_FRONT, picPath);
        }

        if (requestCode == REQUEST_CODE_PICK_IMAGE_BACK && resultCode == Activity.RESULT_OK) {
            Uri uri = data.getData();
            picPath = getRealPathFromURI(uri);
            recIDCard(IDCardParams.ID_CARD_SIDE_BACK, picPath);
        }

        if (requestCode == REQUEST_CODE_CAMERA && resultCode == Activity.RESULT_OK) {
            if (data != null) {
                String contentType = data.getStringExtra(CameraActivity.KEY_CONTENT_TYPE);
                String filePath = FileUtil.getSaveFile(getApplicationContext()).getAbsolutePath();
                if (!TextUtils.isEmpty(contentType)) {
                    if (CameraActivity.CONTENT_TYPE_ID_CARD_FRONT.equals(contentType)) {
                        recIDCard(IDCardParams.ID_CARD_SIDE_FRONT, filePath);
                    } else if (CameraActivity.CONTENT_TYPE_ID_CARD_BACK.equals(contentType)) {
                        recIDCard(IDCardParams.ID_CARD_SIDE_BACK, filePath);
                    }
                }
            }
        }
    }
//处理数据的方法
private void recIDCard(String idCardSide, final String filePath) {
        IDCardParams param = new IDCardParams();
        param.setImageFile(new File(filePath));
        // 设置身份证正反面
        param.setIdCardSide(idCardSide);
        // 设置方向检测
        param.setDetectDirection(true);
        // 设置图像参数压缩质量0-100, 越大图像质量越好但是请求时间越长。 不设置则默认值为20
        param.setImageQuality(20);

        OCR.getInstance(this).recognizeIDCard(param, new OnResultListener<IDCardResult>() {
            @Override
            public void onResult(IDCardResult result) {
                if (result != null) {//TODO 这里返回结果开始处理
                    //1.解析后,
                    ParseJson pj = new ParseJson();

                    LT.lg("filePath = " + filePath);
                    LT.lg(result.toString());
                    json = pj.parse(ParseJson.ID_CARD_FRONT, result.toString());//转换成需要的字段

                    datas = pj.parseIdMessage(json);
                    //2.显示到界面中
                    for (int i = 0; i < llId.getChildCount(); i++) {
                        TextView v = (TextView) llId.getChildAt(i);
                        v.setText(datas[i]);
                    }
                    //显示图片在界面上
                    Bitmap bm = BitmapFactory.decodeFile(filePath);
                    ivIdPic.setImageBitmap(bm);
                    //将图片文件复制到对应目录中
                    FileUtil.copyFile(filePath, Consts.getPicCatalog(null));


                }
            }

            @Override
            public void onError(OCRError error) {
                alertText("返回错误", ParseJson.ID_CARD_FRONT, error.getMessage(), null);
            }
        });
    }
//确保读取权限的打开
private boolean checkGalleryPermission() {
        int ret = ActivityCompat.checkSelfPermission(IDCardActivity.this, Manifest.permission
                .READ_EXTERNAL_STORAGE);
        if (ret != PackageManager.PERMISSION_GRANTED) {
            ActivityCompat.requestPermissions(IDCardActivity.this,
                    new String[]{Manifest.permission.READ_EXTERNAL_STORAGE},
                    1000);
            return false;
        }
        return true;
    }

3.点击插入,开始操作excle

//插入数据到excle的点击监听
 findViewById(R.id.bt_id_insert).setOnClickListener(new View.OnClickListener() {//TODO 插入数据库操作
            @Override
            public void onClick(View v) {
               
                try {
                    ExcelUtil eu = new ExcelUtil();
                    if (datas == null||datas.length<1) {
                        LT.toast(IDCardActivity.this, "获取数据失败");
                      
                    } else {
                        String filePath = Consts.getIdCatalog();//获取文件的路径
                        eu.insertIdData(datas, ParseJson.ID_CARD_FRONT, filePath);
                        LT.toast(IDCardActivity.this, "插入成功");
                        Consts.PersonCount=0;//添加新的权利人信息,或者户主的时候,重置人数!
                      h();
                    }
                } catch (IOException e) {
                    LT.lg("插入失败。IOException : " + e.toString());
                    e.printStackTrace();
                } catch (WriteException e) {
                    LT.lg("插入失败。IOException : " + e.toString());
                    e.printStackTrace();
                } catch (BiffException e) {
                    LT.lg("插入失败。IOException : " + e.toString());
                    e.printStackTrace();
                }
            }
        });

 

4.ExcelUtil excel操作方法

public class ExcelUtil {

    private WritableWorkbook book;

    private String tableName = "Sheet1";

    public ExcelUtil() {

    }
  public boolean insertIdData(String[] data, String type, String path) throws IOException, WriteException, BiffException {//将数据插入到
      
            File file = new File(path);
            LT.lg("保存路径:filePath = " + path);
            if (!file.exists()) {
                writeIdDataExcel(file, data);
            } else {
                updataExcel(path, data);
            }

            return true;
      
    }
//直接写入
 private void writeIdDataExcel(File file, String[] ss) throws WriteException, IOException {
        FileUtil.CreatNewFile(file);
        WritableWorkbook book = Workbook.createWorkbook(file);
        WritableSheet sheet = book.createSheet(tableName, 0);
        //TODO 读取文件中的数据条目数量,设置item
        String[] cc = new String[]{"宗地代码", "权利人名称", "权利人类型", "证件种类", "证件号", "通讯地址"};

        for (int i = 0; i < cc.length; i++) {
            //字段
            Label label = new Label(i, 0, cc[i]);
            sheet.addCell(label);
           //数据
                LT.lg(i + "个数据为:" + ss[i]);
                Label   label2= new Label(i + 1, 1, ss[i]);
                sheet.addCell(label2);

        }
        book.write();
        book.close();
    }
/**更新操作
     * @param path 文件绝对路径
     * @param cc   写入数据
     * @throws IOException
     * @throws WriteException
     * @throws BiffException
     */
    private void updataExcel(String path, String[] cc) throws IOException, WriteException, BiffException {//在第r行插入一条数据
        // 在已写入的表中添加内容

        File file = new File(path);
        path = file.getAbsolutePath().replace(".xls", "(1).xls");
        File file2 = new File(path);
        FileUtil.CreatNewFile(file2);
        // 打开文件
        Workbook wb = Workbook.getWorkbook(file);
        // 打开一个文本的副本,并指定数据写回到源文件
        WritableWorkbook book = Workbook.createWorkbook(file2, wb);
        WritableSheet sheet = book.getSheet(0);//默认在excel中的第一张表中!
        int r = sheet.getRows();//获取已写入的行数
       // Consts.PersonCount=r+1;
        //正式写入数据
        Label label;
        for (int i = 0; i < cc.length; i++) {
            label = new Label(i, r, cc[i]);
            sheet.addCell(label);
        }

        System.out.println("执行添加数据成功");
        book.write();
        book.close();
        // 写回数据
        Workbook wb2 = Workbook.getWorkbook(file2);
        WritableWorkbook book2 = Workbook.createWorkbook(file, wb2);
        book2.write();
        book2.close();
        //删除副本
        file2.delete();
        System.out.println("删除成功");

    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

WindFutrue

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值