当前位置:   article > 正文

安卓使用百度云实现身份证识别-之_android studio通过调用百度云识别身份证

android studio通过调用百度云识别身份证

文字识别控制台 【可以领取免费的额度】 百度智能云-登录

百度云 -- key---密钥

百度智能云-登录

通过密钥 和 key 获取 access_token

https://ai.baidu.com/ai-doc/REFERENCE/Ck3dwjhhu

调用文字识别接口文档

https://ai.baidu.com/ai-doc/OCR/fk3h7xu7h

识别身份证的示例代码

1. 获取access_token

封装请求接口,其他地方调用就得到了access_token 

  1. // 封装一个百度云获取识别 的access_token 的方法
  2. public static Map getAccessToken() throws IOException{
  3. Map mapRes = null;
  4. MediaType mediaType = MediaType.parse("application/json");
  5. RequestBody body = RequestBody.create(mediaType ,"");
  6. Request request = new Request.Builder()
  7. .url(获取token的请求地址+"?client_id="+百度云的key+"&client_secret="+百度云的Secret_Key+"&grant_type=client_credentials")
  8. .post(body)
  9. .addHeader("Content-Type", "application/json")
  10. .addHeader("Accept", "application/json")
  11. .build();
  12. Response response = null;
  13. try {
  14. response = client.newCall(request).execute();
  15. String res = response.body().string();
  16. if(response.code()==500){
  17. Log.e("失败请求","详细打印---请求结果"+response);
  18. }
  19. resmap = gson.fromJson(res,Map.class);
  20. Constant.access_token = resmap.get("access_token").toString();
  21. System.out.println("token"+Constant.access_token);
  22. return resmap;
  23. } catch (IOException e) {
  24. e.printStackTrace();
  25. }
  26. return resmap;
  27. }

2.调用接口传递数据,获取识别内容【参考教程文档】

 1.封装请求接口

  1. // 封装一个获取识别身份证的接口 方法
  2. public static JSONObject getCardDetail(String url, Map<String,Object> map) throws IOException{
  3. JSONObject jsonObject = null;
  4. // 添加这个是为了解决一个报错信息,具体忘记了,
  5. OkHttpClient client3 = new OkHttpClient.Builder()
  6. .protocols(Collections.singletonList(Protocol.HTTP_1_1))
  7. .build();
  8. MediaType mediaType = MediaType.parse("application/x-www-form-urlencoded");
  9. // 使用 FormBody.Builder 构建请求体
  10. FormBody.Builder formBuilder = new FormBody.Builder();
  11. for (Map.Entry<String, Object> entry : map.entrySet()) {
  12. // 将Object转换为String
  13. String value = (entry.getValue() != null) ? entry.getValue().toString() : "";
  14. formBuilder.add(entry.getKey(), value);
  15. }
  16. RequestBody formBody = formBuilder.build();
  17. Request request = new Request.Builder()
  18. .url(Constant.ocrBaseUrl+url+"?access_token="+Constant.access_token)
  19. .post(formBody)
  20. .addHeader("Content-Type", "application/x-www-form-urlencoded")
  21. .addHeader("Accept", "application/json")
  22. // .post(body)
  23. .build();
  24. Log.d("发送请求", "请求参数: "+"\r\n" + formBody.toString());
  25. Response response = null;
  26. try {
  27. response = client3.newCall(request).execute();
  28. String res = response.body().string();
  29. Log.d("获取", "response: " + response);
  30. if(response.code()==500){
  31. Log.e("失败请求","详细打印---请求结果"+response);
  32. }
  33. resmap = gson.fromJson(res,Map.class);
  34. jsonObject = new JSONObject(resmap);
  35. } catch (IOException e) {
  36. e.printStackTrace();
  37. }
  38. return jsonObject;
  39. }

2. 传递数据-》请求接口-》获取识别数据

身份证识别 - 文字识别OCR

  1. 选择照片
  2. Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT);
  3. intent.addCategory(Intent.CATEGORY_OPENABLE);
  4. intent.setType("image/*");
  5. startActivityForResult(intent, CHOOSE_PHOTO);
  6. isImage0 = true;
  7. String base64;
  8. 选择完照片得到uri,自己会触发一个事件
  9. protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
  10. super.onActivityResult(requestCode, resultCode, data);
  11. switch(requestCode){
  12. case CHOOSE_PHOTO:
  13. Uri uri = data.getData();
  14. try {
  15. if(resultCode == Activity.RESULT_OK){
  16. // 通过uri得到base64
  17. InputStream inputStream = getContentResolver().openInputStream(uri);
  18. byte[] buffer = new byte[inputStream.available()];
  19. inputStream.read(buffer);
  20. inputStream.close();
  21. base64 = Base64.encodeToString(buffer, Base64.DEFAULT);
  22. // 封装的 调用处理图片的接口方法
  23. getfRrontDetail();
  24. }
  25. } catch (FileNotFoundException e) {
  26. e.printStackTrace();
  27. } catch (IOException e) {
  28. e.printStackTrace();
  29. }
  30. default:
  31. break;
  32. }
  33. }
  34. // 封装获取前面详情
  35. public void getfRrontDetail(){
  36. new Thread(new Runnable() {
  37. @RequiresApi(api = Build.VERSION_CODES.O)
  38. @Override
  39. public void run() {
  40. try {
  41. // 获取token
  42. getAccessToken();
  43. Map<String, Object> params = new HashMap<>();
  44. params.put("id_card_side", "front");
  45. params.put("image", base64);
  46. params.put("detect_card", false);
  47. params.put("detect_risk", true);
  48. params.put("detect_quality", true);
  49. params.put("detect_photo", false);
  50. params.put("detect_direction", false);
  51. Map res = null;
  52. res = RequestUtil.getCardDetail(Constant.onCardAPI,params);
  53. System.out.println("获得身份证结果 "+res);
  54. JSONObject res = null;
  55. res = RequestUtil.getCardDetail(Constant.onCardAPI,params);
  56. JSONObject wordsResult = res.getJSONObject("words_result");
  57. System.out.println("获得身份证结果 "+wordsResult);
  58. // 正面
  59. // wordsResult.getJSONObject("姓名").getString("words") 这个拿到姓名
  60. } catch (IOException e) {
  61. e.printStackTrace();
  62. }
  63. }
  64. }).start();
  65. }

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/不正经/article/detail/683083
推荐阅读
相关标签
  

闽ICP备14008679号