百度ORC识别身份证,JXL导出信息到excel流水作业。
生活随笔
收集整理的這篇文章主要介紹了
百度ORC识别身份证,JXL导出信息到excel流水作业。
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
首先到百度搜索圖片識別,orc技術(shù),進(jìn)入官網(wǎng)平臺,通過百度賬號,獲取orc資質(zhì)和應(yīng)用使用的key
在來下載jxl.jar插件來操作excel。
效果圖
????????????
拍攝???????????????????????????????????????????????? 獲取信息,
最后點(diǎn)擊插入表格后進(jìn)行插入操作,
前提:本工程需要用到百度原生附屬工程,不會的可以查看orc_ui包的使用說明
1.初始化key:百度有相關(guān)介紹這里不做解釋。按百度的文檔來解決問題
/*** 用明文ak,sk初始化*/private void initAccessTokenWithAkSk() {OCR.getInstance(this).initAccessTokenWithAkSk(new OnResultListener<AccessToken>() {@Overridepublic void onResult(AccessToken result) {String token = result.getAccessToken();LT.lg("token = " + token);hasGotToken = true;}@Overridepublic void onError(OCRError error) {error.printStackTrace();alertText("AK,SK方式獲取token失敗", error.getMessage());}}, getApplicationContext(), "key1","key2");}?
2.調(diào)取攝像頭(需要用到攝像頭的功能):
//在監(jiān)聽中 ,啟動用帶返回activity模式 findViewById(R.id.gallery_button_front).setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {if (checkGalleryPermission()) {Intent intent = new Intent(Intent.ACTION_PICK);intent.setType("image/*");startActivityForResult(intent, REQUEST_CODE_PICK_IMAGE_FRONT);}}});//在返回中處理數(shù)據(jù)@Overrideprotected 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);}}}}} //處理數(shù)據(jù)的方法 private void recIDCard(String idCardSide, final String filePath) {IDCardParams param = new IDCardParams();param.setImageFile(new File(filePath));// 設(shè)置身份證正反面param.setIdCardSide(idCardSide);// 設(shè)置方向檢測param.setDetectDirection(true);// 設(shè)置圖像參數(shù)壓縮質(zhì)量0-100, 越大圖像質(zhì)量越好但是請求時間越長。 不設(shè)置則默認(rèn)值為20param.setImageQuality(20);OCR.getInstance(this).recognizeIDCard(param, new OnResultListener<IDCardResult>() {@Overridepublic void onResult(IDCardResult result) {if (result != null) {//TODO 這里返回結(jié)果開始處理//1.解析后,ParseJson pj = new ParseJson();LT.lg("filePath = " + filePath);LT.lg(result.toString());json = pj.parse(ParseJson.ID_CARD_FRONT, result.toString());//轉(zhuǎn)換成需要的字段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);//將圖片文件復(fù)制到對應(yīng)目錄中FileUtil.copyFile(filePath, Consts.getPicCatalog(null));}}@Overridepublic void onError(OCRError error) {alertText("返回錯誤", ParseJson.ID_CARD_FRONT, error.getMessage(), null);}});} //確保讀取權(quán)限的打開 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.點(diǎn)擊插入,開始操作excle
//插入數(shù)據(jù)到excle的點(diǎn)擊監(jiān)聽findViewById(R.id.bt_id_insert).setOnClickListener(new View.OnClickListener() {//TODO 插入數(shù)據(jù)庫操作@Overridepublic void onClick(View v) {try {ExcelUtil eu = new ExcelUtil();if (datas == null||datas.length<1) {LT.toast(IDCardActivity.this, "獲取數(shù)據(jù)失敗");} else {String filePath = Consts.getIdCatalog();//獲取文件的路徑eu.insertIdData(datas, ParseJson.ID_CARD_FRONT, filePath);LT.toast(IDCardActivity.this, "插入成功");Consts.PersonCount=0;//添加新的權(quán)利人信息,或者戶主的時候,重置人數(shù)!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 {//將數(shù)據(jù)插入到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 讀取文件中的數(shù)據(jù)條目數(shù)量,設(shè)置itemString[] cc = new String[]{"宗地代碼", "權(quán)利人名稱", "權(quán)利人類型", "證件種類", "證件號", "通訊地址"};for (int i = 0; i < cc.length; i++) {//字段Label label = new Label(i, 0, cc[i]);sheet.addCell(label);//數(shù)據(jù)LT.lg(i + "個數(shù)據(jù)為:" + ss[i]);Label label2= new Label(i + 1, 1, ss[i]);sheet.addCell(label2);}book.write();book.close();} /**更新操作* @param path 文件絕對路徑* @param cc 寫入數(shù)據(jù)* @throws IOException* @throws WriteException* @throws BiffException*/private void updataExcel(String path, String[] cc) throws IOException, WriteException, BiffException {//在第r行插入一條數(shù)據(jù)// 在已寫入的表中添加內(nèi)容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);// 打開一個文本的副本,并指定數(shù)據(jù)寫回到源文件WritableWorkbook book = Workbook.createWorkbook(file2, wb);WritableSheet sheet = book.getSheet(0);//默認(rèn)在excel中的第一張表中!int r = sheet.getRows();//獲取已寫入的行數(shù)// Consts.PersonCount=r+1;//正式寫入數(shù)據(jù)Label label;for (int i = 0; i < cc.length; i++) {label = new Label(i, r, cc[i]);sheet.addCell(label);}System.out.println("執(zhí)行添加數(shù)據(jù)成功");book.write();book.close();// 寫回數(shù)據(jù)Workbook wb2 = Workbook.getWorkbook(file2);WritableWorkbook book2 = Workbook.createWorkbook(file, wb2);book2.write();book2.close();//刪除副本file2.delete();System.out.println("刪除成功");} }?
總結(jié)
以上是生活随笔為你收集整理的百度ORC识别身份证,JXL导出信息到excel流水作业。的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: URLOS安装、升级、卸载
- 下一篇: php frameset不显示,php加