Android OCR——身份证识别的功能实现攻略
身份证识别是 OCR(Optical Character Recognition,光学字符识别)技术的一种应用。本篇攻略将介绍如何在 Android 应用中使用 OCR 技术识别身份证信息。
准备工作
- OCR 引擎。国内常用的 OCR 引擎包括百度 OCR、腾讯 OCR、阿里 OCR。本文将以百度 OCR 为例。
- 身份证正反面照片。使用本地图片或者相机拍摄的照片。
代码实现
引入百度 OCR SDK
将 OCR SDK 的 aar 文件拷贝到 app/libs 目录下,并在 app/build.gradle 文件中添加以下配置:
repositories {
flatDir {
dirs 'libs'
}
}
dependencies {
implementation(name: 'aip-android-sdk-1.4.4', ext: 'aar')
implementation 'com.googlecode.tesseract-android:tesseract-android:3.03'
implementation 'com.android.support:multidex:1.0.3'
}
身份证识别功能实现
- 首先,我们需要提供一个用于选择图片的 UI。可以使用系统提供的 Gallery 或者自己实现。这里以系统 Gallery 为例。在 AndroidManifest.xml 文件中添加以下权限:
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
- 在选择图片后,我们需要将其转换为 Bitmap 对象。可以使用以下代码:
private Bitmap getBitmapFromGallery(Uri uri) throws FileNotFoundException {
InputStream inputStream = getContentResolver().openInputStream(uri);
Bitmap bitmap = BitmapFactory.decodeStream(inputStream);
return bitmap;
}
- 然后,我们需要调用 OCR 引擎来识别身份证信息。以下代码实现了该功能:
private void recognizeIdCard(Bitmap bitmap, boolean isFrontSide) {
OCR ocr = new OCR(getApplicationContext());
ocr.initAccessTokenWithAkSk(new OnResultListener<AccessToken>() {
@Override
public void onResult(AccessToken result) {
}
@Override
public void onError(OCRError error) {
}
}, getApplicationContext(), "yourAppKey", "yourAppSecret");
IDCardParams param = new IDCardParams();
param.setImageFile(new File("/storage/emulated/0/Download/test.jpg"));
param.setIdCardSide(isFrontSide ? "front" : "back");
ocr.recognizeIDCard(param, new OnResultListener<IDCardResult>() {
@Override
public void onResult(IDCardResult result) {
Log.i(TAG, result.toString());
}
@Override
public void onError(OCRError error) {
}
});
}
示例说明
示例1:通过拍照选择图片进行识别
private void takePhoto() {
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(intent, REQUEST_CODE_CAMERA);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == REQUEST_CODE_CAMERA && resultCode == RESULT_OK) {
Bitmap bitmap = (Bitmap) data.getExtras().get("data");
recognizeIdCard(bitmap, true);
}
}
示例2:从相册选择图片进行识别
private void choosePhoto() {
Intent intent = new Intent(Intent.ACTION_PICK);
intent.setDataAndType(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, "image/*");
startActivityForResult(intent, REQUEST_CODE_GALLERY);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == REQUEST_CODE_GALLERY && resultCode == RESULT_OK) {
Uri uri = data.getData();
try {
Bitmap bitmap = getBitmapFromGallery(uri);
recognizeIdCard(bitmap, true);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
}
以上是 Android OCR——身份证识别的功能实现攻略的完整内容。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:android ocr——身份证识别的功能实现 - Python技术站