使用阿里云接口完成车牌图片识别


车牌识别

获得阿里云代码

  • 使用阿里云中艾科瑞特车牌识别,得到代码:

    •  //API产品路径
              String requestUrl = "https://iplatecard.market.alicloudapi.com/ai_market/ai_ocr_universal/license_plate/v2";
              //阿里云APPCODE
              String appcode = "阿里云APPCODE";
              Map<String, String> headers = new HashMap<String, String>();
              headers.put("Authorization", "APPCODE " + appcode);
              //根据API的要求,定义相对应的Content-Type
              headers.put("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8");
              Map<String, String> bodys = new HashMap<String, String>();
      
              //内容数据类型,如:0,则表示BASE64编码;1,则表示图像文件URL链接
              if (false) {
                  //启用BASE64编码方式进行识别
                  //内容数据类型是BASE64编码
                  String imgFile = "本地图片路径";
                  String imgBase64 = "";
                  try {
                      File file = new File(imgFile);
                      byte[] content = new byte[(int) file.length()];
                      FileInputStream finputstream = new FileInputStream(file);
                      finputstream.read(content);
                      finputstream.close();
                      imgBase64 = new String(encodeBase64(content));
                  } catch (IOException e) {
                      e.printStackTrace();
                      return;
                  }
                  bodys.put("IMAGE", imgBase64);
                  bodys.put("IMAGE_TYPE", "0");
              } else {
                  //启用URL方式进行识别
                  //内容数据类型是图像文件URL链接
                  bodys.put("IMAGE", "https://icredit-brand.oss-cn-hangzhou-internal.aliyuncs.com/%E8%BD%A6%E7%89%8C_%E9%97%BDC_D8888.jpg");
                  bodys.put("IMAGE_TYPE", "1");
              }
              try {
                  String response = post(requestUrl, headers, bodys);
                  System.out.println("response = " + response);
              } catch (Exception e) {
                  e.printStackTrace();
              }
          }
      
      public static String post(String url, Map<String, String> headers, Map<String, String> body) throws IOException {
              HttpClient client = new HttpClient();
              PostMethod postMethod = new PostMethod(url);
              // 必须设置下面这个Header
              for (String key : headers.keySet()) {
                  postMethod.addRequestHeader(key, headers.get(key));
              }
      
              List<NameValuePair> bodyPair = new ArrayList<>();
              for (String key : body.keySet()) {
                  bodyPair.add(new NameValuePair(key, body.get(key)));
              }
              NameValuePair[] bodyKvs = new NameValuePair[body.size()];
              postMethod.setRequestBody(bodyPair.toArray(bodyKvs));
      
              int code = client.executeMethod(postMethod);
              if (code == 200) {
                  String res = postMethod.getResponseBodyAsString();
                  System.out.println(res);
                  return res;
              }
              else {
                  System.out.println(code);
              }
              throw new IOException("请求失败");
          }
      

代码修改:

  • String appcode=“我自己的购买的appcode”

  • 传输的图片使用BASE64编码,所以使用if中的传输方法,将if(false)改为if(true)

  • imgFile中的图片路径就写车牌图片在本地的路径,例如:String imgFile="D;\\upload\\"+carFile.getOriginalFilename();

  • if中的try catch代码块里的return注释掉。

  • 最外层try catch里的response就是经过阿里云图片识别后响应的json返回,接下来从中解析出车牌号字符串

使用车牌识别代码需导入依赖:

  • <dependency>
                <groupId>commons-httpclient</groupId>
                <artifactId>commons-httpclient</artifactId>
                <version>3.1</version>
            </dependency>
    

解析json

导入json依赖:

  • <dependency>
                <groupId>net.sf.json-lib</groupId>
                <artifactId>json-lib</artifactId>
                <version>2.4</version>
                <classifier>jdk15</classifier>
            </dependency>
    

