概述
首先要登陆百度智能云(可点击这个连接https://ai.baidu.com/solution/faceprint?track=cp:ainsem|pf:pc|pp:chanpin-renlianshibie|pu:renlianshibie-jiejuefangan-shimingrenzheng|ci:|kw:10010166),然后依次点击:开放能力——》文字识别——》身份证识别——》立即使用出现管理控制台界面:
可以看到我还没有创建过任何应用,此时点击创建应用,依次输入提前创建的android工程名
点击立即创建。点击返回应用列表,此时就可以看到API Key,Secret Key等信息了。这是提前要准备的,除了准备这些之外,还要下载SDK,点击应用列表页面右边的SDK下载,来到这个页面:
点击第一个Android SDK下载按钮,下载之后进行解压,包含下面几个目录:
具体的这几个目录是怎么使用的,以及他们的功能,可以点击上图下载按钮旁边的使用说明按钮,里面的说明文档讲解的十分详细。下面我也是截图:
接下来还是按照开发文档进行操作:
- 前往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文件夹。
前三步都很好理解:第一步我们让我们下载SDK,我们已下载过了,接下来第二步第三步只需要按照说明把他们依次复制到android studio的相应目录即可。其中第二步需要注意:复制到libs之后还要右键该文件,然后点击Add As Library;第三步把那几个文件夹按需,注意是按需,但是我们经常是把armeabi,arm64-v8a,armeabi-v7a,x86q全部复制,具体这几个有什么区别,可以自行百度。
接着在AndroidManifest.xml中添加权限:
接下来就是Demo的使用了:
DEMO使用说明
安卓SDK包中提供了一个可快速运行的demo工程,该工程已经集成了sdk,UI库,您只需直接在Android Studio中导入开发包OCRDemo目录即可运行。
需要说明的是在解压后的OCRDemo和ocr_ui文件夹,这都是百度工程师写好的怎么android界面(比如身份证的相框等),还有权限管理,存储,裁剪等,所以我们只需要把ocr_ui这个项目导入到我们的工程中就行了。
具体的导入过程:
点击android studio的File——》new ——》import Module,然后点击文件选项:
选择额你解压的那个文件夹的ocr_ui文件之后点击完成:
等待项目同步结束之后会报错:
主要是因为百度的ocr_ui项目中使用的编译DSK版本低和build.gradle中的的字段compile字段果实,改成implementation就行了。
具体怎么更改,可以根据自己项目,点击project struct进行配置,这点我就不详细说了,有问题的就留言。接下来还要打开Project Structure,点击Dependicies点击添加,点击Module Denpendency然后点击occ_ui添加进去就行了。
这样我们就把前期的准备工作做完了。接下来就要去anroi工程中写代码了。但是写diamagnetic之前还有一个重要工作,就是身份认证,认证有两种方式,一种是安全的方式和另外一种不安全的方式,因为我一开始就是用的安全方式,而且安全方式简单易用,不用自己写代码,所以在这里只叙述安全方式:
在应用别表也买呢点击管理,点击下载License文件-Android(文字识别)
下载之后,在androi工程新建assets文件夹,并把下载的文件复制进去:
然后我们要在代码中进行身份认证初始化:
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initBaiduSdkPession();
}
private void initBaiduSdkPession(){
OCR.getInstance(this).initAccessToken(new OnResultListener<AccessToken>() {
@Override
public void onResult(AccessToken result) {
Log.e("yly","success");
// 调用成功,返回AccessToken对象
String token = result.getAccessToken();
}
@Override
public void onError(OCRError error) {
Log.e("yly","error");
// 调用失败,返回OCRError子类SDKError对象
}
}, getApplicationContext());
}
}
这样就完成了身份认证,启动项目运行之后Log显示如下,表示运行成功,如果然会error就要重新检查项目那里是否出错。
以下代码是我写了一个按钮点击之后调用百度api进行拍照,然后识别身份证,返回身份证上面的信息:
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.text.TextUtils;
import android.util.Log;
import android.view.View;
import android.widget.Toast;
import com.baidu.ocr.sdk.OCR;
import com.baidu.ocr.sdk.OnResultListener;
import com.baidu.ocr.sdk.exception.OCRError;
import com.baidu.ocr.sdk.model.AccessToken;
import com.baidu.ocr.sdk.model.IDCardParams;
import com.baidu.ocr.sdk.model.IDCardResult;
import com.baidu.ocr.ui.camera.CameraActivity;
import java.io.File;
public class MainActivity extends AppCompatActivity {
private static final int REQUEST_CODE_CAMERA = 102;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initBaiduSdkPession();
findViewById(R.id.button).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent_front = new Intent(MainActivity.this, CameraActivity.class);
intent_front.putExtra(CameraActivity.KEY_OUTPUT_FILE_PATH,
getSaveFile(getApplication()).getAbsolutePath());
intent_front.putExtra(CameraActivity.KEY_CONTENT_TYPE, CameraActivity.CONTENT_TYPE_ID_CARD_FRONT);
startActivityForResult(intent_front, REQUEST_CODE_CAMERA);
}
});
}
@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 = getSaveFile(getApplicationContext()).getAbsolutePath();
if (!TextUtils.isEmpty(contentType)) {
if (CameraActivity.CONTENT_TYPE_ID_CARD_FRONT.equals(contentType)) {
recIDCard(IDCardParams.ID_CARD_SIDE_FRONT, filePath);
}
}
}
}
}
private void recIDCard(final 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(MainActivity.this).recognizeIDCard(param, new OnResultListener<IDCardResult>() {
@Override
public void onResult(IDCardResult result) {
Log.e("yly",result.getJsonRes()+" ");
}
@Override
public void onError(OCRError error) {
//识别失败
}
});
}
private void initBaiduSdkPession(){
OCR.getInstance(this).initAccessToken(new OnResultListener<AccessToken>() {
@Override
public void onResult(AccessToken result) {
Log.e("yly","success");
// 调用成功,返回AccessToken对象
String token = result.getAccessToken();
}
@Override
public void onError(OCRError error) {
Log.e("yly","error");
// 调用失败,返回OCRError子类SDKError对象
}
}, getApplicationContext());
}
public File getSaveFile(Context context) {
File file = new File(context.getFilesDir(), "pic.jpg");
return file;
}
}
最后
以上就是无语小猫咪为你收集整理的Android开发百度人证识别练习项目Demo的全部内容,希望文章能够帮你解决Android开发百度人证识别练习项目Demo所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复