android 扫描识别车牌,身份证

package com.example.caliv.ffyy;

import android.app.Activity;
import android.app.AlertDialog;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.os.Looper;
import android.provider.MediaStore;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import android.telecom.Call;
import android.text.TextUtils;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;
import com.baidu.idl.util.FileUtil;
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.*;
import com.baidu.ocr.ui.camera.CameraActivity;
import com.baidu.ocr.ui.camera.CameraNativeHelper;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import java.io.DataOutputStream;
import java.io.File;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;

public class AjxxActivity extends AppCompatActivity{
private String response = “”;
private static final int REQUEST_CODE_CAMERA = 102;
private TextView mContent;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.ajxx);
loady();
mContent = (TextView) findViewById(R.id.sfxx);
//身份证识别头像面
findViewById(R.id.btn_sfzsm).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(AjxxActivity.this, CameraActivity.class);
intent.putExtra(CameraActivity.KEY_OUTPUT_FILE_PATH,
FileUtils.getSaveFile(getApplication()).getAbsolutePath());
intent.putExtra(CameraActivity.KEY_CONTENT_TYPE, CameraActivity.CONTENT_TYPE_ID_CARD_FRONT);
startActivityForResult(intent, REQUEST_CODE_CAMERA);

        }
    });
    //车牌识别
    findViewById(R.id.btn_cpsm).setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent intent = new Intent(AjxxActivity.this, CameraActivity.class);
            intent.putExtra(CameraActivity.KEY_OUTPUT_FILE_PATH,
                    FileUtils.getSaveFile(getApplication()).getAbsolutePath());
            intent.putExtra(CameraActivity.KEY_CONTENT_TYPE, CameraActivity.CONTENT_TYPE_GENERAL);
            startActivityForResult(intent, 102);

        }
    });

    // 初始化
    initAccessTokenWithAkSk();
}
private void initAccessTokenWithAkSk() {
    OCR.getInstance().initAccessTokenWithAkSk(new OnResultListener<AccessToken>() {
        @Override
        public void onResult(AccessToken accessToken) {
            Log.d("AjxxActivity", "onResult: " + accessToken.toString());
            runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    Toast.makeText(AjxxActivity.this, "初始化认证成功", Toast.LENGTH_SHORT).show();
                }
            });
        }
        @Override
        public void onError(OCRError ocrError) {
            ocrError.printStackTrace();
            Log.e("AjxxActivity", "onError: " + ocrError.getMessage());
            runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    Toast.makeText(AjxxActivity.this, "初始化认证失败,请检查 key", Toast.LENGTH_SHORT).show();
                }
            });
        }
        }, getApplicationContext(),
            // 根据自己的包名,去百度云自行配置
            "7DkaaoogXcS77XyHAsT71111",
            // 根据自己的包名,去百度云自行配置
            "ZENhKFDG7L65XAGtB7pgSxQgsLz1111");
}


@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable 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);
            Toast.makeText(AjxxActivity.this, contentType, Toast.LENGTH_SHORT).show();
            // 通过临时文件获取拍摄的图片
            String filePath = FileUtils.getSaveFile(getApplicationContext()).getAbsolutePath();
            if(!TextUtils.isEmpty(contentType)){
                if(CameraActivity.CONTENT_TYPE_ID_CARD_FRONT.equals(contentType)){
                    recIDCard(IDCardParams.ID_CARD_SIDE_FRONT,filePath); // 身份证识别方法
                }
                if(CameraActivity.CONTENT_TYPE_GENERAL.equals(contentType)){
                    recCarnum(GeneralBasicParams.CHINESE_ENGLISH,filePath);//车牌识别方法
                }
            }
        }
    }
}


/**
 *
 * 解析身份证图片
 *
 * @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().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")) {
                    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 {
                    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();
                    }
                    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(AjxxActivity.this, "识别出错,请查看log错误代码", Toast.LENGTH_SHORT).show();
            Log.d("AjxxActivity", "onError: " + ocrError.getMessage());

        }
    });
}


/**
 *
 * 解析车牌图片
 *
 * @param idCardSide 车牌号
 * @param filePath   图片路径
 */
private void recCarnum(final String idCardSide, String filePath) {

    // 车牌识别参数设置
    OcrRequestParams param = new OcrRequestParams();
    // 设置image参数
    param.setImageFile(new File(filePath));
    // 设置其他参数
    //putParam("detect_direction", true);
    OCR.getInstance().recognizeLicensePlate(param, new OnResultListener<OcrResponseResult>() {
        @Override
        public void onResult(OcrResponseResult ocrResponseResult) {
            try {
                String cp=ocrResponseResult.getJsonRes().toString();
                JSONObject object = new JSONObject(cp);
                JSONObject ss=object.getJSONObject("words_result");
                String sa=ss.getString("number").toString();//获取车牌号码
                String cl=ss.getString("color").toString();//获取车牌颜色
                String chepaihao="";
                if(cl.equals("blue")){
                    chepaihao="蓝色";
                }
                if(cl.equals("green")){
                    chepaihao="绿色";
                }
                if(cl.equals("yellow")){
                    chepaihao="黄色";
                }
                mContent.setText("车牌号码: " + sa + "\n\n" +
                        "车牌颜色: " + chepaihao + "\n\n");
            } catch (JSONException e) {
                Toast.makeText(AjxxActivity.this, "识别出错,请查看log错误代码!", Toast.LENGTH_SHORT).show();
            }
        }

        @Override
        public void onError(OCRError ocrError) {
            Toast.makeText(AjxxActivity.this, "识别出错,请查看log错误代码!", Toast.LENGTH_SHORT).show();
        }
    });
}





@Override
protected void onDestroy() {
    super.onDestroy();
    // 释放内存资源
    OCR.getInstance().release();
}

//页面加载方法
private void loady(){
    final ConnHt connHt=new ConnHt();
    new Thread(new Runnable() {
        @Override
        public void run() {
            HttpURLConnection conn = null;
            try{
                Intent intent=getIntent();
                String paramStr="yhm="+ URLEncoder.encode(intent.getStringExtra("yhm"),"utf-8");
                response=connHt.sendHttp(conn,Quantity.urlajxxlr,paramStr);
                runOnUiThread(new Runnable() {
                    public void run() {

                    }
                });
                if (conn != null) {
                    conn.disconnect();
                }
            }catch (Exception e){
                e.printStackTrace();
            }
        }
    }).start();
}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值