车牌识别
获得阿里云代码
-
使用阿里云中艾科瑞特车牌识别,得到代码:
-
//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");
-