Android 身份证拍照 识别 文字识别 (百度)
Posted 峰子_it
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android 身份证拍照 识别 文字识别 (百度)相关的知识,希望对你有一定的参考价值。
android 身份证拍照 识别 文字识别 (百度)
QQ群:548629089
百度智能云文档
身份证识别DEMO
1. 为您自己的工程添加必要的权限
如果您在自己的工程中集成SDK,请确保已经在工程AndroidManifest.xml文件中添加如下权限:
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.CAMERA"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
名称 | 用途 |
---|---|
INTERNET | 应用联网,发送请求数据至服务器,获得识别结果 |
CAMERA | 调用相机进行拍照(仅UI部分需要) |
WRITE_EXTERNAL_STORAGE | 图片裁剪临时存储 |
READ_EXTERNAL_STORAGE | 图片裁剪临时存储 |
3. 开发包添加
- 前往 SDK下载页面下载Android SDK压缩包。
- (必须)将下载包libs目录中的ocr-sdk.jar文件拷贝到工程libs目录中,并加入工程依赖。
- (必须)将libs目录下armeabi,arm64-v8a,armeabi-v7a,x86文件夹按需添加到android studio工程src/main/jniLibs目录中, eclipse用户默认为libs目录。
- (可选)如果需要使用UI模块,请在Android studio中以模块方式导入下载包中的ocr-ui文件夹。
4. Proguard配置
如果您在自己的工程中集成SDK,请在Proguard配置文件中增加, 防止release发布时打包报错:
-keep class com.baidu.ocr.sdk.***;
-dontwarn com.baidu.ocr.**
5. 初始化
Api Key和 Secret Key在百度智能云上面注册的时候会有
OCR.getInstance(context).initAccessTokenWithAkSk(new OnResultListener<AccessToken>()
@Override
public void onResult(AccessToken result)
// 调用成功,返回AccessToken对象
String token = result.getAccessToken();
@Override
public void onError(OCRError error)
// 调用失败,返回OCRError子类SDKError对象
, getApplicationContext(), "您的应用AK", "您的应用SK");
6. 调起拍照 或者 照片
Intent intent = new Intent(RealNameAuthenticationActivity.this, CameraActivity.class);
intent.putExtra(CameraActivity.KEY_OUTPUT_FILE_PATH,
DataFileUtil.getSaveFile(getApplication()).getAbsolutePath());
intent.putExtra(CameraActivity.KEY_CONTENT_TYPE, CameraActivity.CONTENT_TYPE_ID_CARD_FRONT);
startActivityForResult(intent, REQUEST_CODE_CAMERA);
7. 获取拿到的照片
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data)
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == REQUEST_CODE_CAMERA && resultCode == Activity.RESULT_OK)
if (data != null)
String contentType = data.getStringExtra(CameraActivity.KEY_CONTENT_TYPE);
String filePath = DataFileUtil.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);
8. 解析身份证图片
/**
* 解析身份证图片信息
*
* @param idCardSide 身份证正反面
* @param filePath 图片路径
*/
private void recIDCard(final String idCardSide, String filePath)
Log.i("charge ID card", idCardSide);
IDCardParams param = new IDCardParams();
param.setImageFile(new File(filePath));
// 设置身份证正反面
param.setIdCardSide(idCardSide);
// 设置方向检测
param.setDetectDirection(true);
// 设置图像参数压缩质量0-100, 越大图像质量越好但是请求时间越长。 不设置则默认值为20
param.setImageQuality(40);
OCR.getInstance(RealNameAuthenticationActivity.this).recognizeIDCard(param, new OnResultListener<IDCardResult>()
@Override
public void onResult(IDCardResult idCardResult)
Log.i("charge ID card", String.valueOf(idCardResult));
if (idCardResult != null)
if (idCardSide.equals("back"))
fileCardnationalStr = filePath;
File fileCardnational = new File(filePath);
if (fileCardnational.exists())
Bitmap bm = BitmapFactory.decodeFile(filePath);
idcardnationalbutton.setBackground(null);
idcardnationalbutton.setImageBitmap(bm);
String signDate = "";
String expiryDate = "";
String issueAuthority = "";
if (idCardResult.getSignDate() != null)
signDate = idCardResult.getSignDate().toString();
if (idCardResult.getExpiryDate() != null)
expiryDate = idCardResult.getExpiryDate().toString();
if (idCardResult.getIssueAuthority() != null)
issueAuthority = idCardResult.getIssueAuthority().toString();
// mContent.setText("签发机关: " + issueAuthority + "\\n\\n" +
// "有效期限: " + signDate + "-" + expiryDate + "\\n\\n");
else
fileCardheadsStr = filePath;
File fileCardhead = new File(filePath);
if (fileCardhead.exists())
Bitmap bm = BitmapFactory.decodeFile(filePath);
idcardheadbutton.setBackground(null);
idcardheadbutton.setImageBitmap(bm);
String name = "";
String sex = "";
String nation = "";
String num = "";
String address = "";
if (idCardResult.getName() != null)
name = idCardResult.getName().toString();
if (idCardResult.getGender() != null)
sex = idCardResult.getGender().toString();
if (idCardResult.getEthnic() != null)
nation = idCardResult.getEthnic().toString();
if (idCardResult.getIdNumber() != null)
num = idCardResult.getIdNumber().toString();
if (idCardResult.getAddress() != null)
address = idCardResult.getAddress().toString();
nameEt.setText(name);
cardEt.setText(num);
// mContent.setText("姓名: " + name + "\\n\\n" +
// "性别: " + sex + "\\n\\n" +
// "民族: " + nation + "\\n\\n" +
// "身份证号码: " + num + "\\n\\n" +
// "住址: " + address + "\\n\\n");
@Override
public void onError(OCRError ocrError)
Toast.makeText(RealNameAuthenticationActivity.this, "识别出错,请查看log错误代码", Toast.LENGTH_SHORT).show();
Log.d("MainActivity", "onError: " + ocrError.getMessage());
);
```
QQ群:548629089
以上是关于Android 身份证拍照 识别 文字识别 (百度)的主要内容,如果未能解决你的问题,请参考以下文章