解析代码:

  • String NUMBER="";
            JSONObject json = JSONObject.fromObject(response);
            JSONArray content = json.getJSONArray("CAR_NUMBER_RECOGNITION_ENTITY"); CAR_NUMBER_RECOGNITION_ENTITY内容
            if (content.size() > 0) {
                for (int i = 0; i < content.size(); i++) {
                    JSONObject job = content.getJSONObject(i); 
                    NUMBER= (String) job.get("NUMBER");
                }
            }
    
  • 解析根结点为“[]”的json,使用 JSONArray

    • 例如:

      [
          {
              "id": 1580615,
              "name": "皮的嘛",
              "packageName": "com.renren.mobile.android",
              "iconUrl": "app/com.renren.mobile.android/icon.jpg",
              "stars": 2,
              "size": 21803987,
              "downloadUrl": "app/com.renren.mobile.android/com.renren.mobile.android.apk",
              "des": "2011-2017 你的铁头娃一直在这儿。中国最大的实名制SNS网络平台,嫩头青"
          },
          {
              "id": 1540629,
              "name": "不存在的",
              "packageName": "com.ct.client",
              "iconUrl": "app/com.ct.client/icon.jpg",
              "stars": 2,
              "size": 4794202,
              "downloadUrl": "app/com.ct.client/com.ct.client.apk",
              "des": "斗鱼271934走过路过不要错过,这里有最好的鸡儿"
          }
      ]
       JSONArray jsonArray=new JSONArray(json);
                  for(int i=0;i<jsonArray.length();i++){
                      JSONObject object=jsonArray.getJSONObject(i);
                      String id=object.getString("id");
                      String name=object.getString("name");
                      String packageName=object.getString("packageName");
                      String iconUrl = object.getString("iconUrl");
                      double stars=Double.parseDouble(object.getString("stars"));
                      String size=object.getString("size");
                      String downloadUrl = object.getString("downloadUrl");
                      String des = object.getString("des");
                     //其他操作
                     ....
                  }
      
  • 解析根结点为"{}"的json,JSONObject

    • 例如:

      {
                  "id": 1525490,
                  "name": "有缘网",
                  "packageName": "com.youyuan.yyhl",
                  "iconUrl": "app/com.youyuan.yyhl/icon.jpg",
                  "stars": 4,
                  "size": 3876203,
                  "downloadUrl": "app/com.youyuan.yyhl/com.youyuan.yyhl.apk",
                  "des": "产品介绍:有缘是时下最受大众单身男女亲睐的婚恋交友软件。有缘网专注于通过轻松、"
              }
       JSONObject object = new JSONObject(json);
                  long id = object.getLong("id");
                  String name = object.getString("name");
                  String packageName = object.getString("packageName");
                  String iconUrl = object.getString("iconUrl");
                  float stars = Float.parseFloat(object.getString("stars"));
                  long size = object.getLong("size");
                  String downloadUrl = object.getString("downloadUrl");
                  String des = object.getString("des");
      
  • 阿里云的json返回response:

    • response = {
      "CAR_NUMBER_RECOGNITION_STATUS": "一切尽在您的掌握之中", "CAR_NUMBER_AMOUNT": 1, 
      "CAR_NUMBER_RECOGNITION_ENTITY":
      [
      	{
      		"TYPE": "BLUE",
              "NUMBER": "京Y06018", "CAR_NUMBER_RECOGNITION_PROBABILITY": "0.9778165732111249", "CAR_NUMBER_POSITION": "20, 128, 418, 247", "CAR_NUMBER_BELONG_TO": "京Y",
      "CAR_NUMBER_BELONG_TO_PROVINCE": "北京市", "CAR_NUMBER_BELONG_TO_CITY": ""
      	}
      ]
      }
      
      
    • {}中嵌套了[],最外层{}的内容为 JSONObject类型:JSONObject json = JSONObject.fromObject(response);

    • 其次再拿到【】里的内容:使用JSONArray类型接收:JSONArray content = json.getJSONArray("CAR_NUMBER_RECOGNITION_ENTITY");

    • 拿到 JSONArray中的内容后,遍历每一个“键值对”,拿到这个对:JSONObject job = content.getJSONObject(i);

    • 拿到对后,通过get键,得到值:NUMBER= (String) job.get("NUMBER");


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM