Android开发百度人证识别练习项目Demo

首先要登陆百度智能云(可点击这个连接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下载按钮,下载之后进行解压,包含下面几个目录:

具体的这几个目录是怎么使用的,以及他们的功能,可以点击上图下载按钮旁边的使用说明按钮,里面的说明文档讲解的十分详细。下面我也是截图:

接下来还是按照开发文档进行操作:

  1. 前往SDK下载页面下载Android SDK压缩包。
  2. (必须)将下载包libs目录中的ocr-sdk.jar文件拷贝到工程libs目录中,并加入工程依赖。
  3. (必须)将libs目录下armeabi,arm64-v8a,armeabi-v7a,x86文件夹按需添加到android studio工程src/main/jniLibs目录中, eclipse用户默认为libs目录。
  4. (可选)如果需要使用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;
    }
}
发布了75 篇原创文章 · 获赞 31 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/yaoyaoyao_123/article/details/103548182
今日推荐