IdCardOCR

身份证正反面识别,身份证扫描识别,二代身份证OCR识别,OCR极速识别身份证所有信息正反面均可。离线无需联网,极速秒扫。

Stars
1K

(),

Application

OcrDecodeFactory.initOCR(context);

OcrDecodeFactory.newBuilder(context)
  .requestCode(REQUEST_CODE)
  .ocrType(binding.type.getSelectedItemPosition())    //0, 1, 2
  .broadcastAction(broadcastAction)                   //
  .startOcrActivity();                                //

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if(requestCode == REQUEST_CODE && resultCode == RESULT_OK){
        String result = data.getStringExtra("OCRResult");
        try {
            JSONObject jo = new JSONObject(result);
            StringBuffer sb = new StringBuffer();
            sb.append(String.format(" = %s\n", jo.opt("type")));
            sb.append(String.format(" = %s\n", jo.opt("name")));
            sb.append(String.format(" = %s\n", jo.opt("sex")));
            sb.append(String.format(" = %s\n", jo.opt("folk")));
            sb.append(String.format(" = %s\n", jo.opt("birt")));
            sb.append(String.format(" = %s\n", jo.opt("num")));
            sb.append(String.format(" = %s\n", jo.opt("addr")));
            sb.append(String.format(" = %s\n", jo.opt("issue")));
            sb.append(String.format(" = %s\n", jo.opt("valid")));
            sb.append(String.format(" = %s\n", jo.opt("imgPath")));
            sb.append(String.format(" = %s\n", jo.opt("headPath")));
            sb.append("\n\n");
            sb.append(String.format(" = %s\n", jo.opt("nation")));
            sb.append(String.format(" = %s\n", jo.opt("startTime")));
            sb.append(String.format(" = %s\n", jo.opt("drivingType")));
            sb.append(String.format(" = %s\n", jo.opt("registerDate")));
            binding.textview.setText(sb.toString());
        } catch (JSONException e) {
            e.printStackTrace();
        }
    }
}


//
private class ResultReceiver extends BroadcastReceiver {
  @Override
  public void onReceive(Context context, Intent intent) {
    if(broadcastAction.equals(intent.getAction())){
      String result = intent.getStringExtra("OCRResult");
      Toast.makeText(context, ": " + result, Toast.LENGTH_LONG).show();
    }
  }
}

aar

aar libs, build.gradle:

android{
    repositories {
        flatDir {
            dirs 'libs'
        }
    }

    defaultConfig {
        manifestPlaceholders = [
            //debug.keystore, .
            //**: KEYapplicationId **
            "OCR_API_KEY" : "26f1f6a0d4d7cb0dd0e9b28f4cedef83"    
        ]

        ndk {
            //abiFilters 'armeabi', 'x86', 'armeabi-v7a', 'arm64-v8a'

            //armeabi x86 , Android11 ABI
            abiFilters 'armeabi-v7a', 'arm64-v8a'
        }
    }
}

dependencies {
    implementation fileTree(include: ['*.jar'], dir: 'libs')
    implementation (name: 'library-ocr-2.0-SNAPSHOT', ext: 'aar')
    //Gradle7 : implementation(files("./libs/library-ocr-2.0-SNAPSHOT.aar"))
}

,,API.

//1. Application
OcrDecodeFactory.initOCR(context);
//2. 
OcrDecode ocrDecode = OcrDecodeFactory.newBuilder(context)
  .saveImage(saveImage)       //, , 
  .ocrType(ocrType)           //0, 1, 2
  .margin(getResources().getDimension(R.dimen.public_40_dp)) //, 48dp, 20dp
  .build();
/* 
	3. 
	3.1 , onSuccess, json
	3.2 decode , , , SimpleCameraActivity
*/
ocrDecode.decode(byte[] jpeg, callback);
ocrDecode.decode(String path, callback);

//, UI
private OcrDecodeCallback callback = new OcrDecodeCallback() {
  @Override
  public void onSuccess(final String json) {

  }

  @Override
  public void onFail(final int cause) {
		/*
			LibraryInitOCR.DECODE_FAIL 
			LibraryInitOCR.DECODE_UNAUTHORIZED
			LibraryInitOCR.DECODE_AUTO_FOCUS
		*/
  }
};
//4.Activity onDestroy 
ocrDecode.close();

 app/proguard-rules.pro

2.0
1. , , 
2. Android 12 exported 
3. 

QQ:2227421573

so armeabi-v7a arm64-v8a 
(image/pay.png) .
applicationIdsha1KEY.
sha1 : 
:
keytool -list  -v -keystore .keystore -storepass 

, , , , ..., aar.

AAR ,

()

, .

Related Projects